Przełączanie popup jest wyzwaniem dla co najmniej dwóch odrębnych powodów:
- Ten, który wiele osób wie, co jest, że trzeba użyć
driver.switch_to.window(window_handle)
zarówno gdy pojawi się okienko, dzięki czemu można znaleźć elementy w wyskakującym oknie i po zamknięciu okna, aby można było znaleźć elementy z powrotem w głównym oknie.
- Ten, który mogą napotkać tylko ludzie z wolnymi maszynami, co oznacza, że gdy Selenium udostępnia uchwyt okna jako zmienną, początkowo jest ustawiony na Brak i zajmuje trochę czasu, zanim zostanie wypełniony wartością.
Oto kod, który rozwiązuje te problemy podczas wykonywania żądanej sekwencji. Zostawiam instrukcje import
i używam nazw zmiennych, które mam nadzieję są oczywiste. Zauważ też, że lubię używać find_element(s)_by_xpath
w moim kodzie; czuć się swobodnie korzystać z innych metod 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()
Proszę dać mi znać, jeśli ktoś (może ja) musi dodać więcej na przykład, lub zapewnienia innych informacji, aby uczynić go bardziej jasne.
Jeśli nie jest to alert, istnieje kilka różnych sposobów, w jakie może to być wyskakujące okienko. Czy możesz dołączyć zrzut ekranu aplikacji internetowej i odpowiedni fragment html? –
Czy to może być przyczyną? Zablokowane wywołanie fxdriver.modals.clearFlag_ ... cf. https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-te-the-body-o/44592827#44592827 – NevilleDNZ