Авторизация в тестах
- Как работают команды
saveStateиrestoreState - Как сохранить сессию авторизации и переиспользовать ее в тестах
- Как работать с несколькими аккаунтами и ролями
- Лучшие практики хранения состояния и работы с параллельными тестами
Введение
При запуске тестов браузер не содержит данных авторизации. Выполнять вход в каждом тесте неэффективно: это увеличивает время прогона и создает зависимость от стабильности формы логина.
Команды saveState и restoreState позволяют сохранить состояние браузера (cookies, localStorage, sessionStorage) после однократной авторизации и восстанавливать его в последующих тестах.
Как работают команды
saveState
Команда saveState сохраняет текущее состояние браузера: cookies, localStorage и sessionStorage. Данные можно сохранить в файл или в переменную.
// Сохранение в файл
await browser.saveState({ path: "./state.json" });
// Сохранение в переменную
const state = await browser.saveState();
Для страниц с iframe данные storage сохраняются отдельно для каждого origin. IndexedDB в сохраняемое состояние не входит.
restoreState
Команда restoreState восстанавливает ранее сохраненное состояние.
// Восстановление из файла
await browser.restoreState({ path: "./state.json" });
// Восстановление из переменной
await browser.restoreState({ data: state });
Перед вызовом restoreState откройте страницу нужного домена командой
url. Это техническое ограничение браузера: localStorage и
sessionStorage привязаны к origin, а cookies можно установить только для текущего домена.
По умолчанию после восстановления состояния страница перезагружается (refresh: true). Это нужно, чтобы приложение «увидело» восстановленные данные.
Работа с cookies напрямую
Если авторизация хранится только в cookies и localStorage/sessionStorage не нужны, можно использовать команды getCookies, setCookies и deleteCookies:
// Получить cookies
const cookies = await browser.getCookies();
// Установить cookies
await browser.setCookies([{ name: "session", value: "abc123", domain: ".example.com" }]);
// Удалить конкретный cookie
await browser.deleteCookies("session");