Cucumber + Capybara + Selenium:选择文字

时间:2010-12-17 18:59:30

标签: testing selenium cucumber capybara

我正在对文本编辑器进行更改,我需要能够选择文本来使用JavaScript来操作它。 如何选择含有Cucumber,Capybara和Selenium的文字?

2 个答案:

答案 0 :(得分:3)

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

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

我能够修改他们的脚本,以便能够在Selenium 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)

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

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

如果单个元素中的文字不够灵活,那么JavaScript范围的文档应该为您提供所需的额外细节。

答案 1 :(得分:0)

将Josh建议的方法绑定到Capybara辅助函数中(并为start / end元素中的部分选择添加可选的位置参数):

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)