Selenium Alert Confirm Prompt: автоматизация работы с диалоговыми окнами

В этой статье мы рассмотрим пример использования Selenium для обработки диалоговых окон: Alert, Confirm и Prompt. Этот скрипт демонстрирует, как автоматизировать взаимодействие с различными типами всплывающих окон на веб-страницах, включая их открытие, чтение текста, ввод данных и принятие/отклонение. Такой подход полезен для тестирования интерфейсов, парсинга сайтов с динамическими окнами или автоматизации задач, где требуется взаимодействие с диалоговыми окнами.

Для чего можно использовать этот пример?

Этот код идеально подходит для следующих задач:

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

Необходимые инструменты

Для работы скрипта потребуется установить Python и библиотеку Selenium. Selenium позволяет управлять браузером, включая обработку диалоговых окон. Убедитесь, что ChromeDriver установлен и доступен в PATH.

Установка необходимых библиотек.

pip install selenium webdriver-manager

Основные модули и импорты Selenium для Python

Код программы

Ниже приведён полный код с подробными комментариями, который реализует автоматизацию работы с диалоговыми окнами Alert, Confirm и Prompt на примере сайта w3schools.com.

Основной код программы для работы с Selenium

from selenium import webdriver  # Импорт библиотеки Selenium для управления браузером
from selenium.webdriver.common.by import By  # Модуль для поиска элементов по различным критериям
from selenium.webdriver.support.ui import WebDriverWait  # Модуль для явного ожидания загрузки элементов
import time  # Импорт модуля time для добавления пауз

# Инициализация драйвера Chrome для взаимодействия с браузером
driver = webdriver.Chrome()

try:
    # -----------------------
    # 1. Работа с Alert
    # -----------------------
    # Загрузка страницы с примером Alert
    driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_alert")
    # Разворачивание окна браузера на полный экран
    driver.maximize_window()
    time.sleep(2)  # Пауза для полной загрузки страницы

    # Переключение на фрейм с контентом (страница содержит iframe)
    driver.switch_to.frame("iframeResult")
    # Поиск и клик по кнопке, вызывающей Alert
    driver.find_element(By.TAG_NAME, "button").click()
    time.sleep(1)  # Пауза для появления Alert

    try:
        # Ожидание появления Alert (до 5 секунд)
        alert = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
        # Вывод текста Alert в консоль
        print("Alert текст:", alert.text)
        time.sleep(2)  # Пауза для демонстрации
        # Принятие Alert (нажатие OK)
        alert.accept()
        time.sleep(2)  # Пауза после действия
    except:
        print("Alert не найден или уже закрыт")

    # Возврат в основной контент страницы
    driver.switch_to.default_content()
    time.sleep(2)

    # -----------------------
    # 2. Работа с Confirm
    # -----------------------
    # Загрузка страницы с примером Confirm
    driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_confirm")
    time.sleep(2)  # Пауза для загрузки
    driver.switch_to.frame("iframeResult")
    # Поиск и клик по кнопке, вызывающей Confirm
    driver.find_element(By.TAG_NAME, "button").click()
    time.sleep(1)

    try:
        # Ожидание появления Confirm
        confirm = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
        # Вывод текста Confirm в консоль
        print("Confirm текст:", confirm.text)
        time.sleep(2)
        # Отклонение Confirm (нажатие Cancel)
        confirm.dismiss()
        time.sleep(2)
    except:
        print("Confirm не найден или уже закрыт")

    driver.switch_to.default_content()
    time.sleep(2)

    # -----------------------
    # 3. Работа с Prompt
    # -----------------------
    # Загрузка страницы с примером Prompt
    driver.get("https://www.w3schools.com/js/tryit.asp?filename=tryjs_prompt")
    time.sleep(2)
    driver.switch_to.frame("iframeResult")
    # Поиск и клик по кнопке, вызывающей Prompt
    driver.find_element(By.TAG_NAME, "button").click()
    time.sleep(1)

    try:
        # Ожидание появления Prompt
        prompt = WebDriverWait(driver, 5).until(lambda d: d.switch_to.alert)
        # Вывод текста Prompt в консоль
        print("Prompt текст:", prompt.text)
        time.sleep(2)
        # Ввод текста в поле Prompt
        prompt.send_keys("Обучайтесь парсингу на https://parsertools.ru/")
        time.sleep(1)
        # Принятие Prompt (нажатие OK)
        prompt.accept()
        time.sleep(2)
    except:
        print("Prompt не найден или уже закрыт")

    driver.switch_to.default_content()
    time.sleep(2)

    # Переход на сайт parsertools.ru
    driver.get("https://parsertools.ru/")
    time.sleep(15)  # Пауза для просмотра результата

finally:
    # Закрытие браузера и освобождение ресурсов
    driver.quit()
    print("Скрипт завершён")

Как работает скрипт?

В этом примере скрипт Selenium выполняет следующие действия:

  • Инициализация браузера: Запуск Chrome для управления веб-страницами.
  • Работа с Alert: Открытие страницы, вызов Alert, чтение текста и принятие (OK).
  • Работа с Confirm: Вызов Confirm, чтение текста и отклонение (Cancel).
  • Работа с Prompt: Вызов Prompt, ввод текста и принятие.
  • Переключение контекста: Работа с iframe и возврат к основному контенту.
  • Завершение: Закрытие браузера после выполнения всех действий.

Этот пример полезен для начинающих разработчиков, изучающих автоматизацию веб-приложений. Он демонстрирует, как обрабатывать диалоговые окна Selenium (Alert, Confirm, Prompt), что важно для тестирования и парсинга сайтов с динамическими элементами.

Больше примеров по парсингу на parsertools.ru/primers.