トップ «前の日記(2011/04/14 (木) ) 最新 次の日記(2011/04/16 (土) )» 編集 RSS feed

HsbtDiary


2011/04/15 (金) [長年日記]

[capybara][ruby] capybara で confirm window を飛ばす方法

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 でエンドツーエンドテストやるには無くてはならないものになってるなー。ほんとに便利すぎる。