capybara + selenium でテストを書いていると、削除や更新の確認で confirm で止まってしまってイラッとすることがあったので下のような回避策で何とかした。
もし /^"([^"]*)"ボタンをクリックしポップアップを無視する$/ do |button| page.evaluate_script("window.alert = function(msg) { return true; }") page.evaluate_script("window.confirm = function(msg) { return true; }") When %{I press "#{button}"} end
ちなみに上の例は cucumber のものだけど、rspec の場合は下のように直接書けばいいんじゃないかな。
def click_link_and_confirm(locator) page.evaluate_script("window.alert = function(msg) { return true; }") page.evaluate_script("window.confirm = function(msg) { return true; }") click_link(locator) end
何か capybara の master では ajax リクエストが帰ってくるまでちゃんと待つコードが入っていたりもしたりして、rails でエンドツーエンドテストやるには無くてはならないものになってるなー。ほんとに便利すぎる。