Ответ 1
Переключение на всплывающее окно вызывает проблемы по крайней мере по двум причинам:
- Тот, который многие знают, а именно, что вам нужно использовать
driver.switch_to.window(window_handle)
, когда появляется всплывающее окно, чтобы вы могли находить элементы во всплывающем окне и после того, как всплывающее окно закрыто, чтобы вы могли найти элементы обратно в главное окно. - Тот, с которым могут столкнуться только люди с медленными машинами, а именно: когда Selenium делает дескриптор окна доступным как переменную, он сначала устанавливает значение None и занимает немного времени, прежде чем он заполнит значение.
Здесь приведен код, который решает эти проблемы при выполнении запрошенной последовательности. Я оставляю инструкции import
, и я использую имена переменных, которые, я надеюсь, очевидны. Также обратите внимание, что мне нравится использовать find_element(s)_by_xpath
в моем коде; не стесняйтесь использовать другие методы 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()
Пожалуйста, дайте мне знать, если кто-то (возможно, мне) должен добавить больше к примеру или предоставить другую информацию, чтобы сделать его более понятным.