为每个测试开始一个新的水豚会话

Les*_*ong 6 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
     @session.driver.browser.quit
 end

end
Run Code Online (Sandbox Code Playgroud)

@ 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'
Run Code Online (Sandbox Code Playgroud)

我认为问题是因为Capybara在所有测试结束时也退出了浏览器.有谁知道这样做的正确方法以及如何使这个错误信息无声?谢谢你的帮助.

==== UPDATE =====

为了关闭这个循环,我发布到Capybara google group,我的问题已修复并合并为master.

https://groups.google.com/forum/#!topic/ruby-capybara/tZi2F306Fvo

ilg*_*gam 5

试试Capybara.reset_session吧.

feature "my test" do
  before do
   my logic
  end

  after { Capybara.reset_sessions! }

  scenario "my test" do
   blablabla
  end
end
Run Code Online (Sandbox Code Playgroud)


She*_*ter 0

也许有一种酱汁方法可以用来剪辑录音,然后在您的after程序中调用它?

与其在每次测试后退出,也许您可​​以在每次测试之前退出?如果您在运行之前尝试退出时遇到错误,也许有一种方法可以查看它是否已经在运行?如果没有,你可以做一个可怕的、令人讨厌的黑客:在 an 中设置一个全局变量after,让你知道有一个你可以退出的驱动程序。