📖 Теория: Введение в 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
- Вы пишете тестовый скрипт на одном из поддерживаемых языков (Python, Java, C#, JavaScript и т.д.).
- WebDriver передаёт команды браузеру через драйвер для конкретного браузера (например,
chromedriverдля Chrome). - Браузер выполняет команды и возвращает результаты через 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
- Кроссбраузерность: тестирование в 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.fixture, которая подготавливает состояние перед тестом и очищает его после. Ключевое слово yield отделяет «подготовку» от «очистки».