- Capybara.reset_sessions!でセッションが消えないので色々試してみた
環境
- mac OSX10.9
- safari 7.0.2
- cucumber 1.3.10
- capybara 2.1.0
やってみた
消えない
- firefoxとかchromeだと消えるんだけど、safariだと消えない
Capybara.reset_sessions!
- これもsafariだと消えない
Capybara.current_session.driver.browser.manage.delete_all_cookies
消えた・・・が
Capybara.module_eval do
def delete_sessions!
@session_pool.clear
end
end
Capybara.delete_session!
- 消えるには消える
- が、シナリオを実行する度にブラウザが立ち上がる
- 実行中のsessionに対する終了処理をしてないから
- Linuxとかで実行してるとプロセス数の上限に達してテストが途中で失敗しだした・・・
- http://d.hatena.ne.jp/akuwano/20120413/1334312849 とかが参考になります
sessionを消す前にブラウザを閉じる
- sessionを消す前に、ブラウザを閉じるようにする
Capybara.current_session.driver.browser.quit
- features/support/hooks.rbに書くとこんな感じ
Before do
Capybara.current_session.driver.browser.quit
Capybara.delete_sessions!
end
- さらに、safariでテスト回してて File exists - ${HOME}/Library/Safari/Extensions.bak とか出るようならBeforeに次の1行も入れとくとよさそう
FileUtils.rm_rf "#{ENV['HOME']}/Library/Safari/Extensions.bak"
結論
Capybara.module_eval do
def delete_sessions!
@session_pool.clear
end
end
Before do
Capybara.current_session.driver.browser.quit
Capybara.delete_sessions!
FileUtils.rm_rf "#{ENV['HOME']}/Library/Safari/Extensions.bak"
end
課題
- 都度sessionを初期化するため、テストの実行が長くなるように感じる
- 場合によってはtimeoutもおきそう・・・