使用Capybara和Selenium自动滚动按钮进入视图

时间:2013-07-12 19:59:35

标签: selenium-webdriver capybara

上个月(2013年6月)的某个时候,我们的几个Capybara测试开始失败主要是因为他们试图点击的按钮不在视野中。理想情况下,我想弄清楚改变了什么。我们目前正在使用selenium-webdriver 2.33,但我已经尝试回到2.29但它仍然无效。我们目前只针对Firefox运行,也许这是因为Firefox版本较新。

除此之外,我无法弄清楚如何将按钮滚动到视图中。从我收集的内容来看,我可以使用scrollIntoView,但不知道如何在Capybara步骤中调用它。我尝试了各种变体:

 Capybara.current_session.driver.execute_script("arguments[0].scrollIntoView(true;)", find_button(button).native)

但没有运气,因为find_button本身不起作用。

注意:我们根据按钮的文字进行选择。可以根据ID进行选择,但需要对UI测试进行大量更改,因此我们希望避免使用它。

3 个答案:

答案 0 :(得分:24)

我通常有一个模块JavascriptDriver,用于在测试中包含Selenium功能,我在那里定义了一个帮助方法:

module JavascriptDriver
  # other code that prepares capybara to work with selenium

  def scroll_to(element)
    script = <<-JS
      arguments[0].scrollIntoView(true);
    JS

    Capybara.current_session.driver.browser.execute_script(script, element.native)
  end
end

然后在测试中,您可以通过传递正常的Capybara元素来利用该代码:

scroll_to(page.find("button.some-class", visible: false))

答案 1 :(得分:1)

这是一个在Selenium和Chrome中出现的滚动错误。该修复程序为https://stackoverflow.com/a/11048669/1935918

答案 2 :(得分:1)

由于您的页面不可滚动,因此您可以使用与其他答案中提供的链接答案相同的方法,但使用一种变体来定位您的可滚动元素。例如,如果您的可滚动元素的ID为&#34;可滚动&#34;:

page.execute_script "document.getElementById("scrollable").scrollTop += 100"

我个人不喜欢滚动测试,所以如果有人为Capybara + Selenium提出更好的解决方案,我很乐意看到它。