Wie ein Bestätigungsdialog mit Gurke testen?
-
20-09-2019 - |
Frage
Ich bin mit Ruby on Rails mit Gurke und Capybara.
Wie würde ich mich über einen einfachen Bestätigungsbefehl Testen ( „Sind Sie sicher?“)?
Auch wo könnte ich weitere Unterlagen zu diesem Thema finden?
Lösung
Es scheint, als gäbe es keine Möglichkeit, es in Capybara zu tun, leider. Aber wenn Sie Ihre Tests mit dem Selen-Treiber (und wahrscheinlich andere Treiber, die JavaScript unterstützen) ausgeführt wird, können Sie es hacken. Kurz vor dem Durchführen der Aktion, die den Bestätigungsdialog bringen würde, überschreiben die confirm
Methode immer true zurück. Auf diese Weise wird der Dialog nie angezeigt, und die Tests werden fortgesetzt, als ob der Benutzer die OK-Taste gedrückt hatte. Wenn Sie das Gegenteil simulieren wollen, einfach ändern false zurück.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
Andere Tipps
Der Selen-Treiber unterstützt nun diese
Von Capybara Sie es wie folgt zugreifen würde:
page.driver.browser.switch_to.alert.accept
oder
page.driver.browser.switch_to.alert.dismiss
oder
page.driver.browser.switch_to.alert.text
Ich habe diese beiden Web-Schritte in /features/step_definitions/web_steps.rb
implementiert:
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
Wenn Sie die Nachricht speziell prüfen angezeigt wird, ist hier ein besonders hacky Weg, dies zu tun. Ich unterstütze es nicht so schön Code, aber es bekommt den Job zu erledigen. Sie werden http://plugins.jquery.com/node/1386/release, oder ändern Cookies nativ zu tun, wenn Sie nicht jQuery wollen.
Mit dieser Art von Geschichte:
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
Und diese Schritte
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
Aktualisieren dies für aktuelle Versionen von Capybara. Die meisten Capybara Treiber unterstützen heute die modale API. So akzeptieren Sie eine Bestätigungs modalen Sie tun würden,
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
Dies kann wie in Gurke mit etwas verwendet werden
When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
, die die benannte Schaltfläche klicken und dann ein Bestätigungsfeld mit passendem Text msg
akzeptierenDie Capybara-webkit Treiber unterstützt dies auch.
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
Prickle fügt einige praktische Bequemlichkeit Methoden für die Pop-ups in Selen arbeiten und webkit
Dieser Kern Schritte hat eine JS Bestätigungsdialog in Rails 2 und 3 mit jedem Capybara-Treiber zu testen.
Es ist eine Anpassung einer früheren Antwort, aber muss nicht die jQuery Cookie-Plugin.
versucht, die oben genannten Antworten ohne Glück. Am Ende dieses für mich gearbeitet:
@browser.alert.ok