В процессе тестирования с использованием Playwright важным аспектом является работа с состоянием сессии, так как многие тесты требуют имитации пользователей, которые выполняют действия в приложении на протяжении продолжительного времени. Сохранение и восстановление состояния сессии позволяет эффективно повторно использовать сессии, ускоряя тесты и делая их более стабильными.
Состояние сессии включает в себя данные, которые сохраняются в браузере и используются в процессе взаимодействия с приложением. Это могут быть:
Задача Playwright — предоставить инструменты для сохранения этого состояния, чтобы оно могло быть использовано в последующих тестах без необходимости заново проходить процесс авторизации или выполнять другие временные операции, требующие значительных ресурсов.
Playwright предоставляет несколько механизмов для сохранения состояния сессии, которые можно использовать в тестах.
context.storageState()Метод context.storageState() позволяет сохранить текущее
состояние сессии в файл. Этот метод сохраняет все данные, связанные с
состоянием, такие как куки и локальное хранилище. В результате можно
легко восстанавливать состояние в следующем тесте, избегая необходимости
заново логиниться или повторно загружать страницы.
Пример сохранения состояния сессии:
const { webkit } = require('playwright'); // или другой браузер: chromium, firefox
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
// Сохраняем состояние сессии в файл
await context.storageState({ path: 'state.json' });
await browser.close();
})();
В этом примере после выполнения теста состояние сессии сохраняется в
файл state.json. Этот файл можно затем использовать для
восстановления состояния в следующем тесте.
browser.newContext()Для восстановления состояния сессии в другом тесте, необходимо использовать сохранённый файл состояния сессии в контексте нового браузера. Этот процесс позволяет избежать необходимости повторной авторизации и других временных операций.
Пример восстановления состояния сессии:
const { webkit } = require('playwright'); // или другой браузер: chromium, firefox
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext({
storageState: 'state.json' // указываем путь к файлу состояния
});
const page = await context.newPage();
await page.goto('https://example.com');
// Теперь состояние сессии восстановлено, и можно продолжать тест
await browser.close();
})();
Этот код создает новый контекст браузера, загружая данные из файла
state.json, что позволяет начать тест с восстановленного
состояния сессии.
Playwright поддерживает создание нескольких контекстов в одном браузере. Это полезно, когда необходимо протестировать работу приложения с несколькими пользователями одновременно. Для каждого контекста можно сохранить и восстановить отдельное состояние, имитируя взаимодействие разных пользователей.
Пример использования нескольких контекстов:
const { webkit } = require('playwright'); // или другой браузер: chromium, firefox
(async () => {
const browser = await webkit.launch();
// Контекст первого пользователя
const context1 = await browser.newContext();
const page1 = await context1.newPage();
await page1.goto('https://example.com');
await context1.storageState({ path: 'user1_state.json' });
// Контекст второго пользователя
const context2 = await browser.newContext();
const page2 = await context2.newPage();
await page2.goto('https://example.com');
await context2.storageState({ path: 'user2_state.json' });
await browser.close();
})();
В этом примере создаются два разных контекста, имитирующих действия двух пользователей, и для каждого контекста сохраняются свои данные.
Сохранение и восстановление состояния сессии особенно полезно при тестировании приложений с авторизацией. Вместо того чтобы каждый раз проходить процесс логина, можно один раз пройти авторизацию, сохранить состояние сессии, а затем использовать его в дальнейшем для быстрого доступа к защищённым частям приложения. Это значительно ускоряет тестирование, особенно в случае с большими приложениями с множеством страниц.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com/login');
await page.fill('input[name="username"]', 'testuser');
await page.fill('input[name="password"]', 'password');
await page.click('button[type="submit"]');
// Сохраняем состояние сессии после логина
await context.storageState({ path: 'loggedInState.json' });
await browser.close();
})();
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext({
storageState: 'loggedInState.json'
});
const page = await context.newPage();
await page.goto('https://example.com/dashboard');
// Продолжить тестирование в авторизованном состоянии
await browser.close();
})();
Playwright позволяет легко очистить состояние сессии, что полезно для тестов, где требуется начать с “чистого листа” или выполнить выход из системы. Для этого можно просто удалить соответствующие файлы сессий или использовать методы, которые очищают состояние контекста.
Пример очистки состояния сессии:
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext();
// Очищаем состояние сессии
await context.clearCookies();
await context.clearLocalStorage();
const page = await context.newPage();
await page.goto('https://example.com/logout');
await browser.close();
})();
Этот код очищает все куки и локальное хранилище в контексте браузера, что гарантирует, что тесты будут выполняться без каких-либо остаточных данных.
Сохранение и восстановление состояния сессии в Playwright — это мощный инструмент, который позволяет значительно ускорить процесс тестирования и улучшить его стабильность. Используя возможности Playwright, можно эффективно работать с данными сессии, повторно используя их в разных тестах, что особенно важно при тестировании сложных веб-приложений с авторизацией.