0

I am having some issues in Jenkins. After test execution completes, the browser session is still alive, which is creating some other issue in the pipeline. So I want to quit the browser session after execution completed in my Test Suite. I am using Cucumber>Capybara>SitePrism>Ruby.

How I can do that? I want something like below which will execute after very end of my test suite:

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

3 回答 3

2

你可以试试

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

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

于 2016-01-28T19:25:52.680 回答
0

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

使用Capybara::Session定义的quit实例方法

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

  1. 如果您Capybara::DSL直接使用(例如像我这样在普通的 ruby​​ 脚本中),current_scope.session.quit那么就可以了。
  2. 或者,Capybara.current_session.quit这可能是您在 RSpec 挂钩中所需要的,因为这些Capybara::Session方法不会在那里混合。

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

于 2021-05-02T17:08:00.460 回答
0

尝试做 - Capybara.reset_sessions!

http://www.rubydoc.info/github/jnicklas/capybara/Capybara.reset_sessions

于 2016-02-01T14:38:36.190 回答