К обсуждениям

Playwright зависает на context.close с recordHar: разбор этапа teardown

Редакция VOne Технологии

Как отделить успешный тест от зависшего сохранения 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 отделён от доказательств.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.