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

Ruby 测试执行完成后,如何使Cucumber/Capybara关闭或退出浏览器会话?,ruby,selenium-webdriver,cucumber,capybara,site-prism,Ruby,Selenium Webdriver,Cucumber,Capybara,Site Prism,我在詹金斯遇到了一些问题。测试执行完成后,浏览器会话仍处于活动状态,这会在管道中产生其他问题。因此,我想在测试套件中完成执行后退出浏览器会话。我用的是Cucumber>Capybara>SitePrism>Ruby 我怎么能做到?我希望在测试套件结束后执行以下内容: RSpec.configure do |config| config.after(:suite) do puts 'Destroy Driver' end end 你可以试试 Capybara.send(:sess

我在詹金斯遇到了一些问题。测试执行完成后,浏览器会话仍处于活动状态,这会在管道中产生其他问题。因此,我想在测试套件中完成执行后退出浏览器会话。我用的是Cucumber>Capybara>SitePrism>Ruby

我怎么能做到?我希望在测试套件结束后执行以下内容:

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

Capybara.send(:session_pool).each { |name, ses| ses.driver.quit }
它应该在Selenium::Webdriver的每个实例上调用quit,但是这是在访问私有方法sesion_池,实际上,当capybara退出时,这些实例应该自动被清除,除非您在会话中做了一些奇怪的事情(或者与phantomjs一起使用时,Selenium中可能有一个bug).

你可以试试

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

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

尝试执行-Capybara.reset\u会话


!

尝试执行-Capybara.reset\u会话


!

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

使用由定义的

我找到了两种方法:

  • 如果您直接使用
    Capybara::DSL
    (例如,在像我这样的普通ruby脚本中),
    current\u scope.session.quit
    起作用
  • 或者,这可能是您在RSpec钩子中需要的,因为
    Capybara::Session
    方法不会混合在其中

  • 注意:原来的问题似乎有点像一个问题。我从未在测试后手动关闭过水豚会话,这让我觉得有其他配置错误或其他问题阻碍了我。然而,考虑到OP已经5年了,这是一个没有意义的问题,尽管我想我会出于完整性的考虑提及它。

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

    使用由定义的

    我找到了两种方法:

  • 如果您直接使用
    Capybara::DSL
    (例如,在像我这样的普通ruby脚本中),
    current\u scope.session.quit
    起作用
  • 或者,这可能是您在RSpec钩子中需要的,因为
    Capybara::Session
    方法不会混合在其中

  • 注意:原来的问题似乎有点像一个问题。我从未在测试后手动关闭过水豚会话,这让我觉得有其他配置错误或其他问题阻碍了我。但是,考虑到OP已经5年了,这是一个没有实际意义的问题,尽管为了完整起见,我想我还是要提到它。

    请在发布问题时格式化您的代码。您使用的是什么驱动程序?我如何格式化?我试过很多次…用幻影。Capybara::Selenium::Driver.new(应用程序:浏览器=>:phantomjs,所需的功能:{'phantomjs.cli.args'=>['--ignore ssl errors=yes']请在发布问题时格式化您的代码。您使用的是什么驱动程序?我如何格式化?我一直在尝试这么做…使用phantomjs.Capybara::Selenium::Driver.new(应用程序,:browser=>:phantomjs,所需的_功能:{'phantomjs.cli.args'=>['--ignore ssl errors=yes']得到以下错误:未定义的方法'quit'用于[“selenium:default:8”,#]:数组(NoMethodError)获取以下错误:[“selenium:default:8”、#]:Array(NoMethodError)的未定义方法'quit'谢谢这个Sanchita。我已经为重置会话实现了这个。我的问题是,在测试执行完成后,驱动程序是如何被杀死的?这是由水豚负责的吗?如果不是,那么我们可以显式地杀死驱动程序。谢谢这个Sanchita。我已经为重置会话实现了这个。我的问题是驱动程序是如何被杀死的测试执行完成后?这由水豚负责吗?如果没有,那么我们可以显式地杀死驱动程序。