Подтвердить что ты не робот

Python webdriver для обработки всплывающих окон браузера, который не является предупреждением

Я работаю над веб-приложением, в котором щелкнув по какой-либо ссылке, появляются другие всплывающие окна. Поп-окна - это не предупреждение, а его форма с различными полями, которые будут введены пользователем, и нажмите "Далее".

Как я могу обрабатывать/автоматизировать всплывающие окна с помощью селена.

Резюме: -

  • Нажмите на гиперссылку (url) - "НАЖМИТЕ ЗДЕСЬ"
  • Форма регистрации пользователя появляется как всплывающее окно
  • Данные должны быть заполнены пользователем
  • Нажмите кнопку "Далее" / "Отправить".
  • Другой следующий перенаправляется на другую страницу/форму "Личная страница персональной информации"
  • Личная информация должна быть заполнена пользователем
  • Нажмите "Далее/Отправить"
  • Всплывающее окно исчезло.
  • Теперь дальнейшая обработка на исходной/базовой странице.
4b9b3361

Ответ 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()

Пожалуйста, дайте мне знать, если кто-то (возможно, мне) должен добавить больше к примеру или предоставить другую информацию, чтобы сделать его более понятным.

Ответ 2

Если его новый window или iframe, вы должны использовать driver.switch_to_frame(webelement) или driver.switch_to_window(window_name). Затем это должно позволить вам взаимодействовать с elements во всплывающем окне. После того, как вы закончите, вы должны driver.switch_to_default_content() вернуться на главную веб-страницу.