Ich habe einige online gefundene Beispiele ausprobiert, aber ohne Glück. Ich möchte die Bestätigungsmeldung eines Löschlinks bestätigen. Der letzte Versuch war der folgende Code, der jedoch zu einem Capybara :: NotSupportedByDriverError-Fehler führte.
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
ruby-on-rails
testing
capybara
Eric M.
quelle
quelle
Antworten:
Hinzufügen einer Antwort für diejenigen, die dies im Jahr 2016 und darüber hinaus treffen. Sie können Capybara jetzt direkt verwenden, um ein Bestätigungsfeld zu akzeptieren. Sie tun dies, indem Sie den Code umbrechen, der dazu führt, dass das Bestätigungsfeld in der Funktion accept_confirm angezeigt wird.
accept_confirm do click_link 'Destroy' end
quelle
Wechseln Sie zunächst zur Verwendung von Selenium als Treiber, indem Sie ein @ javascript-Tag vor Ihr Szenario setzen.
Der folgende Code in Ihrem Gurkenschritt bestätigt dann den Dialog:
page.driver.browser.switch_to.alert.accept # or page.driver.browser.switch_to.alert.dismiss # or page.driver.browser.switch_to.alert.text
Wie @NobbZ sagte, wurde diese Frage zuvor hier gestellt und beantwortet: Wie teste ich einen Bestätigungsdialog mit Cucumber? .
Weitere Selendokumentation finden Sie auch hier: http://code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs
quelle
Capybara.current_driver = :selenium
oder js: true zu dem Beispiel hinzufügen, in dem der Treiber:selenium
standardmäßig festgelegt werden soll, da dies der Standard istCapybara.javascript_driver
page.driver.browser.switch_to
, bekam aber eine DEPRECATION-Warnung, wurde aber dazu gebracht: stackoverflow.com/questions/26275359/…für Capybara-Webkit:
page.driver.browser.accept_js_confirms page.driver.browser.reject_js_confirms
was noch funktioniert, aber die Dokumentation sagt auch:
page.driver.accept_js_confirms! page.driver.accept_js_confirms!
Siehe https://github.com/thoughtbot/capybara-webkit , suchen Sie nach "accept_js_confirms".
quelle
Ich hatte Zeitprobleme mit Browser-Dialogen in einer CI-Umgebung, daher frage ich nach einem Dialog, bevor ich ihn akzeptiere:
def accept_browser_dialog wait = Selenium::WebDriver::Wait.new(:timeout => 30) wait.until { begin page.driver.browser.switch_to.alert true rescue Selenium::WebDriver::Error::NoAlertPresentError false end } page.driver.browser.switch_to.alert.accept end
quelle
Ich musste im Webkit-Test einen Schlaf verwenden, da er jedes Mal und dann anderweitig fehlschlagen würde.
Folgendes habe ich mir ausgedacht, nachdem ich alle Beiträge gelesen hatte:
if page.driver.class == Capybara::Selenium::Driver 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.accept_js_confirms else raise "Unsupported driver" end
quelle
In Capybara ist es sehr einfach, das Modellfenster zu akzeptieren. Sogar wir können dasselbe in Selen tun, aber es ist wenig schwierig für Menschen, die sich Selens nicht bewusst sind.
page.accept_modal #Dies akzeptiert das modale Fenster
page.dismiss_modal #Dies wird das modale Fenster ablehnen / schließen
quelle
NoMethodError: private method 'accept_modal' called for #<Capybara::Session>
Ich würde vermuten, dass Sie Ihrer Gem-Datei Selen hinzufügen und es konfigurieren müssen und Capybara, dass Capybara Selen als Treiber verwendet.
Ich denke auch, wie man einen Bestätigungsdialog mit Gurke testet? ist Ihrer Frage sehr ähnlich, insbesondere der akzeptierten Antwort.
quelle
Versuchen Sie,
:js => true
zu Ihrem Test hinzuzufügen .it 'will use the default js driver' :js => true do ... end
quelle