📖 Теория: Введение в Selenium

← К оглавлению урока

⚡ Суть: Selenium = инструмент автоматизации браузера

  • Selenium IDE — запись/воспроизведение действий в браузере (для начинающих)
  • Selenium WebDriver — API для управления браузером из кода (Python, Java, JS…)
  • Selenium Grid — параллельный запуск тестов на нескольких машинах
  • Драйвер — посредник между вашим кодом и браузером (ChromeDriver, GeckoDriver…)
  • Selenium 4: Selenium Manager управляет драйвером автоматически

Что такое Selenium

Selenium — это набор инструментов с открытым исходным кодом для тестирования веб-приложений. Он позволяет автоматизировать действия в браузере: открывать страницы, нажимать кнопки, заполнять формы, считывать текст элементов.

Основные компоненты Selenium

Selenium IDE

Расширение браузера для записи и воспроизведения тестов. Не требует кода. Подходит для начального уровня и быстрого прототипирования.

Selenium WebDriver

Мощный API для взаимодействия с браузерами из кода. Поддерживает Python, Java, C#, JavaScript, Ruby. Это основной инструмент для автоматизации.

Selenium Grid

Инфраструктура для параллельного выполнения тестов на нескольких машинах и браузерах одновременно. Масштабирует тест-сьюты.

Что такое WebDriver

WebDriver — это компонент Selenium, который взаимодействует с браузерами на уровне операционной системы. Это библиотека, отправляющая команды браузеру через протоколы HTTP и WebSocket.

Принцип работы WebDriver

  1. Вы пишете тестовый скрипт на одном из поддерживаемых языков (Python, Java, C#, JavaScript и т.д.).
  2. WebDriver передаёт команды браузеру через драйвер для конкретного браузера (например, chromedriver для Chrome).
  3. Браузер выполняет команды и возвращает результаты через WebDriver обратно в скрипт.
Аналогия: WebDriver — это «переводчик» между вашим Python-кодом и браузером. Вы даёте команду на Python, WebDriver переводит её в протокол W3C WebDriver, браузер исполняет.

Ключевые возможности Selenium WebDriver

  • Мультибраузерность: Chrome, Firefox, Safari, Edge и другие.
  • Поддержка языков программирования: Python, Java, C#, Ruby, JavaScript.
  • Поддержка мобильных платформ: тестирование в мобильных браузерах; для нативных приложений — интеграция с Appium.
  • Гибкость и масштабируемость: сложные сценарии, динамические элементы, AJAX.
  • Параллельное выполнение: через Selenium Grid — тесты на нескольких устройствах одновременно.

Основные драйверы для WebDriver

Драйвер Браузер
chromedriver Google Chrome
geckodriver Mozilla Firefox
safaridriver Safari (только macOS)
msedgedriver Microsoft Edge
Selenium 4 и Selenium Manager: начиная с Selenium 4.6, библиотека поставляется со встроенным Selenium Manager — утилитой, которая автоматически скачивает и настраивает нужный драйвер. Вам не нужно вручную скачивать chromedriver или geckodriver.

Преимущества Selenium

  • Кроссбраузерность: тестирование в Chrome, Firefox, Safari, Edge и других браузерах без изменения кода.
  • Бесплатный и открытый: Selenium полностью Open Source, доступен без ограничений.
  • Поддержка нескольких языков: Python, Java, C#, Ruby, JavaScript.
  • Кроссплатформенность: Windows, macOS, Linux.
  • Гибкость: автоматизация сложных сценариев, AJAX, всплывающие окна, фреймы.
  • Интеграция с CI/CD: Jenkins, GitLab CI/CD, GitHub Actions.
  • Масштабируемость: Selenium Grid — параллельный запуск на нескольких устройствах.
  • Большое сообщество: обилие документации, примеров, готовых решений.
  • Интеграция с другими инструментами: Appium (мобильные), Allure (отчёты), pytest/unittest.
  • Типы тестирования: функциональные, регрессионные, кроссбраузерные тесты.

Ограничения Selenium

  • Не подходит для тестирования производительности: используйте JMeter, Gatling или Locust.
  • Трудности с динамическими элементами: элементы AJAX требуют явных ожиданий (WebDriverWait).
  • Зависимость от DOM-структуры: изменения в HTML могут сломать тесты — нужна актуализация локаторов.
  • Ограниченные возможности с системными диалогами: диалоги загрузки файлов требуют дополнительных решений.
  • Требует знаний программирования: в отличие от инструментов с GUI (TestComplete, Katalon Studio).

Как Selenium взаимодействует с браузером (под капотом)

Selenium работает через WebDriver Protocol (W3C). Каждая ваша команда (например, driver.get("url")) превращается в HTTP-запрос к локальному серверу — это и есть драйвер браузера.

Пример POST-запроса для запуска сессии (то, что Selenium делает за вас):

POST http://localhost:53260/session
Body: {
  "capabilities": {
    "browserName": "chrome"
  }
}

Браузер запускается, драйвер возвращает sessionId. Все последующие команды адресуются к этой сессии. Selenium Python делает всё это автоматически.

Что умеет Selenium

1. Работа с окнами и вкладками

  • Открытие новых вкладок или окон
  • Закрытие текущих вкладок
  • Переключение между окнами
  • Переход на указанный URL

2. Работа с элементами на странице

  • Чтение текста элементов (заголовки, кнопки, параграфы)
  • Получение свойств (цвет, размер, расположение)
  • Взаимодействие: клик, ввод текста, прокрутка

3. Работа с нативными диалогами браузера

  • Управление окнами alert, prompt, confirm
  • Принятие или отклонение диалогов

4. Расширенные возможности

  • Настройка и управление файлами cookie
  • Выполнение JavaScript на странице (driver.execute_script)
  • Создание скриншотов (driver.save_screenshot)

Фикстура pytest для управления браузером

В Selenium-тестах с pytest рекомендуется выносить создание и закрытие драйвера в фикстуру. Это стандартная практика: она позволяет не дублировать код инициализации, гарантирует вызов driver.quit() даже при падении теста.

Фикстура в pytest — это функция с декоратором @pytest.fixture, которая подготавливает состояние перед тестом и очищает его после. Ключевое слово yield отделяет «подготовку» от «очистки».