2015-05-09 11 views
6

Quindi, ho questo pulsante che voglio fare clic e se è la prima volta che lo fai clic. Apparirà un popup di avviso javascript. Sto usando Firebug e proprio non riesco a trovare dove si trova che javascript e ho provatocome gestire gli avvisi javascript nel selenio usando python

if EC.alert_is_present: 
     driver.switch_to_alert().accept() 
else: 
    print("no alert") 

il codice di cui sopra funziona se c'è una finestra di avviso, ma genera un errore se non c'è nessuno. anche se v'è una dichiarazione altra cosa che ho anche provato

if EC.alert_is_present: 
      driver.switch_to_alert().accept() 
    elif not EC.alert_is_present: 
       print("no alert") 

mi getta questo errore

selenium.common.exceptions.NoAlertPresentException: Message: No alert is present 

Come si arriva intorno a questo?

+0

Questa potrebbe essere la causa principale? Una chiamata bypassata a fxdriver.modals.clearFlag_ ... cf. https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-the-body-o/44592827#44592827 – NevilleDNZ

risposta

8

Usa try cattura e se l'avviso non è presente cattura NoAlertPresentException eccezione:

from selenium.common.exceptions import NoAlertPresentException 

try: 
    driver.switch_to_alert().accept() 
except NoAlertPresentException as e: 
    print("no alert") 
+0

nome ' NoAlertPresentException 'non è definito. questa era l'uscita. come lo definiamo? –

+0

Che cos'è lo stacktrace? – Saifur

+0

Prova 'selenium.common.exceptions.NoAlertPresentException' invece di' NoAlertPresentException' – Saifur

4

Ecco come si fa:

from selenium.common.exceptions import NoAlertPresentException 
try: 
    context.driver.switch_to.alert.accept() 
except NoAlertPresentException: 
    pass 

È possibile sostituire pass con una dichiarazione print se lo si desidera . Notare l'uso di switch_to.alert anziché switch_to_alert(). Quest'ultimo è stato deprecato per un po '. Nella versione di Selenium che ho qui, lo vedo nel suo codice:

warnings.warn("use driver.switch_to.alert instead", DeprecationWarning) 
+0

grazie. questo ha funzionato abbastanza bene: D –

+0

Posso sapere perché non dovremmo usare 'switch_to_alert()'? –

+1

@NGGVU Grazie per avermelo chiesto. Ho modificato la mia risposta. – Louis

Problemi correlati