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

问题描述 投票:0回答:1

我有一系列使用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的测试失败了

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

ruby selenium selenium-webdriver rspec capybara
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.