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

python selenium webdriver

48828 просмотра

2 ответа

173 Репутация автора

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

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

Резюме :-

  1. Нажмите на гиперссылку (URL) - "НАЖМИТЕ ЗДЕСЬ"
  2. Форма регистрации пользователя отображается в виде всплывающего окна.
  3. Данные должны быть заполнены пользователем
  4. Нажмите кнопку Далее / Отправить.
  5. Другая следующая перенаправлена ​​на другую страницу / форму «Страница личной информации пользователя»
  6. Личная информация должна быть заполнена пользователем
  7. Нажмите «Далее / Отправить»
  8. Всплывающее окно исчезло.
  9. Теперь дальнейшая обработка на оригинальной / базовой странице.
Автор: Ronu Источник Размещён: 16.07.2013 12:02

Ответы (2)


6 плюса

4475 Репутация автора

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

Автор: Mark Rowlands Размещён: 16.07.2013 12:13

39 плюса

1111 Репутация автора

Переключение на всплывающее окно является сложной задачей, по крайней мере, по двум отдельным причинам:

  1. Многие знают о том, что вам нужно использовать driver.switch_to.window(window_handle)как при появлении всплывающего окна, так что вы можете найти элементы во всплывающем окне, так и после закрытия всплывающего окна, чтобы вы могли найти элементы обратно в главном окне.
  2. Тот, с которым могут столкнуться только люди с медленными машинами, это то, что когда 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()

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

Автор: Lindsay Размещён: 14.03.2015 06:25
Вопросы из категории :
32x32