Capybara会议未在测试结束时结束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Capybara会议未在测试结束时结束相关的知识,希望对你有一定的参考价值。
我有一系列使用selenium / capybara / rspec的自动化测试。对于我的一个测试,我弄脏了一个表单并验证是否触发了某些错误。这是测试的结束......问题是,当测试完成运行时,代码尝试关闭浏览器,弹出一个javascript消息与This page is asking you to confirm that you want to leave - data you have entered may not be saved.
在我的规范助手中,我有:
Capybara.register_driver :firefox do |app|
Capybara::Selenium::Driver.new(app, browser: :firefox)
end
Capybara.default_driver = :firefox
Capybara.app_host = ********* #redacted
Capybara.default_max_wait_time = 5
RSpec.configure do |config|
config.before(:each) do
config.include Capybara::DSL
end
config.after(:each) do
Capybara.reset_sessions!
end
end
我和Capybara::ExpectationNotMet: Timed out waiting for Selenium session reset
的测试失败了
如何让测试结束时关闭浏览器?
答案
您没有指出您正在使用的浏览器和浏览器版本(例如FF 59最近进行了更改,使处理卸载模式更难以处理),也没有说明您正在使用的任何其他版本的测试宝石,所以很难说你的当前问题是否会通过升级来修复(可能)。但是,您可以在测试中解决此问题,您可以通过添加来显示卸载模式
accept_confirm do
visit("about:blank") # or any page in your app that doesn't have an unload modal ( / for instance )
end
到那些特定测试的结尾。如果要保持实际测试代码清洁,可以在功能元数据触发的块之后实现。要通过元数据实现它,您可以将RSpec配置块更改为类似的内容
RSpec.configure do |config|
config.before(:each) do
config.include Capybara::DSL
end
config.after(:each, clear_unload_modal: true) do
accept_confirm do # may need to be Capybara.current_session.accept_confirm depending on your includes
visit("/") # may need to be Capybara.current_session.visit
end
end
config.after(:each) do
Capybara.reset_sessions!
end
end
然后使用:clear_unload_modal标记需要它的每个测试
scenario "blah blah", :clear_unload_modal do
....
end
以上是关于Capybara会议未在测试结束时结束的主要内容,如果未能解决你的问题,请参考以下文章
尽管正确打印出所有输出,但程序未在 Java 中以退出代码 0 结束