Capybara会议未在测试结束时结束

时间:2018-02-28 20:47:16

标签: ruby selenium selenium-webdriver rspec capybara

我使用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

进行测试失败

如何让测试结束时关闭浏览器?

1 个答案:

答案 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