2010-12-17 124 views
4

我正在对文本编辑器进行更改,我需要能够选择文本以使用JavaScript进行操作。 如何选择黄瓜,水豚和硒的文字?黄瓜+水豚+硒:选择文本

+4

这个标题听起来像一个致命的* hors d'œuvre*的食谱。只是说。请原谅这个评论的星期五。 – MPelletier 2010-12-17 19:02:19

回答

3

我发现另一个stackoverflow问题,谈论如何使用JavaScript选择文本。

Can you set and/or change the user’s text selection in JavaScript?

我能够修改他们的脚本能够从硒IDE一个getEval电话中工作(如果你以不同的方式使用Selenium,您可能需要对其进行修改)。我也删除了与Firefox不相关的代码:

function selectElementContents(el,start,end) { 
    var sel = window.getSelection(); 
    var range = window.document.createRange(); 
    range.setStart(el,start); 
    range.setEnd(el,end); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
} 
selectElementContents(window.document.getElementById("container").firstChild,10,20) 

这允许您在单个元素中选择一段文本。 “容器”是包含文本的元素的ID,10和20是要开始和停止的字符的索引。

只需将其压缩到一行,将其添加到Selenium getEval语句中,并且它应该为您选择文本。

如果单个元素中的文本对于您来说不够灵活,JavaScript范围的文档应该为您提供所需的额外详细信息。

+0

谢谢。我搞清楚如何将这个应用到我的设置。 – 2011-02-11 11:57:23

0

绑由Josh建议的方法成水豚辅助函数(和开始/结束元素中添加了对部分选择任意的位置的参数):

module TextSelection 
    def select_text(startEl, endEl, startPos = 0, endPos = 0) 
    js = <<-JS 
     var sel = window.getSelection(); 
     var range = window.document.createRange(); 
     range.setStart(arguments[0],#{startPos}); 
     range.setEnd(arguments[1],#{endPos}); 
     sel.removeAllRanges(); 
     sel.addRange(range); 
    JS 

    page.execute_script(js, startEl.native, endEl.native) 
    end 
end 

World(TextSelection) 

然后,在测试:

start_el = first('#first') 
end_el = first('#last') 
select_text(start_el, end_el)