📖 Теория: конспект Selenium WebDriver (Урок 03)
⚡ Краткий конспект
- Selenium — набор инструментов: IDE (запись/воспроизведение), WebDriver (API управления браузером), Grid (параллельный запуск).
- WebDriver — управляет браузером через драйвер на уровне ОС: Chrome → ChromeDriver, Firefox → GeckoDriver.
- Selenium 4:
driver = webdriver.Chrome()— Selenium Manager сам управляет драйвером. - Навигация:
get(url),back(),forward(),refresh() - Окно:
maximize_window(),set_window_size(w, h),save_screenshot("file.png") - Фикстура pytest:
@pytest.fixture+yield driver→ автозакрытие браузера. - Закрыть браузер: всегда
driver.quit(), неclose().
Что такое Selenium
Selenium — набор инструментов для автоматизации тестирования веб-приложений. Управляет браузером программно, имитируя действия пользователя.
Три компонента Selenium
| Компонент | Назначение |
|---|---|
| Selenium IDE | Запись и воспроизведение тестов в браузере. Подходит для начального уровня, не требует написания кода. |
| Selenium WebDriver | Мощный API для взаимодействия с браузерами через код. Поддерживает Chrome, Firefox, Safari, Edge и другие. |
| Selenium Grid | Параллельный запуск тестов на нескольких машинах и браузерах одновременно. |
Как работает WebDriver
WebDriver — компонент Selenium, взаимодействующий с браузером на уровне ОС.
- Вы пишете тестовый скрипт на одном из поддерживаемых языков (Python, Java, C#, JavaScript и др.).
- WebDriver передаёт команды браузеру через драйвер, специфичный для браузера (например, ChromeDriver для Chrome).
- Браузер выполняет команды и возвращает результаты через WebDriver.
Основные характеристики WebDriver
- Мультибраузерность — Chrome, Firefox, Safari, Edge.
- Поддержка языков — Python, Java, C#, Ruby, JavaScript.
- Поддержка мобильных платформ — тесты в мобильных браузерах.
- Гибкость — сложные сценарии взаимодействия с UI.
- Параллельное выполнение — через Selenium Grid.
Основные драйверы
| Драйвер | Браузер |
|---|---|
| ChromeDriver | Google Chrome |
| GeckoDriver | Mozilla Firefox |
| SafariDriver | Apple Safari (встроен в macOS) |
| EdgeDriver | Microsoft Edge |
Преимущества и недостатки Selenium
Преимущества
- Кроссбраузерность — самые популярные браузеры.
- Поддержка множества языков программирования.
- Совместимость с Windows, macOS, Linux.
- Бесплатный, с открытым исходным кодом.
- Интеграция с CI/CD (Jenkins, GitHub Actions и др.).
- Масштабируемость через Selenium Grid.
- Огромное сообщество и экосистема.
Недостатки
- Не подходит для тестирования производительности.
- Трудности с динамически загружаемыми элементами — нужны явные ожидания.
- Высокая зависимость от структуры DOM — изменение HTML ломает тесты.
- Ограниченные возможности работы с системными окнами и диалогами ОС.
- Требует знания программирования.
Установка Selenium
В Selenium 4 встроен Selenium Manager — он автоматически находит и загружает нужный драйвер. Ручная загрузка ChromeDriver больше не нужна.
# Установка Selenium
pip install selenium
# Дополнительно: webdriver-manager (для явного управления, если нужно)
pip install webdriver-manager
Запуск браузера (Selenium 4 — рекомендуемый способ)
# subjects/auto-qa/examples/lesson04/basic_launch.py
from selenium import webdriver
driver = webdriver.Chrome() # Selenium Manager управляет драйвером автоматически
driver.get("https://itcareerhub.de/ru")
driver.quit()
Навигация и управление браузером
Метод get — переход на URL
driver.get("https://itcareerhub.de/ru/")
driver.get("https://www.berlin.de") # Переходит на новую страницу
История браузера
При каждом запуске WebDriver открывает чистый браузер — без истории, авторизации, cookies.
driver.back() # Вернуться на предыдущую страницу
driver.forward() # Перейти вперёд по истории
driver.refresh() # Обновить текущую страницу
Управление окном
driver.maximize_window() # Развернуть на весь экран
driver.fullscreen_window() # Полноэкранный режим
driver.minimize_window() # Свернуть окно
driver.set_window_size(640, 460) # Установить размер вручную (px)
Скриншоты
Скриншот — снимок текущего состояния браузера. Используется для фиксации ошибок и визуальных проверок.
driver.save_screenshot("./screenshot.png") # В текущую папку
driver.save_screenshot("./screenshots/page.png") # В подпапку
.png и .jpeg. Рекомендуется .png для лучшего качества.
Метод click() и поиск элементов
click() — имитирует нажатие на элемент страницы (кнопку, ссылку и т.д.).
from selenium.webdriver.common.by import By
# Найти элемент и кликнуть
element = driver.find_element(By.LINK_TEXT, "О нас")
element.click()
Фикстура pytest для WebDriver
Выносить инициализацию и закрытие браузера в фикстуру — стандартная практика при использовании pytest с Selenium. Это устраняет дублирование и гарантирует закрытие браузера даже при ошибке в тесте.
# subjects/auto-qa/examples/lesson04/conftest.py
import pytest
from selenium import webdriver
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver # Передаём драйвер в тест
driver.quit() # Выполняется после теста в любом случае
Использование фикстуры в тестах
# subjects/auto-qa/examples/lesson04/test_navigation.py
import pytest
from selenium.webdriver.common.by import By
def test_open_google(driver):
driver.get("https://www.google.com")
assert "Google" in driver.title
def test_open_example(driver):
driver.get("https://www.example.com")
heading = driver.find_element(By.TAG_NAME, "h1").text
assert heading == "Example Domain"
yield driver возвращает управление тесту. Код после yield — это teardown (очистка), который выполняется после завершения теста.