Il passaggio a un popup è impegnativo per almeno due ragioni distinte:
- Quello che molti sanno, e cioè che è necessario utilizzare
driver.switch_to.window(window_handle)
sia quando appare il popup, in modo che si possono trovare elementi nella finestra pop-up e dopo che il popup è chiuso, in modo da poter trovare gli elementi nella finestra principale.
- È probabile che si incontrino solo le persone con macchine lente, ovvero che quando il selenio rende disponibile un handle di finestra come variabile, inizialmente viene impostato su Nessuno e richiede un po 'di tempo prima che venga inserito un valore.
Ecco un codice che risolve questi problemi durante l'esecuzione della sequenza richiesta. Tralascio le dichiarazioni import
e sto usando nomi variabili che spero siano ovvi. Inoltre, nota che mi piace usare find_element(s)_by_xpath
nel mio codice; Sentitevi liberi di usare altri metodi find_element(s)_by
:
main_window_handle = None
while not main_window_handle:
main_window_handle = driver.current_window_handle
driver.find_element_by_xpath(u'//a[text()="click here"]').click()
signin_window_handle = None
while not signin_window_handle:
for handle in driver.window_handles:
if handle != main_window_handle:
signin_window_handle = handle
break
driver.switch_to.window(signin_window_handle)
driver.find_element_by_xpath(u'//input[@id="id_1"]').send_keys(user_text_1)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.find_element_by_xpath(u'//input[@id="id_2"]').send_keys(user_text_2)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.switch_to.window(main_window_handle) #or driver.switch_to_default_content()
Si prega di farmi sapere se qualcuno (forse me) ha bisogno di aggiungere di più per l'esempio, o di fornire altre informazioni, per renderlo più chiaro.
Se non è un avviso, ci sono alcuni modi diversi in cui potrebbe essere una finestra pop-up. Puoi includere uno screenshot dell'app Web e il bit rilevante di html? –
Potrebbe essere questa 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