web-dev-qa-db-ja.com

Capybaraでjavascriptポップアップを確認するにはどうすればよいですか?

オンラインで見つかったいくつかの例を試しましたが、運はありません。削除リンクの確認メッセージを確認しようとしています。最後の試みは以下のコードでしたが、Capybara :: NotSupportedByDriverErrorエラーが発生しました。

def confirm_dialog
  page.evaluate_script('window.confirm = function() { return true; }')
end
65
Eric M.

まず、シナリオの前に@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

51
Peter Nixey

2016年以降にこれに当たった人への回答を追加します。カピバラを直接使用して、確認ボックスを受け入れることができるようになりました。これを行うには、確認ボックスを accept_confirm 関数に表示するコードをラップします。

accept_confirm do
  click_link 'Destroy'
end
42
retroGiant

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」を検索してください

15
magicgod

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
10
Stephan Seidt

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
6

カピバラでは、モデルウィンドウを受け入れるのは非常に簡単です。 Seleniumでも同じことができますが、Seleniumを知らない人にとっては少し難しいです。

page.accept_modal#これはモーダルウィンドウを受け入れます

page.dismiss_modal#これはモーダルウィンドウを拒否/却下します

2
Jagan

Seleniumをgemファイルに追加して、それを構成し、capybaraがドライバーとしてSeleniumを使用するように設定する必要があると思います。

Cucumberで確認ダイアログをテストする方法 は、あなたの質問、特に受け入れられた答えと非常に似ていると思います。

2
NobbZ

テストに:js => trueを追加してみてください。

RSpecのメタデータ機能を使用して、別のドライバーに切り替えることができます。 :js => trueを使用してjavascriptドライバーに切り替えるか、特定のドライバーに切り替えるための:driverオプションを提供します。例えば:

it 'will use the default js driver' :js => true do
  ...
end
2