web-dev-qa-db-ja.com

Rspec + Capybara:警告ボックスをクリックする方法

カピバラ+アラートボックスのクリックの投稿を完了しましたが、何も機能していないようです。以下は私のシナリオです:

シナリオ:[更新]ボタンをクリックすると、[OK]および[キャンセル]ボタンを含むアラートボックスが表示されます。 「OK」をクリックすると、新しいフォームが表示されます。

  1. 私はリクエスト仕様を書いています、すなわち、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. 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:

さらに進める方法を教えてください

38
Amit Kulkarni

次のようなアラートボックスをクリックできます。

page.driver.browser.switch_to.alert.accept
30
solnic

上記のオプションはすべて非推奨になっているため、ここで回答を更新しました。

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
26
Jillian Foley
page.accept_alert

セレンを使用して私のために働いた。他のドライバーには、おそらく独自の構文があります。

ジリアン・フォーリーが述べたように、他の回答は非推奨になったようです。

20
B Seven

警告ボックスの[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を有効にします

13
chrisvanhill

WebKitの場合:

page.accept_confirm { click_button "Upgrade" }

セレンの場合:

page.driver.browser.switch_to.alert.accept
11
HectorPerez

私はこれが古いことを知っていますが、今ではポルターガイストでも動作します:

page.accept_alert
2
stujo