Sto provando a testare una webapp che sto sviluppando. Sto usando il driver di Firefox contro Firefox 22.0.Errore di webdriver: "Nessun avviso è presente" dopo aver lanciato UnexpectedAlertPresentException
A un certo punto, potrebbe apparire una finestra di dialogo modale (un prompt di Javascript()). Se lo fa, voglio inserire del testo e poi chiuderlo (fai clic su OK).
Ecco il codice rilevante:
try:
if button.text == "Run":
button.click()
except UnexpectedAlertPresentException:
alert = self.driver.switch_to_alert()
print alert.text
alert.send_keys('8080')
alert.dismiss()
Il UnexpectedAlertPresentException
è che sono gettati. Tuttavia, non appena si prova ad eseguire print alert.text
, ottengo:
`NoAlertPresentException: Message: u'No alert is present'`.
Se rimuovo l'istruzione di stampa, scoppia a alert.send_keys
con:
`WebDriverException: Message: u'fxdriver.modals.find_(...) is null'`
io non capisco. Non è lo NoAlertPresentException
per definizione che contraddice lo UnexpectedAlertPresentException
che è stato lanciato e ha causato l'esclusione del blocco da eseguire in primo luogo?
Edit: Inoltre, non posso per la vita di me trovare alcuna documentazione sul UnexpectedAlertPresentException
in http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation
Edit 2: Questo è quello che ho adesso:
try:
if button.text == "Run":
button.click()
alert = self.driver.switch_to_alert()
alert.send_keys('1111')
alert.dismiss()
except NoAlertPresentException:
pass
Tuttavia, I' m ancora vedendo questo:
WebDriverException: Message: u'fxdriver.modals.find_(...) is null'
sulla linea alert.send_keys('8080')
. Suppongo che non capisco perché switch_to_alert()
non getti NoAlertPresent
se non c'è un avviso ... che è quello che presumo che lo WebDriverException
indichi.
Quello che posso dirti è che otterrai PIÙ di un solo tipo di errore. Quindi, per rendere più guerriero della strada, devi provare a gestire i 2 o 3 problemi più comuni, come timeout, non presente o imprevisto. È necessario importare ciascuno di essi da ** selenium.common.exceptions ** e aggiungere anche un blocco ** Tranne NameOfError **, quindi elaborarlo. Oggi vedo che posso mettere più di una sola eccezione, e ho anche imparato a ** passare ** dal tuo esempio di codice :) Amare Python e impararlo ogni giorno. – erm3nda
Devi circondare con Try block that 'alert = self.driver.switch_to_alert()'. Stai costringendo lo script a passare a un avviso che forse NON è qui. Prova questo: http://pastebin.com/02RALuGp – erm3nda
Penso che il problema con questo è che il gestore di eccezioni rimuove l'avviso dal browser. È un po 'controintuitivo. –