Коротке доповнення до практики: як завантажити Playwright traces із GitHub Actions, не зламати вкладені ZIP-файли під час розпакування на macOS, відкрити конкретний trace і за його даними локалізувати різницю між CI та локальним браузером.
Примітка: конспект укладено за автоматичними українськими субтитрами; команди та назви Playwright інструментів нормалізовано за контекстом відео.
Після цього уроку ви зможете
Завантажити trace artifact із GitHub Actions run.
Розпакувати зовнішній artifact без руйнування вкладеного trace.zip.
Відкрити trace через Playwright CLI і знайти конкретну CI-only відмінність.
Після падіння smoke job у її artifacts знаходиться архів із traces. Його завантажують і переносять у локальний проєкт або тимчасову директорію для аналізу. Trace відкривається командою playwright show-trace, яку можна викликати через інструмент керування Python-середовищем проєкту.
Увага
Trace artifact може містити secrets
Trace, logs і reports можуть містити credentials, tokens, test source або application source. Зберігайте їх лише в trusted artifact store або encryption-protected share; local show-trace є простішою межею для чутливих artifacts.
Термін
Playwright trace
Архів записаних browser actions і diagnostic data, який Trace Viewer показує як timeline, DOM snapshots, logs, network, source і metadata test run.
Термін
retain-on-failure
Playwright pytest tracing mode, який зберігає trace лише для failed tests; default tracing mode у plugin — off.
Приклад коду
Розпакування artifact і відкриття trace
unzip smoke-traces.zip -d smoke-traces
uv run playwright show-trace smoke-traces/test-results/example/trace.zip
Перший рядок розпаковує лише зовнішній artifact; другий передає внутрішній trace.zip Playwright CLI.
Очікуваний результат: Відкривається Trace Viewer для конкретного failed test.
Потрібно: unzip, uv, Playwright for Python
Практика
Відтворити failure-to-trace цикл
Візьміть artifact із навмисно failed Playwright test.
Розпакуйте лише зовнішній archive і знайдіть внутрішній trace.zip.
За Trace Viewer назвіть першу дію, де actual state відрізняється від expected.
Зробіть одну вузьку зміну й підтвердьте її повним smoke run.
Artifact може бути ZIP-архівом, усередині якого лежать окремі trace.zip. Archive Utility на macOS рекурсивно розпаковує вкладені архіви й змінює очікувану структуру, після чого Trace Viewer не розпізнає результат як trace.
Надійніший шлях — розпакувати зовнішній artifact консольною командою unzip у визначену директорію та передати Trace Viewer внутрішній trace.zip без повторного пакування. Пробіли в шляху треба екранувати або передавати шлях одним quoted argument.
Що змінилося після запису
Що змінилося після запису
У відеоУрок показує macOS-specific workaround, щоб не розпакувати внутрішній Playwright trace archive.
АктуальноPlaywright офіційно документує цілий trace.zip як input для playwright show-trace, але не документує поведінку macOS Archive Utility. macOS workaround залишається авторським evidence, а не універсальним platform rule.
Що змінилосяОфіційний contract перевірено 2026-07-31; дата macOS behavior не встановлена.
Trace показує реальну причину: на CI hover відбувся, але очікуваний UI state не став видимим так, як локально. Це звужує проблему з абстрактного «тест падає на CI» до конкретної взаємодії браузера й locator assertion.
У демонстрації перевірка адаптується для CI/headless режиму, а також розглядається примусова взаємодія. Такий workaround треба застосовувати лише після перегляду trace: інакше легко приховати реальний дефект сторінки або тесту.
Fix комітиться й повторно запускається в pull request. Linter і smoke можуть стартувати паралельно, щоб базова функціональна перевірка не чекала на завершення статичного аналізу; точна залежність між jobs визначається вимогами проєкту.
Після оновлення п’ять smoke tests проходять. Практичний цикл завершено повним ланцюжком: CI failure → artifact → локальний Trace Viewer → вузька зміна → повторний зелений smoke run.