2012-06-04 6 views
11

Ich bin ziemlich neu bei Python/JS und auch automatisierte Tests mit Selenium/WebDriver, aber ich habe ein paar Fortschritte gemacht!Selenium/WebDriver-Skript wird von Alert unterbrochen - Ausnahme "Nachricht: u'Modal Dialog vorhanden"

Jetzt bin ich an einem Punkt fest und es ist wirklich frustrierend.

Die Website, die ich teste, verkauft Produkte. Ich konnte mein Skript machen navigieren zufällig und zur Zahlungsseite erhalten, in Dummy-Daten füllen, senden Daten mithilfe:

browser.execute_script("document.Form.submit(); return true;") 
browser.execute_script("processPayment(); return true;") 

Normalerweise gibt ein Pay jetzt Taste ist und dass das Element Ergebnisse in der gleichen Ausnahme klicken und Es gab keine Möglichkeit für mich, über WebDriver auf OK/Cancel zu klicken (kein WebElement), aber ich fand heraus, dass ich diesen JS-Code ausführen kann. Meine neu geladene Seite (nach dem Absenden der Daten und Bestätigung des Verbuchens davon) mit einer Bestätigung und allen korrekten Daten lädt, aber das Python-Skript wird unterbrochen und ich kann den Test nicht fortsetzen.

Gibt es einen Workaround dafür? Was ich will, es zu tun, ist, dass modalen Dialog zu ignorieren, für die nächste Bestätigung Seite warten zu laden und dann weiter Elemente lokalisieren, ihre Werte drucken, sie usw.

Versuchte Speicherung mit:

wait = ui.WebDriverWait(browser,10) 
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt')) 
print(browser.title) 

aber Das Skript wird unterbrochen. Tut mir leid, wenn das beantwortet wurde, aber ich konnte es nicht finden, und ich bin auch ein Neuling!

Vielen Dank im Voraus!

BEARBEITEN:

Haben es geschafft! In meinem Fall, was funktionierte, habe ich nur meinen Code ein bisschen geändert

Hinweis für Neulinge, die Sie Alert importieren müssen.

Antwort

8

Hinweis für Neulinge (wie mich), dass Sie Alert importieren müssen.

from selenium.webdriver.common.alert import Alert 

... ... ... (code placeholder) 

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

haben soeben den Alarm Handler

+1

alert.dismiss() -Methode für mich gearbeitet. Danke Tihomir S. –

+2

Beachten Sie, dass alert.dismiss() drückt die Schaltfläche "Abbrechen"; Verwende alert.accept(), um "OK" zu drücken. –

+1

und der Browser in der Antwort ist die Instanz von 'webdriver'. – Sinux

Verwandte Themen