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

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

Есть ли способ контролировать их в 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