我正在使用带有Ruby 1.9.3的Capybara 2.1使用selenium驱动程序(使用Minitest和测试单元)来测试Web应用程序.
我正在努力解决这个StaleElementReferenceException问题.我已经看过很多关于这个主题的讨论,但我无法找到解决我所面临的问题的方法.
基本上,我试图使用以下代码在我的页面上找到所有分页元素:
pagination_elements = page.all('.pagination a')
Run Code Online (Sandbox Code Playgroud)
然后我在这些元素上做一些断言,比如:
pagination_elements.first.must_have_content('1')
Run Code Online (Sandbox Code Playgroud)
在这些断言之后,我通过单击Next Page链接继续测试,以确保我未来的第一个分页元素将是Previous Page.要做到这一点,我再次检索分页元素:
new_pagination_elements = page.all('.pagination a')
Run Code Online (Sandbox Code Playgroud)
而且Stale Error正在这里发生,因为我已经达到了我已经达到过的元素.(这是错误)
您可以在此处查看链接状态.
我真的不知道如何使这个常见的测试工作正常.你有更好的方法来达到我的分页元素吗?
selenium webdriver默认情况下,我使用 capybara 2.1.0minitest和test::unit,对于一些需要访问该.hover方法的测试,我使用的是 Chrome webdriver
在几乎每个需要 chrome 的测试结束时,我都有一个空白的 chrome 窗口,我必须手动关闭才能结束我的测试。
这是我的测试助手的一部分:
def use_chrome_driver
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.current_driver = :selenium_chrome
end
def setup
DatabaseCleaner.start
Capybara.current_driver = :selenium
end
def teardown
Capybara.reset_session!
Capybara.use_default_driver
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
setup 方法use_chrome_driver在 chrome 测试开始时被调用覆盖。IE :
def test_example
use_chrome_driver
...
end
Run Code Online (Sandbox Code Playgroud)
test_example如果我不手动关闭打开的 Chrome 浏览器,这将永远不会退出。当我手动退出他时,测试完成并通过,没有错误。
那么为什么这个 Chrome 浏览器窗口不会每次都自动关闭呢?(有时它会自动关闭 ~15%!)