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 结束

JPA 事务未在方法结束时提交

capybara webkit 无法加载 mailto url

函数未在“if”语句 Python 3 中运行

结束一个片段

第八次立会顺利召开!