オンラインで見つかったいくつかの例を試しましたが、運はありません。削除リンクの確認メッセージを確認しようとしています。最後の試みは以下のコードでしたが、Capybara :: NotSupportedByDriverErrorエラーが発生しました。
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
まず、シナリオの前に@javascriptタグを配置して、Seleniumをドライバーとして使用するように切り替えます。
キュウリステップの次のコードは、ダイアログを確認します。
page.driver.browser.switch_to.alert.accept
# or
page.driver.browser.switch_to.alert.dismiss
# or
page.driver.browser.switch_to.alert.text
@NobbZが言ったように、この質問はここで以前に尋ねられ、答えられました: Cucumberで確認ダイアログをテストする方法? 。
Seleniumのその他のドキュメントもここで入手できます。 http://code.google.com/p/Selenium/wiki/RubyBindings#JavaScript_dialogs
2016年以降にこれに当たった人への回答を追加します。カピバラを直接使用して、確認ボックスを受け入れることができるようになりました。これを行うには、確認ボックスを accept_confirm 関数に表示するコードをラップします。
accept_confirm do
click_link 'Destroy'
end
capybara-webkitの場合:
page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms
まだ機能していますが、ドキュメントには次のようにも書かれています:
page.driver.accept_js_confirms!
page.driver.accept_js_confirms!
https://github.com/thoughtbot/capybara-webkit を参照し、「accept_js_confirms」を検索してください
CI環境のブラウザダイアログでタイミングの問題が発生したため、ダイアログを受け入れる前にポーリングしています。
def accept_browser_dialog
wait = Selenium::WebDriver::Wait.new(:timeout => 30)
wait.until {
begin
page.driver.browser.switch_to.alert
true
rescue Selenium::WebDriver::Error::NoAlertPresentError
false
end
}
page.driver.browser.switch_to.alert.accept
end
Webkitテストではスリープを使用する必要がありました。
みんなの投稿を読んだ後に私が思いついたのは次のとおりです。
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
sleep 1 # prevent test from failing by waiting for popup
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
カピバラでは、モデルウィンドウを受け入れるのは非常に簡単です。 Seleniumでも同じことができますが、Seleniumを知らない人にとっては少し難しいです。
page.accept_modal#これはモーダルウィンドウを受け入れます
page.dismiss_modal#これはモーダルウィンドウを拒否/却下します
Seleniumをgemファイルに追加して、それを構成し、capybaraがドライバーとしてSeleniumを使用するように設定する必要があると思います。
Cucumberで確認ダイアログをテストする方法 は、あなたの質問、特に受け入れられた答えと非常に似ていると思います。
テストに:js => true
を追加してみてください。
RSpecのメタデータ機能を使用して、別のドライバーに切り替えることができます。 :js => trueを使用してjavascriptドライバーに切り替えるか、特定のドライバーに切り替えるための:driverオプションを提供します。例えば:
it 'will use the default js driver' :js => true do
...
end