Работа с cookies — важный аспект автоматизации тестирования веб-приложений. Cookies играют ключевую роль в хранении сессий, предпочтений пользователей и других данных. Иногда возникает необходимость в удалении cookies для обеспечения независимости тестов или для симуляции состояния без авторизации пользователя. В Playwright эта задача решается через использование API для управления cookies.
Cookies представляют собой небольшие текстовые файлы, которые
веб-приложение сохраняет на стороне клиента. Эти файлы содержат
информацию, которая может быть использована при дальнейших запросах к
серверу, такие как токены сессий, идентификаторы пользователя и другие
данные. В Playwright работа с cookies реализована через объект
context, который позволяет управлять состоянием cookies в
рамках текущего браузерного контекста.
Для начала, чтобы удалить cookies, нужно сначала понять, какие
cookies находятся в контексте. Получить список всех cookies в текущем
контексте можно с помощью метода context.cookies().
Пример:
const cookies = await page.context().cookies();
console.log(cookies);
Метод возвращает массив объектов cookie, содержащих различные поля, такие как имя, значение, домен, путь, время истечения срока действия и другие параметры.
Playwright предоставляет два способа удаления cookies: через удаление всех cookies в контексте или удаление конкретных cookies.
Чтобы удалить все cookies, необходимо воспользоваться методом
context.clearCookies(). Этот метод удаляет все cookies в
рамках текущего браузерного контекста, что полезно, например, при
необходимости сбросить все сессионные данные перед началом нового
теста.
Пример:
await page.context().clearCookies();
Если нужно удалить только определённые cookies, можно использовать
метод context.clearCookies() с указанием фильтра, который
ограничивает область удаления. Например, если необходимо удалить cookies
для конкретного домена, можно воспользоваться следующим кодом:
Пример:
await page.context().clearCookies({ domains: ['example.com'] });
Для удаления cookies, соответствующих определённому имени или другим параметрам, можно отфильтровать список cookies перед удалением.
Пример:
const cookies = await page.context().cookies();
const filteredCookies = cookies.filter(cookie => cookie.name !== 'session_id');
for (let cookie of filteredCookies) {
await page.context().clearCookies({ cookies: [cookie] });
}
В этом примере фильтруются cookies с именем session_id,
и все остальные cookies остаются в контексте.
Playwright позволяет работать с несколькими браузерными контекстами одновременно. Каждый контекст имеет свой набор cookies, что позволяет эмулировать различные сессии в одном тесте. При удалении cookies необходимо учитывать, что оно затрагивает только cookies, ассоциированные с конкретным контекстом, а не с браузером в целом.
Пример создания нескольких контекстов и удаления cookies в одном из них:
const browser = await playwright.chromium.launch();
const context1 = await browser.newContext();
const context2 = await browser.newContext();
// Удаление cookies в context1
await context1.clearCookies();
// Проверка cookies в контексте 2
const cookiesContext2 = await context2.cookies();
console.log(cookiesContext2);
В этом примере cookies будут удалены только в context1,
а в context2 cookies останутся неизменными.
Для изоляции тестов в рамках одного браузерного запуска важно удалять cookies после выполнения каждого теста. Это предотвращает возможные перекрёстные зависимости между тестами и помогает сохранить независимость результатов.
Пример реализации удаления cookies между тестами в структуре с
использованием beforeEach и afterEach:
beforeEach(async () => {
await page.context().clearCookies();
});
afterEach(async () => {
await page.context().clearCookies();
});
Таким образом, перед каждым тестом будет выполняться очистка cookies, обеспечивая чистоту тестовой среды.
Использование cookies для тестирования аутентификации: Удаление cookies может быть полезным для тестирования различных состояний аутентификации. Например, после авторизации можно удалить все cookies и проверить, как приложение реагирует на отсутствие сессии.
Удаление cookies после завершения теста: При
использовании нескольких контекстов важно не забывать о том, что cookies
остаются в контексте до явного их удаления. Рекомендуется очищать
cookies в afterEach, чтобы не повлиять на выполнение
следующих тестов.
Сохранение cookies для восстановления сессии: В некоторых случаях полезно сохранять cookies в файл перед их удалением, чтобы можно было восстановить сессию между тестами. Это особенно актуально для тестов, где требуется продолжать работу с определённым пользователем.
Пример сохранения cookies:
const cookies = await page.context().cookies();
fs.writeFileSync('cookies.json', JSON.stringify(cookies));
Удаление cookies в Playwright предоставляет мощный инструмент для управления состоянием сессий и тестирования различных сценариев, включая аутентификацию, авторизацию и взаимодействие с веб-приложением. Playwright предлагает гибкие способы работы с cookies, включая возможность удаления как всех cookies, так и их части. Это позволяет создать независимые и стабильные тесты, которые не зависят от состояния сессии или предыдущих запросов.