所以我用capybara测试我的骨干应用程序。该应用程序使用jquery动画来进行幻灯片切换。
所以我遇到了各种各样奇怪的问题。像找不到元素的东西(即使使用等待的查找器和禁用jquery动画)我从chrome驱动程序切换回Firefox并修复了一些问题。我目前的问题包括:
并出现以下错误:
Failure/Error: click_link "Continue"
Selenium::WebDriver::Error::StaleElementReferenceError:
Element not found in the cache - perhaps the page has changed since it was looked up
基本上,我的问题是:
我必须像这样链接
page.find('#myDiv a').click_link('continue')
或者这有效吗?
page.find('h1').should have_content('Im some headline')
click_link('continue')
这是我的代码:http://pastebin.com/z94m0ir5
答案 0 :(得分:0)
我也看到过没有找到屏幕外元素的问题。我不确定是什么导致这种情况,但它可能与容器的溢出CSS属性有关。我们试图通过确保在CI服务器上以完整大小打开窗口来解决这个问题,或者在某些情况下通过执行JavaScript将元素滚动到视图中。这似乎是Selenium限制:https://code.google.com/p/selenium/issues/detail?id=4241
很难确切地说出了什么问题,但我对睡眠陈述的使用以及对evaluate_script
/ execute_script
的大量使用持怀疑态度。这些往往是不好的迹象。使用Capybara中的等待查找程序和断言方法,不需要睡眠(您可能需要为某些操作设置更长的等待时间)。 JavaScript执行,除了模拟用户如何与页面交互之外,根本不等待,当你使用jQuery时,对任何不匹配的选择器的操作将无声地失败,这样就可能导致页面状态不正确。
你不必链。 Capybara的等待方法都是同步的。