Rspec 为每次测试启动新的水豚会话

Rspec 为每次测试启动新的水豚会话,rspec,capybara,Rspec,Capybara,我正在尝试为我们的每一个rspec测试启动一个新的Capybara会话,但无法确定如何在完成后正确退出/关闭会话 这是我的spec_helper.rb文件 RSpec.configure do |config| config.include Capybara::DSL config.before :each do @session = Capybara::Session.new(:selenium) end config.after :each do @s

我正在尝试为我们的每一个rspec测试启动一个新的Capybara会话,但无法确定如何在完成后正确退出/关闭会话

这是我的spec_helper.rb文件

RSpec.configure do |config|
  config.include Capybara::DSL

  config.before :each do
      @session = Capybara::Session.new(:selenium)
  end

 config.after :each do
     @session.driver.browser.quit
 end

end
@session.driver.browser.quit语句正确关闭浏览器,但对于运行的最后一个测试,我收到一条错误消息:

/Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/common/file_reaper.rb:32:in `reap': file not added for reaping: "/var/folders/5l/kw4vv8bj7rvc4xv6yfyspkwh0000gn/T/webdriver-profile20131107-96496-cx4x5r" (Selenium::WebDriver::Error::WebDriverError)
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/launcher.rb:45:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/bridge.rb:58:in `ensure in quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/bridge.rb:58:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/common/driver.rb:168:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/capybara-2.1.0/lib/capybara/selenium/driver.rb:140:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/capybara-2.1.0/lib/capybara/selenium/driver.rb:17:in `block in browser'
我相信问题是因为水豚也在所有测试结束后退出浏览器。有人知道这样做的正确方法吗?我如何才能消除此错误消息?谢谢你的帮助

==更新=====

为了结束这个循环,我将我的问题修复并合并到master中,并将其发布到Capybara google group


也许有一种沙司方法可以用来剪辑录音,并在
之后的
中调用它


也许你可以在每次考试前退出,而不是在每次考试后退出?如果您在运行某个程序之前尝试退出时出错,那么是否有办法查看该程序是否已在运行?如果没有,你可能会做一个可怕的恶作剧:在
之后的
中设置一个全局变量,让你知道有一个驱动程序可以退出。

Capybara.reset\u会话试试

feature "my test" do    
  after { Capybara.reset_sessions! }
  
  scenario "my scenario" do
    # your assertions
  end
end

老问题,但我刚刚遇到了这个问题。如果您有一个Capybara::Session,则在运行多个规范文件时,浏览器会在每个规范之后保持打开状态,从而产生多个浏览器。没有Capybara:sessionquit方法,因此需要先获取驱动程序对象,然后退出。我通常在每个等级库文件的末尾添加以下内容:

after :all do
  @capybara_session.driver.quit()
end

其中@capybara\u session是一个capybara::session对象。

为什么每次测试都需要一个新会话?通常只要删除cookie就足够了-例如使用
@session.reset
或通过使用capybara/rspec。可能我的想法不正确,但我们使用的是capybara+webdriver/sauce。沙司会记录你考试的视频。每个驱动程序实例有一个视频,所以我尝试在每个测试中有一个驱动程序,而不是简单地为驱动程序清除cookies。这样每个测试都会有自己的视频,并有独立的结果。我也有同样的问题。试试这个:每次考试前我都试着戒烟。好主意。然而,我仍然得到了错误。我认为对于我打开的每个驱动程序,它都会在一个结束钩子中退出该驱动程序,因此无论何时运行它,我都会得到那个错误(这只是一个猜测)