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

Kyl*_*ley 10 capybara selenium-webdriver

上个月(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)
Run Code Online (Sandbox Code Playgroud)

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

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

Gra*_*mey 27

我通常有一个模块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
Run Code Online (Sandbox Code Playgroud)

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

scroll_to(page.find("button.some-class", visible: false))
Run Code Online (Sandbox Code Playgroud)