2017-05-27 1 views
0

Ich gebe ein Passwort ein und überprüfe, ob es funktioniert oder nicht. enter image description hereUmgang mit Popup-Fenstern in Selen

Nach Eingabe eines falschen Passworts wird die Website neu geladen und angezeigt. enter image description here

Wie gehe ich mit dem Popup um? Zum Beispiel, wie kann ich automatisch auf ein Element im Popup klicken?

Mein Code:

from selenium.webdriver.support import expected_conditions as EC 
    while (2>1): 
       Sam = browser.find_element_by_css_selector("input[id=1]") 
       Sam.send_keys(i) 
       login = browser.find_element_by_css_selector("input[id=2]") 
       login.click() 
       if EC.alert_is_present: 
        browser.switch_to.alert.accept() 
       else: 
        print i 
        break; 

Ich erhalte diese Fehlermeldung:

Traceback (most recent call last): 
    File "<pyshell#58>", line 1, in <module> 
    sexy() 
    File "<pyshell#57>", line 3, in sexy 
    browser.get('http://eps.gpeonline.co.in/') 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 264, in get 
    self.execute(Command.GET, {'url': url}) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in execute 
    self.error_handler.check_response(response) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
WebDriverException: Message: Failed to decode response from marionette 
+0

Es scheint, dass der Fehler nichts mit der Alarmbehandlung zu tun hat. Dein Skript konnte 'browser.get ('http://eps.gpeonline.co.in/') nicht ausführen' – Andersson

+0

@Andersson Aber wenn ich 'if' und' else' entferne und manuell auf 'ok' klicke, funktioniert das Skript gut –

+0

Probieren Sie den Ereignisplaner nach dem Laden der Seite aus. – PRABA

Antwort

1

Sie verwenden EC.alert_is_present falsch: Ihre if Zustand wird immer wieder zurückkehren True als EC.alert_is_present nur eine Klasse. Versuchen Sie unter try/except Block zu verwenden, statt if/else:

from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.support.ui import WebDriverWait as wait 

try: 
    wait(browser, 1).until(EC.alert_is_present()).accept() 
except TimeoutException: 
    print i 
    break 

Dies sollte Ihnen ermöglichen, Alarm zu akzeptieren, wenn es vorhanden ist oder Druck i und Schleife brechen, wenn es nicht in 1 Sekunde angezeigt hat (man kann sich ändern Timeout-Wert, falls erforderlich)