HTML-отчёты, Trace Viewer, пошаговая отладка, скринкасты, диагностика падений
Когда тест падает — нужно понять почему. Playwright предоставляет мощные инструменты: HTML-отчёты, Trace Viewer, видео и интерактивный инспектор.
Запуск с генерацией отчёта:
pytest tests/ --browser chromium --reporter=htmlОтчёт создаётся в playwright-report/. Откройте его:
playwright show-reportОтчёт содержит:
Trace Viewer — самый детальный инструмент отладки. Запись включается флагом:
# Запись для всех тестов
pytest tests/ --tracing=on
# Запись только для упавших тестов
pytest tests/ --tracing=retain-on-failure
# Запись только при первом повторе (с pytest-rerunfailures)
pytest tests/ --tracing=on-first-retryПросмотр trace:
npx playwright show-trace test-results/trace.zipTrace Viewer показывает:
console.log, console.error из браузераВставьте page.pause() в любое место теста:
def test_debug_example(page):
page.goto('/dashboard')
page.pause() # Тест остановится здесь
# Действия после pause — через Inspector
page.get_by_role('button', name='Settings').click()При запуске откроется Playwright Inspector:
pytest tests/ --headedInspector позволяет:
Codegen записывает ваши действия в код:
playwright codegen https://example.com
playwright codegen --target python https://example.comОткроется браузер. Кликайте, заполняйте — код генерируется в соседнем окне.
# Скриншот только при падении
pytest tests/ --screenshot=only-on-failure
# Скриншот для каждого теста
pytest tests/ --screenshot=onСкриншоты сохраняются в test-results/ и включаются в HTML-отчёт.
# В conftest.py
@pytest.fixture
def page_with_video(browser):
context = browser.new_context(record_video_dir='videos/')
page = context.new_page()
yield page
context.close() # Видео сохраняется при закрытии контекстаВидео записывается для каждого контекста. Полезно для понимания, что происходило на странице перед падением.
Просмотр всех запросов:
page.on('request', lambda req: print(f'>> {req.method} {req.url}'))
page.on('response', lambda res: print(f'<< {res.status} {res.url}'))
page.goto('/dashboard')Вывод:
>> GET https://example.com/dashboard
>> GET https://example.com/api/stats
<< 200 https://example.com/dashboard
<< 500 https://example.com/api/stats
Перехват console.log из браузера:
page.on('console', lambda msg: print(f'[{msg.type}] {msg.text}'))
page.goto('/app')
# [log] App initialized
# [warning] Deprecated API used
# [error] Failed to load moduleСамая частая проблема. Стратегия:
Шаг 1: Проверьте скриншоты упавшего теста в CI — что видит браузер?
Шаг 2: Откройте trace-файл в Trace Viewer — какой шаг упал? Что было в DOM?
Шаг 3: Проверьте сетевые запросы в trace — был ли ответ от API?
Шаг 4: Сравните окружения:
Шаг 5: Запустите CI-тест локально в Docker:
docker run --rm -v $(pwd):/app -w /app python:3.12-bookworm \
bash -c "pip install -r requirements.txt && playwright install chromium && pytest tests/"❌ page.pause() в CI. Inspector требует GUI. В headless-сервере pause() зависнет. Используйте pause() только локально.
❌ Запись trace для всех тестов в production CI. Trace-файлы большие (10-50 МБ на тест). Используйте retain-on-failure.
❌ Отсутствие артефактов при падении. Без if: always() в GitHub Actions отчёт и trace не загрузятся — вы не сможете диагностировать падение.
✅ Правильный подход: --tracing=retain-on-failure в CI, page.pause() локально, HTML-отчёт с загрузкой артефактов, Trace Viewer для детальной диагностики.
--reporter=html и откройте отчёт через playwright show-report.page.pause() в середину теста и попробуйте выполнить действия через Inspector.--tracing=on, найдите trace-файл и откройте его в Trace Viewer.Вы прошли все 12 тем курса по Playwright. Теперь вы умеете:
Сдайте основной экзамен, чтобы подтвердить свои знания!
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.