1. Введение: Playwright vs Selenium, установка, структура проекта, первый тест на Pytest
Введение: Playwright vs Selenium, установка, структура проекта, первый тест на Pytest
Зачем этот курс и что мы будем автоматизировать
Этот курс про построение поддерживаемой автоматизации тестирования на Python, где:
У вас уже есть база: Python, Pytest, Selenium и понимание ручного тестирования. Значит, мы сфокусируемся не на синтаксисе, а на том, как быстро и стабильно писать тесты, которые не разваливаются от каждого изменения UI.
Playwright vs Selenium
Selenium и Playwright решают похожую задачу: управлять браузером и взаимодействовать со страницей. Но у Playwright есть несколько важных отличий, из-за которых он часто удобнее именно для современной веб-автоматизации.
Ключевые отличия
| Критерий | Selenium | Playwright |
|---|---|---|
| Ожидания (waits) | Часто нужно явно писать ожидания (implicit/explicit waits) | Встроенные авто-ожидания для большинства действий (клик, ввод, проверка видимости) |
| Работа с селекторами | CSS/XPath, часто много ручной логики | Поддержка CSS/XPath, а также “локаторы” (locators) и удобные стратегии поиска |
| Параллельность и скорость | Возможна, но обычно требует больше усилий | Часто проще масштабировать, быстрее стартует, удобно в CI |
| Мультибраузерность | Требует драйверов (ChromeDriver, GeckoDriver и т.д.) | Браузеры устанавливаются одной командой playwright install |
| Network/HTTP | Обычно отдельные библиотеки | Есть встроенный API-клиент (полезно для Backend-части) |
| Изоляция тестов | Нужно аккуратно управлять профилями/куками | Контексты браузера (browser contexts) дают удобную изоляцию |
Официальные источники:
Что такое авто-ожидания в Playwright
Когда вы пишете действие вроде “кликнуть по кнопке”, Playwright перед кликом пытается убедиться, что элемент:
Это снижает количество флейковых (нестабильных) тестов и уменьшает потребность в ручных sleep и “сложных” ожиданиях. При этом важно понимать: авто-ожидания не отменяют необходимость думать о стабильных селекторах и корректной архитектуре.
Установка: Python, Pytest, Playwright
Ниже базовый путь установки для проекта на Pytest с Playwright.
Подготовка окружения
Пример команд:
Установка Playwright и интеграции с Pytest
Есть два распространённых способа:
browser, context, pageДля курса на старте удобнее второй вариант.
Установка:
Теперь важно установить сами браузеры (Chromium/Firefox/WebKit), которыми управляет Playwright:
Документация плагина:
Документация Pytest:
Минимальная структура проекта
Мы сразу будем строить проект так, чтобы он рос без боли: тесты отдельно, Page Object отдельно, конфиги отдельно.
!Схема рекомендуемой структуры проекта и связей между слоями
Один из удобных вариантов структуры:
Коротко по смыслу папок и файлов:
tests/ — сами тесты (то, что мы запускаем)pages/ — Page Object: классы страниц, где лежат локаторы и методы действийcomponents/ — Page Components: переиспользуемые части UI (хедер, меню, модалки)api/ — клиент для запросов к backend и API-тестов (вторая часть курса)utils/ — вспомогательные вещи: конфиги, генераторы данных, обёрткиconftest.py — фикстуры Pytest (например, авторизация, базовые настройки)pytest.ini — настройки Pytest (марки, дефолтные опции)requirements.txt — зависимости проектаТермины архитектуры, которые мы будем использовать
login(username, password)). Внутри — локаторы и низкоуровневые операции.Первый тест на Pytest + Playwright
Ниже — минимальный рабочий пример, который открывает страницу и проверяет заголовок.
Файл теста
Создайте файл tests/ui/test_example.py:
Что здесь происходит:
page — это фикстура, которую предоставляет pytest-playwrightpage.goto(...) — переход по URLpage.title() — получение заголовка вкладкиassert ... — стандартная проверка PytestЗапуск теста
Из корня проекта:
Если всё установлено корректно, Pytest:
Полезные опции запуска
Для начальной отладки часто нужно видеть браузер.
Опции зависят от раннера Playwright, который используется через плагин.
Минимальная настройка Pytest
Создайте pytest.ini в корне проекта, чтобы хранить базовые настройки.
Пример:
Смысл:
addopts = -ra — показывает дополнительную информацию по упавшим/пропущенным тестамtestpaths = tests — где Pytest ищет тесты по умолчаниюТипичные ошибки на старте и как их быстро диагностировать
playwright install.page.pytest-playwright, и что вы запускаете тесты в том же виртуальном окружении.pytest --headed --slowmo 300 и посмотрите, что происходит в UI. Затем — улучшайте селекторы и структуру ожиданий.Итог
В этой статье вы:
pytest, pytest-playwright и браузеры PlaywrightДальше мы начнём строить “правильный” каркас: фикстуры, базовые страницы, локаторы, правила работы с ожиданиями и подготовку к Page Components и Page Factory.