2. Storage state, cookie manipulation, дебаг зникаючих елементів
Урок оптимізує Playwright-тести через повторне використання авторизованого `storage state`, розділяє перевантажений `conftest.py` на pytest plugins, показує безпечну маніпуляцію cookies для feature flags і два способи зупинити DOM у момент появи короткоживучого елемента.
Примітка: конспект укладено за автоматичними українськими субтитрами; назви Playwright, pytest і DevTools API нормалізовано за контекстом відео.
Після цього уроку ви зможете
Зберігати й повторно використовувати авторизований Playwright storage state.
Додавати test cookies через BrowserContext без публікації session secrets.
Зупиняти тест у Playwright Inspector для дослідження короткоживучих DOM-станів.
Повторний login у кожному тесті витрачає час і збільшує кількість нестабільних UI-кроків. Playwright може зберегти cookies та local storage після однієї авторизації, а нові browser contexts стартуватимуть уже в потрібному стані.
Таке спільне використання допустиме лише тоді, коли застосунок дозволяє паралельні сесії одного акаунта, а тести не змінюють взаємно залежний server-side стан. storage state прибирає login, але не робить інші дані тестів незалежними.
Що змінилося після запису
`sessionStorage` не входить у стандартний auth state
У відеоНа початку уроку разом згадані local storage, session storage і cookies.
АктуальноПоточна Playwright документація окремо зазначає, що sessionStorage не зберігається автоматично; за потреби його серіалізують і відновлюють окремим script. IndexedDB можна включити окремою option у сучасному API.
Перевірено 2026-07-31
Термін
storage state
Серіалізований стан browser context, який Playwright може зберегти й передати у новий context для повторного використання cookies та підтримуваного web storage.
Один conftest.py накопичив конфігурацію, запуск браузера, створення сторінки й app-specific fixtures. Код розділяється на модулі config, playwright та app, а кореневий conftest.py лише підключає їх через pytest_plugins.
Технічний шар створює браузер і context; app-шар виконує login, перевіряє, що цільова сторінка завантажена, і зберігає state. Такий поділ залишає місце для Firefox або інших browser options без змішування з бізнесовими переходами.
Після переходу на uv набори запускаються через uv run pytest і pytest markers на кшталт smoke або regression. Перший context виконує login та записує state, наступні contexts завантажують цей файл.
Перевірка показує, що оптимізація не виправляє помилки очікувань автоматично: тест може падати через неправильний is_loaded або інший homepage state. Треба відрізняти проблему повторної авторизації від помилки самої fixture чи assertion.
Cookies корисні не лише для авторизації. Вони можуть увімкнути feature flag, направити автоматизований трафік на окремий backend або задати тестовий режим на спільному домені.
Маніпуляцію варто сховати в короткий helper/decorator над BrowserContext: тест передає name, value, domain і path, а helper додає cookie. Domain має точно охоплювати потрібний host; після зміни зазвичай треба reload сторінки, щоб наступні запити та UI підхопили нове значення.
Термін
BrowserContext.add_cookies
Метод додає cookies до context; кожна його page отримує ці cookies, а cookie задається через url або пару domain і path.
Практика
Перевірка feature flag через cookie
Створіть auth state локально й переконайтеся, що файл заігнорований Git.
Додайте feature cookie через context.
Поставте page.pause() і перевірте cookie в DevTools Application перед assertion.
Результат: Тест повторно використовує login, cookie видно на правильному origin, state-файл не відстежується Git.
Playwright записує state як JSON із cookies та origins/local storage. Cookie містить name, value, domain, path, expiration, httpOnly, secure та інші параметри; новий context отримує цей файл через storage_state.
Файл не можна комітити: він може містити чинну сесію та дані внутрішньої інфраструктури. У прикладі state лежить у вже заігнореній test-results; окрема директорія також прийнятна, якщо вона гарантовано додана до .gitignore.
Увага
Не комітьте auth state
Playwright попереджає, що state-файл може містити cookies і headers, здатні видати доступ до тестового акаунта.
page.pause() зупиняє тест і відкриває Playwright Inspector. Це дає змогу подивитися поточний DOM, перевірити locator та виконувати кроки по одному, не покладаючись лише на звичайний debugger IDE.
Для короткоживучого статусу на кшталт Saving/Saved треба поставити паузу одразу після дії, яка його породжує. Якщо елемент зникає надто швидко, DevTools Sources може призупинити JavaScript через F8.
Термін
Playwright Inspector
GUI для покрокового виконання тесту, редагування locator і перегляду actionability logs; page.pause() зупиняє тест у потрібній точці під час запуску в debug mode.
Альтернативний спосіб — DevTools breakpoint Break on subtree modifications на контейнері. Після Save браузер зупиниться на зміні DOM; покрокове продовження дозволяє знайти проміжні стани Saving і Saved та побудувати locator.
Для перевірки cookie тест ставиться на паузу, у DevTools відкривається Application → Cookies, виконується наступний крок і reload. Так видно, що feature flag дійсно додано до правильного домену до того, як на нього покладатиметься assertion.