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?

War es hilfreich?

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

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

akzeptieren

Die 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top