Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Краткий гайд по незаметным ошибкам, которые замедляют автоматизацию.
Почему это важно
Playwright развивается быстрее любого другого инструмента UI-автоматизации.
Но вместе с широким распространением закрепляются и антипаттерны — незаметные ошибки, которые команды совершают, даже не осознавая этого.
Эти антипаттерны не валят тесты напрямую, но постепенно приводят к:
- флаки-тестам,
- медленным прогонам,
- непредсказуемости,
- сложной и долгой отладке.
В статье разобраны ключевые антипаттерны Playwright и даны рекомендации, как от них избавиться на практике.
1. Использование .click() вместо .getByRole()
page.click() не учитывает доступность (accessibility).
Он напрямую завязан на селекторы, из-за чего тесты легко ломаются и плохо масштабируются.
Рекомендуемый подход:
await page.getByRole('button', { name: 'Login' }).click();
Почему так лучше:
- автоматическое ожидание видимости элемента,
- устойчивость к небольшим изменениям DOM,
- соответствует поведению реального пользователя,
- продолжает работать после редизайнов.
Использование .click() повсюду — антипаттерн №1 в новых проектах на Playwright.
2. Жёсткие ожидания (waitForTimeout)
Этот приём незаметно убивает производительность тестов.
await page.waitForTimeout(5000);
Такой подход:
- замедляет каждый тест,
- приводит к случайным падениям,
- скрывает реальные проблемы синхронизации,
- накапливает невидимый технический долг.
Вместо этого используйте автоожидание или проверки через expect():
await expect(page.getByText('Success')).toBeVisible();
3. API-вызовы внутри тестов
API-запросы, встроенные прямо в тесты, создают:
- неявные зависимости между тестами,
- конфликтующие состояния,
- медленные и нестабильные параллельные запуски,
- проблемы с блокировками БД.
Что делать вместо этого:
Вынесите подготовку данных в:
- фикстуры,
- хуки,
- API-утилиты.
Тесты должны проверять поведение, а не заниматься созданием данных.
4. Избыточные page.reload()
Во многих тестах по привычке делают так:
await page.goto(url); await page.reload();
Playwright не нуждается в перезагрузках — его функция автоматического ожидания работает достаточно надёжно.
Избыточные reload() приводят к:
- пустой трате времени,
- проблемам с гидрацией фронтенда,
- лишней сетевой нагрузке,
- дополнительной нестабильности.
Используйте перезагрузку только когда проверяете поведение при полном обновлении страницы.
5. Слишком много beforeEach
Чрезмерное использование beforeEach делает тесты тяжёлыми и плохо масштабируемыми:
- многократные входы в систему,
- повторяющийся сетап,
- тесты постоянно делают лишние переходы,
- данные создаются повторно.
Из-за этого время выполнения растёт линейно вместе с количеством тестов.
Как лучше:
- дорогой сетап выносить в
beforeAll, - применяйте фикстуры для изоляции состояний,
- группируйте тесты через
test.describe.parallel.
Фикстуры Playwright созданы именно для того, чтобы избегать повторных затрат.
Заключение
Playwright даёт огромные возможности, но только если использовать его правильно.
Антипаттерны редко бросаются в глаза.
Они незаметно встраиваются в код и постепенно замедляют работу команды.
Исправьте их как можно раньше — и получите:
- быстрые и предсказуемые тесты,
- стабильные пайплайны,
- меньше флаки-перезапусков,
- более счастливую команду автоматизации.
Инструменты сами по себе не делают автоматизацию качественной —
её делают такой правильные паттерны.
Перевод статьи «Anti-Patterns in Playwright People Don’t Realize They’re Doing».