キュウリと確認ダイアログをテストするには?
-
20-09-2019 - |
質問
私はキュウリやカピバラとRuby on Railsでを使用しています。
どのように私は(「あなたはよろしいですか?」)、単純な確認コマンドをテストするに行くか?
また、どこ私は、この問題に関する詳細なドキュメントを見つけることができる?
解決
残念ながら、カピバラにそれを行うための方法はありませんように思えます。しかし、あなたはセレンドライバー(そしておそらくJavaScriptをサポートする他のドライバ)を使用してテストを実行している場合、あなたはそれをハックすることができます。ただ、確認ダイアログをもたらすアクションを実行する前に、常にtrueを返すようにconfirm
メソッドをオーバーライドします。その方法は、ダイアログは表示されませんし、ユーザーがOKボタンを押したかのように、あなたのテストを続行することができます。あなたが逆をシミュレートしたい場合は、単にfalseを返すようにそれを変更します。
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
他のヒント
セレンドライバは現在、
こののをサポートしていますあなたはこのようにそれにアクセスしますカピバラよります:
page.driver.browser.switch_to.alert.accept
または
page.driver.browser.switch_to.alert.dismiss
または
page.driver.browser.switch_to.alert.text
私は/features/step_definitions/web_steps.rb
でこれらの2つのWeb手順を実装しました
When /^I confirm popup$/ do
page.driver.browser.switch_to.alert.accept
end
When /^I dismiss popup$/ do
page.driver.browser.switch_to.alert.dismiss
end
、ここではそうするための特にハック方法です。私は美しいコードとしてそれを保証するものではありませんが、それは仕事を取得します。あなたは http://plugins.jquery.com/node/1386/releaseをロードする必要がありますあなたはjQueryのをしたくない場合は、A>、またはネイティブにクッキーを行うためにそれを変更します。
物語のこの種を使用します:
Given I am on the menu page for the current booking
And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up
And I want to click "Ok"
When I press "Confirm menu"
Then the confirmation box should have been displayed
そして、これらのステップ
Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message|
@expected_message = message
end
Given /^I want to click "([^"]*)"$/ do |option|
retval = (option == "Ok") ? "true" : "false"
page.evaluate_script("window.confirm = function (msg) {
$.cookie('confirm_message', msg)
return #{retval}
}")
end
Then /^the confirmation box should have been displayed$/ do
page.evaluate_script("$.cookie('confirm_message')").should_not be_nil
page.evaluate_script("$.cookie('confirm_message')").should eq(@expected_message)
page.evaluate_script("$.cookie('confirm_message', null)")
end
カピバラの現在のリリースのためにこれを更新します。ほとんどのカピバラドライバ今日は、モーダルAPIをサポートしています。確認モーダルを受け入れるには、あなたがどうなる
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
これは
のようなものとキュウリに使用することができますWhen /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
という名前のボタンをクリックし、テキストマッチングMSG
と確認ボックスを受け入れますカピバラ、WebKitののドライバは、同様に、これをサポートしています。
Scenario: Illustrate an example has dialog confirm with text
#
When I confirm the browser dialog with tile "Are you sure?"
#
=====================================================================
my step definition here:
And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title|
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.text.should eq(title)
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.confirm_messages.should eq(title)
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
end
棘のセレンとのWebKitにポップアップを操作するためのいくつかの便利な便利なメソッドが追加されます。
これは、前の回答の適応だが、jQueryのクッキーのプラグインを必要としません。
運と上記の答えをしようとしました。最後に、これは私のために働いてます:
@browser.alert.ok