7

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'

問題は、すべてのテストの最後にカピバラもブラウザを終了しているためだと思います。これを行う適切な方法と、このエラーメッセージを黙らせる方法を知っている人はいますか? 助けてくれてありがとう。

====更新=====

これに関するループを閉じるために、問題が修正され、マスターにマージされた状態で Capybara google グループに投稿しました。

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

4

3 に答える 3

7

で試してみてくださいCapybara.reset_session!

feature "my test" do    
  after { Capybara.reset_sessions! }
  
  scenario "my scenario" do
    # your assertions
  end
end
于 2014-11-04T11:50:30.213 に答える
0

たぶん、録音をクリップするために使用できるソースメソッドがあり、after代わりにそれを呼び出すことができますか?

テストのたびにやめる代わりに、テストの前にやめることができますか? 1 つが実行される前に終了しようとしてエラーが発生した場合、おそらく 1 つが既に実行されているかどうかを確認する方法がありますか? そうでない場合は、恐ろしく厄介なハックを行うafterことができます。終了できるドライバーがあることを知らせるグローバル変数を に設定します。

于 2013-11-14T01:08:55.267 に答える