Как отделить успешный тест от зависшего сохранения HAR в Playwright: минимальный сценарий, порядок закрытия context и browser, контроль артефакта и безопасное обезличивание.
Отделите тест от финализации
Зафиксируйте момент окончания тела теста, начало context.close и момент истечения тайм-аута. Официальная документация Playwright подчёркивает, что контекст следует закрывать явно до browser.close, чтобы артефакты, включая HAR и видео, успели записаться. Поэтому успешные assertions не означают успешный teardown. Не переносите тайм-аут теста на этап закрытия без измерения: это может лишь скрыть зависание и увеличить длительность сборки.
Создайте минимальную пару запусков
Оставьте один браузерный контекст, одну страницу и один короткий запрос без авторизации. Выполните два запуска в одинаковой среде: с recordHar и без него. Запишите длительность тела теста и context.close отдельно. Если зависание есть только с HAR, это сужает область; если оба запуска зависают, исследуйте общую очистку фикстур и процессы браузера. Не используйте рабочий сценарий с персональными данными для воспроизведения.
Проверьте порядок закрытия
Убедитесь, что пользовательский код ожидает завершения context.close и только потом вызывает browser.close. Не закрывайте браузер параллельно и не завершайте процесс сразу после теста. Документация BrowserContext сообщает, что close закрывает все принадлежащие контексту страницы, а документация Browser рекомендует graceful close для полной записи артефактов. Добавьте нейтральные временные метки вокруг шагов, не меняя внутренние библиотеки Playwright.
Оцените сохранённый HAR
После успешного контрольного запуска проверьте, что файл существует, открывается как ожидаемый формат и содержит законченные записи нужного запроса. Перед передачей удалите cookies, заголовки авторизации, query-параметры с секретами и тела с персональными данными. Не публикуйте исходный HAR из production-теста. Если зависший запуск оставляет неполный файл, сохраните только его размер и хеш либо создайте безопасный синтетический пример на общедоступном адресе.
Эскалируйте без force kill как решения
Принудительное завершение процесса допустимо только как аварийное ограничение CI после сохранения журналов, но оно не подтверждает корректность HAR. В отчёт включите версии Playwright, Node.js и ОС, браузерный движок, минимальный код, длительности двух запусков и состояние артефакта. Не прикладывайте storage state или секреты. Критерий остановки — одинаковое зависание минимального теста с HAR при успешном контроле без HAR; дальше нужен анализ разработчиков или проверенное обновление, а не бесконечное увеличение timeout.
Материал подготовлен редакцией VOne с применением ИИ для временной шкалы teardown; жизненный цикл и запись HAR проверены по официальной документации Playwright, issue отделён от доказательств.
Источники и проверка
- Playwright API: BrowserContext проверено 2026-08-13
- Playwright API: Browser newContext проверено 2026-08-13
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.