カピバラ+アラートボックスのクリックの投稿を完了しましたが、何も機能していないようです。以下は私のシナリオです:
シナリオ:[更新]ボタンをクリックすると、[OK]および[キャンセル]ボタンを含むアラートボックスが表示されます。 「OK」をクリックすると、新しいフォームが表示されます。
私はリクエスト仕様を書いています、すなわち、rspecとcapybaraを使用しています。主な問題は、アラートボックスをクリックすることです。以下は私のコードです。
context "update" do
before(:all) do
Capybara.current_driver = :Selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
page.evaluate_script('data-confirm = function() { return true; }')
page.click('OK')
click_button('Upgrade')
end
end
しかし、スクリプトを実行すると、次のエラーが表示されます。
失敗/エラー:page.evaluate_script( 'data-confirm = function(){return true;}')Selenium :: WebDriver :: Error :: UnexpectedJavascriptError:左側の無効な割り当て#./spec/requests/user_upgrades_spec.rb :30
2番目の例、つまり.
page.driver.browser.switch_to.alert.accept
私のコード:
context "update" do
before(:all) do
Capybara.current_driver = :Selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
click_button('Upgrade')
page.driver.browser.switch_to.alert.accept
end
end
エラーが発生します:
失敗/エラー:page.driver.browser.switch_to.alert.accept Selenium :: WebDriver :: Error :: UnhandledError:
さらに進める方法を教えてください
次のようなアラートボックスをクリックできます。
page.driver.browser.switch_to.alert.accept
上記のオプションはすべて非推奨になっているため、ここで回答を更新しました。
Capybara :: Session#accept_alertは、これを達成するための最良の方法であるように思われます。ここでは、アラートをトリガーするアクションをブロックで渡す必要があります。 http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert
例えば。:
page.accept_alert 'Alert text here' do
click_button('Search')
end
page.accept_alert
セレンを使用して私のために働いた。他のドライバーには、おそらく独自の構文があります。
ジリアン・フォーリーが述べたように、他の回答は非推奨になったようです。
警告ボックスの[OK]ボタンをクリックする場合は、次の行を試してください。
page.evaluate_script('window.confirm = function() { return true; }')
Javascriptフラグでテストをマークすることを忘れないでください
it "update user to trainer", js: true do
...
end
spec_helperファイルで:webkitまたは:Seleniumを使用してCapybara.javascript_driverを有効にします
WebKitの場合:
page.accept_confirm { click_button "Upgrade" }
セレンの場合:
page.driver.browser.switch_to.alert.accept
私はこれが古いことを知っていますが、今ではポルターガイストでも動作します:
page.accept_alert