Selenium-Python: взаимодействие с системными модальными диалогами

Я запускаю приложение в браузере; и для некоторых действий я смог имитировать действия с нажатиями клавиш; но у меня есть особая проблема: некоторые действия в моем приложении вызывают всплывающее системное приглашение, например, для сохранения или подтверждения завершения работы.

Есть ли способ контролировать их в Selenium python? В качестве примера представьте, чтобы использовать нажатие клавиши для сохранения страницы; затем появится системный диалог (который не является частью веб-приложения) и спросит вас, где сохранить файл. Или представьте подсказку, которая спросит вас, не закрыли ли вы окно браузера, если у вас открыто несколько вкладок.

Я попытался найти другое окно, предполагая, что я могу переключать контекст между окнами в браузере, но я ничего не вижу рядом с основным приложением, потому что это системные окна. Есть ли обходной путь для этого?

2 Solutions collect form web for “Selenium-Python: взаимодействие с системными модальными диалогами”

Вы можете использовать методы Selenium для проверки текущего окна и перехода к другому:

Вы можете использовать

driver.window_handles 

для поиска списка оконных ручек и после попытки переключения с использованием следующих методов ( документация selenium ).

  • driver.switch_to_alert()
  • driver.switch_to.active_element
  • driver.switch_to.default_content
  • driver.switch_to.window

Поскольку приложение, над которым вы работаете, похоже, отвечает на команды Selenium здесь, это рабочий пример об открытии всплывающего окна, переключении на него области селена, извлечении данных и закрытии всплывающего окна. Процесс повторяется для всех продуктов:

 for item in driver.find_elements_by_class_name("products"): item.click() # clicking on item activate a popup driver.switch_to_alert() #switch to new window # Get data driver.find_elements_by_css_selector(".ui-dialog-titlebar-close.ui-corner-all")[0].click() #close window 

Если вы говорите о системных диалогах , то с ними невозможно взаимодействовать с помощью селена.

Однако для всплывающих окон браузера (предупреждений) просто перейдите к всплывающему окну:

 driver.switch_to_alert() 

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

Некоторые примеры:

 Alert(driver).accept() Alert(driver).dismiss() Alert(driver).authenticate() Alert(driver).send_keys(keys_to_send) Alert(driver).text() 

см. https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.alert.html

  • Selenium WebDriverWait, но все же «Элемент не кликается в точке»
  • Интернет-исследователь Selenium python
  • питон, поиск и нажатие определенной кнопки с селеном
  • Любой способ сказать селену не выполнить js в какой-то момент?
  • драйвер selenium не может загружать НЕКОТОРЫЕ страницы
  • Почему мой реальный IP-адрес остается видимым даже при использовании прокси-сервера?
  • Как отправить текст в невидимое поле ввода
  • Python Selenium Webdriver - попробуйте исключить цикл
  •  
    Interesting Posts for Van-Lav

    регулярное выражение python, сопоставляющее что-либо

    скрипт python для сортировки всей среды

    Как выставить сырые байтовые буферы с помощью Boost :: Python?

    Python Записывайте динамически огромные файлы, избегая использования 100% CPU

    Программно открывать URL-адреса в веб-браузере в Python

    Старое хэширование питона выполняется слева направо – почему это плохо?

    как выполнять команды 7zip из скрипта python

    Как удалить пользовательский QStandardItem в QListView

    Нормализовать гистограмму (яркость и контрастность) набора изображений с использованием библиотеки изображений Python (PIL)

    Pandas: зачем нужны двойные скобки для выбора столбца после булевской индексации?

    Почему параметр «name» для __setattr__ включает класс, но __getattr__ нет?

    Горизонтальное выравнивание текста в openpyxl

    Декартово произведение больших итераторов (itertools)

    как получить индекс предмета или номер вместе с ключом, значение в dict

    Остановка автоматического поворота изображений в Django-imagekit Thumbnail

    Python - лучший язык программирования в мире.