上个月(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测试进行大量更改,因此我们希望避免使用它。
答案 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提出更好的解决方案,我很乐意看到它。