我在詹金斯遇到了一些问题。测试执行完成后,浏览器会话仍处于活动状态,这会在管道中创建其他一些问题。所以我想在我的Test Suite中完成执行后退出浏览器会话。我正在使用Cucumber> Capybara> SitePrism> Ruby。
我怎么能这样做?我希望下面的内容会在我的测试套件结束后执行:
RSpec.configure do |config|
config.after(:suite) do
puts 'Destroy Driver'
end
end
答案 0 :(得分:2)
你可以尝试
Capybara.send(:session_pool).each { |name, ses| ses.driver.quit }
应该在Selenium :: Webdriver的每个实例上调用quit,但是访问私有方法sesion_pool,实际上这些实例应该在capybara退出时自动清理,除非你对会话做了一些奇怪的事情(或者当与phantomjs一起使用时,可能存在硒中的一个错误。)
答案 1 :(得分:0)
尝试做 - Capybara.reset_sessions!
http://www.rubydoc.info/github/jnicklas/capybara/Capybara.reset_sessions!
答案 2 :(得分:0)
此答案适用于通过互联网搜索来到这里的人们。
使用由 quit
instance method 定义的 Capybara::Session。
我找到了两种方法来解决这个问题:
Capybara::DSL
(例如在像我这样的普通 ruby 脚本中),current_scope.session.quit
可以解决问题。Capybara.current_session.quit
可能是您在 RSpec 钩子中需要的东西,因为 Capybara::Session
方法不会混入其中。注意:原始问题看起来有点像 XY problem。我从来没有在测试后手动关闭 Capybara 会话,这让我认为还有其他配置错误或其他问题。然而,考虑到 OP 已有 5 年的历史,这是一个没有实际意义的问题,尽管我想为了完整起见我会提到它。