1. Не скачаны браузеры
Симптом:
Executable doesn't exist at ...chromium...
После pip install pytest-playwright нужно отдельно скачать браузеры:
playwright install
2. time.sleep() вместо авто-ожиданий
# ❌ Плохо: фиксированная пауза — медленно и ненадёжно
import time
page.goto(url)
time.sleep(5)
page.get_by_role("button", name="OK").click()
# ✅ Хорошо: Playwright сам дождётся готовности
page.goto(url)
page.get_by_role("button", name="OK").click()
3. assert вместо web-first expect()
# ❌ Хрупко: проверяет мгновенный снимок, элемент мог не успеть появиться
assert page.locator(".toast").inner_text() == "Сохранено"
# ✅ Надёжно: expect ждёт до таймаута
from playwright.sync_api import expect
expect(page.locator(".toast")).to_have_text("Сохранено")
4. Sync и async API в одном проекте
У Playwright два API: синхронный (playwright.sync_api) и асинхронный (playwright.async_api). Для pytest-тестов используйте синхронный — он проще. Не смешивайте await и sync-вызовы.
5. Запуск без pytest-плагина
Фикстура page появляется только если установлен pytest-playwright. Если запускаете «сырой» Playwright (без pytest) — там нужно вручную создавать браузер через sync_playwright().
⚠️ Тексты ошибок зависят от версии — сверяйтесь с
--help и документацией.