Модальные окна



Модальное окно — это окно, которое блокирует работу пользователя до тех пор, пока это окно не закроют. В этом степе мы поговорим только про те окна, которые использует браузер. О тех, которые формируются при помощи JavaScript создателями сайта, мы говорить не будем, но этими окнами можно управлять другими средствами Selenium, о которых мы говорили в других уроках.

Основные функции применяемые к модальным окнам

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

# Переключение фокуса на модальное окно
driver.switch_to.alert

.accept() — имитирует нажатие на кнопку «ОК» в модальном окне. Обычно используется для подтверждения какого-либо действия.

# Подтвердить содержимое модального окна
driver.switch_to.alert.accept()

.dismiss() — имитирует нажатие на кнопку «Отмена» в модальном окне. Позволяет отказаться от выполнения какого-либо действия или закрыть окно без подтверждения.

# Или отклонить содержимое модального окна
driver.switch_to.alert.dismiss()

.send_keys() — позволяет отправить текст в текстовое поле внутри модального окна. Например, это может быть поле для ввода пароля или комментария.

# Отправка текста в текстовое поле модального окна
driver.switch_to.alert.send_keys("Текст для отправки")

.text — возвращает заголовок (title) модального окна. Это может пригодиться для проверки того, что правильное окно отображается на экране.

# Получение title модального окна
modal_title = driver.switch_to.alert.text

Переключение на все виды модальных окон выполняется командой browser.switch_to.alert

Виды модальных окон

Alert — выводит пользователю сообщение, содержит кнопку «ОК»;

Prompt — запрашивает у пользователя ввод каких-либо текстовых данных, содержит кнопки «ОК» и «Отмена»;

Confirm — выводит окно с вопросом, содержит кнопки «ОК» и «Отмена».

Модальное окно Alert

Код, представленный ниже, выполняет клик на кнопку с id=»alert», вызывая тем самым модальное окно alert. Затем он переключается на это окно с помощью функции browser.switch_to.alert и выводит содержимое title этого окна.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

with webdriver.Chrome() as browser:
    browser.get('https://mob25.com/')
    browser.find_element(By.ID, 'alert').click()
    time.sleep(1)
    alert = browser.switch_to.alert # Если вы планируете что-то делать с этим событием, можно добавить его в переменную
    print(alert.text)
    time.sleep(1)
    alert.accept()
    time.sleep(1)

Модальное окно Prompt

С помощью функции .send_keys(«») можно отправлять текст в модальное окно prompt.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

with webdriver.Chrome() as browser:
    browser.get('https://mob25.com/')
    browser.find_element(By.ID, 'prompt').click()
    time.sleep(2)
    prompt = browser.switch_to.alert
    prompt.send_keys('Введенный текст')
    prompt.accept()
    time.sleep(.5)
    print(browser.find_element(By.ID, 'result').text)
    time.sleep(1)

Приведённый выше код сначала нажимает на кнопку с id=»prompt», вызывая модальное окно prompt. Затем он отправляет текст в текстовое поле этого окна и подтверждает ввод, нажимая кнопку «OK» с помощью функции .accept(). После того как кнопка «OK» была нажата, на странице в теге с id=»result» отображается текст, введённый пользователем.

Столкнулись с проблемой при работе в Chrome: введённый текст в окне prompt не отображается, хотя вышеуказанный код возвращает нам введённое значение. Это подтверждает, что функция .send_keys() работает, но, возможно, не совсем корректно. Причиной может быть как Selenium, так и сам Chrome. Например, в браузерах Firefox или Opera такой проблемы не обнаружено.

Модальное окно Confirm

Модальное окно confirm имеет всего две кнопки: «Ok» и «Отмена». Взаимодействовать с ними можно с помощью функций .accept() и .dismiss().

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

with webdriver.Chrome() as browser:
    browser.get('https://mob25.com/')
    browser.find_element(By.ID, 'confirm').click()
    time.sleep(2)
    prompt = browser.switch_to.alert
    prompt.accept() #Замените на .dismiss() чтобы нажать на кнопку "Отмена"
    time.sleep(.5)

Код выше нажимает на кнопку Confirm и в появившемся окне — на кнопку Ok.



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: