得到奇怪的水豚问题

时间:2013-12-07 02:04:31

标签: ruby-on-rails ruby tdd capybara integration-testing

所以我用capybara测试我的骨干应用程序。该应用程序使用jquery动画来进行幻灯片切换。

所以我遇到了各种各样奇怪的问题。像找不到元素的东西(即使使用等待的查找器和禁用jquery动画)我从chrome驱动程序切换回Firefox并修复了一些问题。我目前的问题包括:

  • 如果浏览器窗口未最大化,有时它找不到元素,即使它们为.visible返回true也是如此?如果我检查撬(这是一个固定的幻灯片w没有响应的东西)
  • 并出现以下错误:

    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
    

基本上,我的问题是:

  • 我错误地触发了这些问题。
  • 你能告诉我如果我的代码中还有其他明显的问题吗?
  • 当使用等待的Finder时,我是否需要将我的点击链接到返回的元素以确保它已正确等待,或者我可以找到该元素并在另一行上调用点击:

我必须像这样链接

page.find('#myDiv a').click_link('continue')

或者这有效吗?

page.find('h1').should have_content('Im some headline')
click_link('continue')

这是我的代码:http://pastebin.com/z94m0ir5

1 个答案:

答案 0 :(得分:0)

  • 我也看到过没有找到屏幕外元素的问题。我不确定是什么导致这种情况,但它可能与容器的溢出CSS属性有关。我们试图通过确保在CI服务器上以完整大小打开窗口来解决这个问题,或者在某些情况下通过执行JavaScript将元素滚动到视图中。这似乎是Selenium限制:https://code.google.com/p/selenium/issues/detail?id=4241

  • 很难确切地说出了什么问题,但我对睡眠陈述的使用以及对evaluate_script / execute_script的大量使用持怀疑态度。这些往往是不好的迹象。使用Capybara中的等待查找程序和断言方法,不需要睡眠(您可能需要为某些操作设置更长的等待时间)。 JavaScript执行,除了模拟用户如何与页面交互之外,根本不等待,当你使用jQuery时,对任何不匹配的选择器的操作将无声地失败,这样就可能导致页面状态不正确。

  • 你不必链。 Capybara的等待方法都是同步的。