我使用selenium / capybara / rspec进行了一系列自动化测试。对于我的一个测试,我弄脏了一个表单并验证是否触发了某些错误。这是测试的结束......问题是,当测试完成运行时,代码会尝试关闭浏览器,弹出一条带有This page is asking you to confirm that you want to leave - data you have entered may not be saved.
的JavaScript消息
在我的规范助手中,我有:
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
如何让测试结束时关闭浏览器?
答案 0 :(得分:0)
您没有说明您正在使用的浏览器和浏览器版本(例如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