12

上个月的某个时候(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 测试进行大量更改,因此我们希望避免它。

4

3 回答 3

31

我通常有一个模块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))
于 2016-06-28T20:42:07.727 回答
3

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

于 2014-12-15T19:44:37.057 回答
1

由于您的页面不可滚动,您可以使用与另一个答案中提供的链接答案相同的方法,但可以使用一种变体来定位您的可滚动元素。例如,如果您的可滚动元素的 id 为“可滚动”:

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

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

于 2016-06-09T21:01:13.787 回答