Webdriver-Fehler: "Kein Alarm ist vorhanden", nachdem UnexpectedAlertPresentException ausgelöst wurde

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

An einem Punkt kann ein modaler Dialog auftauchen (eine Javascript-Eingabeaufforderung ()). Wenn es tut, möchte ich einen Text eingeben und dann entlassen (klicken Sie auf OK).

Hier ist der entsprechende Code:

try: if button.text == "Run": button.click() except UnexpectedAlertPresentException: alert = self.driver.switch_to_alert() print alert.text alert.send_keys('8080') alert.dismiss() 

Die UnexpectedAlertPresentException wird geworfen. Jedoch, sobald es versucht, print alert.text auszuführen print alert.text ich:

 `NoAlertPresentException: Message: u'No alert is present'`. 

Wenn ich die print-Anweisung beseitige, bläst es bei alert.send_keys mit:

 `WebDriverException: Message: u'fxdriver.modals.find_(...) is null'` 

Ich verstehe es nicht Ist nicht die NoAlertPresentException per definitionem im Widerspruch zu der UnexpectedAlertPresentException NoAlertPresentException , die geworfen wurde und verursacht, dass der Ausnahmeblock an erster Stelle ausgeführt wurde?

Edit: Auch kann ich nicht für das Leben von mir finden Sie eine Dokumentation über die UnexpectedAlertPresentException in http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation

Bearbeiten 2: Das habe ich jetzt:

 try: if button.text == "Run": button.click() alert = self.driver.switch_to_alert() alert.send_keys('1111') alert.dismiss() except NoAlertPresentException: pass 

Allerdings sehe ich das immer noch:

 WebDriverException: Message: u'fxdriver.modals.find_(...) is null' 

Auf der Zeile alert.send_keys('8080') . Ich vermute, ich verstehe nicht, warum switch_to_alert() nicht werfen NoAlertPresent wenn es keine Warnung gibt … was ist, was ich NoAlertPresent dass die WebDriverException anzeigt.

  • Wie öffne ich ein neues Fenster oder eine Registerkarte im Webdriver (Python)?
  • Wie erfasse ich einen Screenshot, wenn meine Nosetests scheitern?
  • Wie kann ich mehrere Schlüssel in WebDriver mit Python senden?
  • Finden eines Elementes innerhalb eines Elements mit Selenium Webdriver
  • Hat jemand ActionChains von Webdriver benutzt (Pythonbindung)?
  • Wie man in python Webdriver hineingeht
  • Maximieren Sie WebDriver (Selenium 2) in Python
  • Versuchen, Selen 2 mit Python-Bindungen zu verwenden, aber ich bekomme einen Importfehler
  • 3 Solutions collect form web for “Webdriver-Fehler: "Kein Alarm ist vorhanden", nachdem UnexpectedAlertPresentException ausgelöst wurde”

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

    Als Alternative könnten Sie überprüfen, ob es eine Warnung vor dem Handeln gibt (schließlich, wenn Sie wollen, dass die Warnung ist es nicht unerwartet) wie so (Java):

     try { Alert alert = _driver.switchTo().alert(); //do stuff with alert } catch (final NoAlertPresentException e) { //do non-alert stuff } 

    Ich kann nicht der beste Python-Programmierer sein, weil ich damit angefangen habe vor 1 Woche. Ich habe mich selbst geschafft, eine kleine Funktion zu schaffen, die jeden Alarm akzeptieren wird, und wird es auch mehr Warnungen machen.

    Wenn du die Ziffern bei der Linie -2 (zweiter von Schwanz) betreibst, können wir auch aufeinanderfolgende Bestätigungen / Warnungen behandeln. Mit IF können Sie Antworten auf bestätigen () Mit WHILE können Sie alle Alerts () verarbeiten. Wenn der Alarm unter einem Timeout steht, musst du den Alert () auf den richtigen Moment "umgehen"

    Ich habe es geschafft, 2 Exception-Handler hinzuzufügen, um bekannte Alerts zu umgehen und zu stoppen, wenn kein Alert () vorhanden ist.

     import selenium from selenium import webdriver import os import time from selenium.common.exceptions import UnexpectedAlertPresentException from selenium.common.exceptions import NoAlertPresentException os.system("pkill php") os.system("php -S localhost:2222 alert.html &") fire = webdriver.Firefox() fire.get("http://localhost:2222") global alert def alert_accept(): try: alert = fire.switch_to_alert() print "Aler text:" + alert.text alert.accept() print "Alert detected, accept it" return True except UnexpectedAlertPresentException: print "Hum..., continue?" return False except NoAlertPresentException: print "No alert here" return False while alert_accept() == True: alert_accept() 

    Du kannst es nicht mit einer Website testen. Ich habe eine lokale html mit einigen verschiedenen Warnungen zu graben ein wenig auf, dass.

    HTML Quelltext:

     <script type="text/javascript"> var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } </script> <script type="text/javascript"> var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } </script> <script type="text/javascript"> console.log("Running test with timeout") </script> <script type="text/javascript"> setTimeout(function(){ var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } }, 5000) </script> 

    Eigentlich, die WHILE noch die IF Griffe die ganze Seite, ich denke, weil die Timeout. Wenn du alles ankommst, tut es.

    Im ziemlich sicher, dass dies mit impliziten Wartezeiten und die erwarteten Bedingungen mit einem kürzesten Code durchgeführt werden kann. Wenn du einen Blick von der Quelle von alert_is_present nimmst, wirst du nichts als einen Versuch sehen: Block mit return true / false.

    Für meinen Fall muss ich auf die Schaltfläche Hochladen klicken, ohne die Datei auszuwählen und zu überprüfen, ob eine Warnmeldung kommt oder nicht. Aber in meinem Fall beim Anklicken des Upload-Knopfes kommt die untere Ausnahme selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: Nachricht: Modal Dialog vorhanden In meinem Fall alert.accept oder alert.dismiss funktioniert nicht Also habe ich Tab gedrückt Und wählen Sie die Schaltfläche Hochladen und drücken Sie die Eingabetaste durch den Python-Code. Es funktioniert perfekt.

    Python ist die beste Programmiersprache der Welt.