Ich benutze Ruby on Rails mit Gurke und Capybara.Wie testet man einen Bestätigungsdialog mit Gurke?
Wie würde ich zum Testen eines einfachen Bestätigungsbefehls ("Sind Sie sicher?") Gehen?
Wo finde ich auch weitere Dokumentation zu diesem Thema?
Ich benutze Ruby on Rails mit Gurke und Capybara.Wie testet man einen Bestätigungsdialog mit Gurke?
Wie würde ich zum Testen eines einfachen Bestätigungsbefehls ("Sind Sie sicher?") Gehen?
Wo finde ich auch weitere Dokumentation zu diesem Thema?
Scheint, es gibt leider keine Möglichkeit, es in Capybara zu tun. Aber wenn Sie Ihre Tests mit dem Selenium-Treiber (und wahrscheinlich anderen Treibern, die JavaScript unterstützen) ausführen, können Sie es hacken. Bevor Sie die Aktion ausführen, durch die der Bestätigungsdialog aufgerufen wird, überschreiben Sie die Methode confirm
, um immer "true" zurückzugeben. Auf diese Weise wird der Dialog nie angezeigt und Ihre Tests können so fortgesetzt werden, als hätte der Benutzer die OK-Taste gedrückt. Wenn Sie das Umgekehrte simulieren möchten, ändern Sie es einfach, um false zurückzugeben.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
genial! Danke! –
Dies scheint nicht mehr in Firefox 4 zu funktionieren ... @ Derek-ekins Lösung unten, von dem, was Google mir sagt, scheint weiter aufwärtskompatibel zu sein, obwohl ich gerade noch nicht bestätigen kann (ich bleibe dran Capybara 0.3.9). – carpeliam
Siehe Antwort unten für die Verwendung von "page.driver.browser.switch_to ..." –
Wenn Sie die angezeigte Nachricht speziell testen möchten, hier ist ein besonders hacky Weg. Ich unterstütze es nicht als schönen Code, aber es macht die Arbeit erledigt. Sie müssen http://plugins.jquery.com/node/1386/release laden oder ändern, um Cookies nativ auszuführen, wenn Sie jQuery nicht möchten.
Verwenden Sie diese 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
Coole Lösung! Ich habe es ein wenig herumgedreht, was sich für mich natürlicher anfühlt: https://gist.github.com/727614 –
Und hier ist eine weitere Version dieses Codes, der sowohl Alarm- als auch Bestätigungsfelder unterstützt, https://gist.github.com/ 919116 –
Der Selen-Treiber now supports this
Von Capybara würden Sie es wie folgt zugreifen:
page.driver.browser.switch_to.alert.accept
oder
page.driver.browser.switch_to.alert.dismiss
oder
page.driver.browser.switch_to.alert.text
Für alle anderen - bitte beachten Sie, dass Dereks Antwort in der Tat funktioniert, wo ich fand, dass der Code in der offiziellen Selenium-Dokumentation nicht (Gurke/Selen). Beachten Sie das Vorhandensein von "page.driver.browser" in Dereks Antwort –
Peter - der Code hier ist speziell für die Verwendung von Capybara zugeschnitten, während der Code in der Dokumentation sind für, wenn Sie selen-webdriver direkt verwenden - Ich schrieb dieses Beispiel auch so Ich hoffe, es funktioniert! –
Ahh. Ja, guter Punkt und völlig von mir vermisst. In diesem Fall danke für beide Beispiele. –
ich diese beiden Web-Schritte in /features/step_definitions/web_steps.rb
implementiert haben:
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
süß! Es klappt! – corroded
This gist hat Schritte ein JS Bestätigungsdialog in Rails 2 und 3 zu testen, mit ein Capybara-Fahrer.
Es ist eine Anpassung einer früheren Antwort, benötigt aber nicht das jQuery Cookie-Plugin.
Prickle fügt einige praktische Bequemlichkeit Methoden für die Pop-ups in Selen und Webkit arbeiten
Der capybara-webkit Fahrer dies auch unterstützt.
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
Versucht die obigen Antworten ohne Glück. Am Ende funktionierte das für mich:
@browser.alert.ok
Aktualisierung für aktuelle Capybara-Versionen. Die meisten Capybara-Treiber unterstützen heute die modale API.Um eine Bestätigungs zu akzeptieren modal Sie
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
tun würden
Dies kann wie
in Gurke mit etwas verwendet wirdWhen /^(?:|I)press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
, die die Namen Schaltfläche klicken und dann ein Bestätigungsfeld mit passendem Text msg akzeptieren
Wenn Sie Capybara-webkit verwenden, finden Sie Ihre Antwort dort: http://stackoverflow.com/questions/6930927/how-do-i-confirm-a-javascript-popup-with-capybara# – Adrien