测试执行完成后,如何让Cucumber / Capybara关闭或退出浏览器会话?

时间:2016-01-28 19:05:42

标签: ruby selenium-webdriver cucumber capybara site-prism

我在詹金斯遇到了一些问题。测试执行完成后,浏览器会话仍处于活动状态,这会在管道中创建其他一些问题。所以我想在我的Test Suite中完成执行后退出浏览器会话。我正在使用Cucumber> Capybara> SitePrism> Ruby。

我怎么能这样做?我希望下面的内容会在我的测试套件结束后执行:

RSpec.configure do |config|
  config.after(:suite) do
    puts 'Destroy Driver'
  end
end

3 个答案:

答案 0 :(得分:2)

你可以尝试

Capybara.send(:session_pool).each { |name, ses| ses.driver.quit }

应该在Selenium :: Webdriver的每个实例上调用quit,但是访问私有方法sesion_pool,实际上这些实例应该在capybara退出时自动清理,除非你对会话做了一些奇怪的事情(或者当与phantomjs一起使用时,可能存在硒中的一个错误。)

答案 1 :(得分:0)

答案 2 :(得分:0)

此答案适用于通过互联网搜索来到这里的人们。

使用由 quit instance method 定义的 Capybara::Session

我找到了两种方法来解决这个问题:

  1. 如果您直接使用 Capybara::DSL(例如在像我这样的普通 ruby​​ 脚本中),current_scope.session.quit 可以解决问题。
  2. 或者,Capybara.current_session.quit 可能是您在 RSpec 钩子中需要的东西,因为 Capybara::Session 方法不会混入其中。

注意:原始问题看起来有点像 XY problem。我从来没有在测试后手动关闭 Capybara 会话,这让我认为还有其他配置错误或其他问题。然而,考虑到 OP 已有 5 年的历史,这是一个没有实际意义的问题,尽管我想为了完整起见我会提到它。