Webdriver-Fehler: "Keine Warnung ist vorhanden", nachdem UnexpectedAlertPresentException ausgelöst wurde

10

Ich versuche eine Webapp zu testen, die ich gerade entwickle. Ich benutze den Firefox-Treiber gegen Firefox 22.0.

An einem Punkt erscheint möglicherweise ein modaler Dialog (eine Javascript-Eingabeaufforderung ()). Wenn dies der Fall ist, möchte ich etwas Text eingeben und dann ablehnen (klicken Sie auf OK).

Hier ist der relevante Code:

%Vor%

Das UnexpectedAlertPresentException wird geworfen. Sobald es versucht, print alert.text auszuführen, bekomme ich:

%Vor%

Wenn ich die Druckanweisung lösche, explodiert sie bei alert.send_keys mit:

%Vor%

Ich verstehe es nicht. Ist nicht die NoAlertPresentException per Definition im Widerspruch zu der UnexpectedAlertPresentException , die geworfen wurde und verursacht hat, dass der except Block an erster Stelle ausgeführt wurde?

Edit: Außerdem kann ich für das Leben von mir keine Dokumentation über UnexpectedAlertPresentException in Ссылка

Edit 2: Das habe ich jetzt:

%Vor%

Allerdings sehe ich das immer noch:

%Vor%

in der Zeile alert.send_keys('8080') . Ich denke, ich verstehe nicht, warum switch_to_alert() NoAlertPresent nicht wirft, wenn es keine Warnung gibt ... was ich annehme, dass die WebDriverException anzeigt.

    
Isaac Dontje Lindell 10.07.2013, 16:35
quelle

3 Antworten

3

Ich denke, Selenium schließt unerwartete Warnungen. Anscheinend können Sie ändern, wie der Firefox-Treiber unerwartete Warnungen behandelt: Wie man einen Alarm mit "UnexpectedAlertBehaviour" -Fähigkeit in Selen behandelt ?

Als Alternative könnten Sie prüfen, ob es eine Warnung gibt, bevor Sie handeln (wenn Sie die Warnung nicht unerwartet behandeln wollen), so (Java):

%Vor%     
ulle 10.07.2013 17:45
quelle
2

Ich bin vielleicht nicht der beste Python-Programmierer, weil ich vor einer Woche damit angefangen habe. Ich habe es geschafft, eine kleine Funktion zu erstellen, die JEDE Warnung akzeptiert, und auch mehr Warnungen macht.

Wenn IF in Zeile -2 (zweite vom Ende) nach WHILE gecheckt wird, können wir auch aufeinanderfolgende Bestätigungen / Alarme verarbeiten. Mit IF können Sie Antworten von confirm () verarbeiten Mit WHILE können Sie alle Warnungen () bearbeiten. Wenn die Warnung eine Zeitüberschreitung aufweist, müssen Sie versuchen, die Warnung () im richtigen Moment zu umgehen.

Ich habe es geschafft, zwei Exception-Handler hinzuzufügen, um unbekannte Alarme () zu umgehen und auch zu stoppen, wenn keine alert () vorhanden ist.

%Vor%

Sie können es nicht mit irgendeiner Webseite testen. Ich habe ein lokales HTML mit einigen verschiedenen Warnungen gemacht, um ein wenig darüber zu graben.

HTML-Code:

%Vor%

Eigentlich geht das WHILE noch das IF die ganze Seite durch, denke ich wegen des Timeouts. Wenn Sie alle auf Onces setzen, tut es das.

Ich bin mir ziemlich sicher, dass dies mit impliziten Wartezeiten und den erwarteten Bedingungen mit einem kürzesten Code geschehen kann. Wenn Sie sich die Quelle von alert_is_present ansehen, werden Sie nichts als einen Versuch sehen: block with return true / false.

    
erm3nda 09.06.2015 07:46
quelle
1

Für meinen Fall muss ich auf die Schaltfläche Hochladen klicken, ohne Datei auszuwählen und zu prüfen, ob eine Warnmeldung angezeigt wird oder nicht. Aber in meinem Fall, wenn ich auf "Hochladen" klicke, kommt die folgende Ausnahme     selenium.common.exceptions.UnexpectedAlertPresentException: Warnungstext:     Nachricht: Modaler Dialog vorhanden In meinem Fall funktioniert alert.accept oder alert.dismiss nicht Also, ich habe Tab gedrückt und wähle die Schaltfläche Hochladen und drücke die Eingabetaste durch Python Code. Es funktioniert perfekt.

    
Kuladip 16.06.2017 07:53
quelle