Playwright предоставляет механизм хранения состояния, который позволяет сохранять и восстанавливать сессии браузера между различными запусками тестов. Это полезно для ускорения тестирования и создания более стабильных тестов, имитируя поведение пользователей, которые уже аутентифицированы или взаимодействовали с приложением.
Storage State представляет собой сериализованное состояние браузера, включая данные о cookies, локальное хранилище (localStorage) и sessionStorage. Эти данные могут быть сохранены и использованы позже для восстановления текущего состояния приложения, что позволяет избежать лишних шагов, таких как повторный вход в систему.
Playwright предоставляет два основных способа работы с Storage State:
Для сохранения состояния браузера в Playwright используется метод
context.storageState(). Этот метод позволяет получить
объект, который включает в себя все cookies, данные из localStorage и
sessionStorage. Сохранённое состояние может быть записано в файл или
использовано для дальнейшего восстановления в другом контексте
браузера.
Пример сохранения состояния:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
// Навигация и выполнение действий, например, вход в систему
await page.goto('https://example.com');
await page.fill('input[name="username"]', 'testuser');
await page.fill('input[name="password"]', 'password');
await page.click('button[type="submit"]');
// Сохранение состояния в файл
await context.storageState({ path: 'state.json' });
await browser.close();
})();
В данном примере после выполнения действий с веб-страницей состояние
сохраняется в файл state.json. Этот файл можно использовать
позже для восстановления состояния браузера.
Чтобы восстановить состояние из ранее сохранённого файла, можно
передать путь к файлу в метод newContext() при создании
нового контекста. Восстановление состояния позволяет продолжить работу с
тем же состоянием, в котором завершился предыдущий сеанс.
Пример восстановления состояния:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
// Создание нового контекста с использованием сохранённого состояния
const context = await browser.newContext({
storageState: 'state.json'
});
const page = await context.newPage();
// Страница уже будет аутентифицирована и готова к дальнейшим действиям
await page.goto('https://example.com');
// Далее можно продолжить тестирование с тем же состоянием
// Например, проверить, что пользователь всё ещё залогинен
const userLoggedIn = await page.isVisible('text=Welcome, testuser');
console.log(userLoggedIn ? 'Пользователь залогинен' : 'Пользователь не залогинен');
await browser.close();
})();
В этом примере браузер восстанавливает состояние с использованием сохранённого файла, что позволяет избежать повторной аутентификации и ускорить тестирование.
Использование storage state особенно полезно в случаях, когда тесты требуют выполнения нескольких шагов, таких как аутентификация или настройка пользовательских данных, и эти шаги должны быть выполнены только один раз. Например:
context.clearCookies() или
context.clearLocalStorage().Пример очистки cookies перед началом нового теста:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Очистка cookies
await context.clearCookies();
// Сохранение состояния после выполнения действий
const page = await context.newPage();
await page.goto('https://example.com');
await page.fill('input[name="username"]', 'newuser');
await page.fill('input[name="password"]', 'newpassword');
await page.click('button[type="submit"]');
await context.storageState({ path: 'new_state.json' });
await browser.close();
})();
Использование Playwright для работы с состоянием браузера — это мощный инструмент для повышения эффективности тестирования. Он позволяет сократить время на повторные шаги и ускорить общий процесс разработки.