Удаление cookies

Работа с cookies — важный аспект автоматизации тестирования веб-приложений. Cookies играют ключевую роль в хранении сессий, предпочтений пользователей и других данных. Иногда возникает необходимость в удалении cookies для обеспечения независимости тестов или для симуляции состояния без авторизации пользователя. В Playwright эта задача решается через использование API для управления cookies.

Основы работы с cookies

Cookies представляют собой небольшие текстовые файлы, которые веб-приложение сохраняет на стороне клиента. Эти файлы содержат информацию, которая может быть использована при дальнейших запросах к серверу, такие как токены сессий, идентификаторы пользователя и другие данные. В Playwright работа с cookies реализована через объект context, который позволяет управлять состоянием cookies в рамках текущего браузерного контекста.

Получение cookies

Для начала, чтобы удалить cookies, нужно сначала понять, какие cookies находятся в контексте. Получить список всех cookies в текущем контексте можно с помощью метода context.cookies().

Пример:

const cookies = await page.context().cookies();
console.log(cookies);

Метод возвращает массив объектов cookie, содержащих различные поля, такие как имя, значение, домен, путь, время истечения срока действия и другие параметры.

Удаление cookies

Playwright предоставляет два способа удаления cookies: через удаление всех cookies в контексте или удаление конкретных cookies.

  1. Удаление всех cookies:

Чтобы удалить все cookies, необходимо воспользоваться методом context.clearCookies(). Этот метод удаляет все cookies в рамках текущего браузерного контекста, что полезно, например, при необходимости сбросить все сессионные данные перед началом нового теста.

Пример:

await page.context().clearCookies();
  1. Удаление конкретных cookies:

Если нужно удалить только определённые 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 остаются в контексте.

Работа с 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 после выполнения каждого теста. Это предотвращает возможные перекрёстные зависимости между тестами и помогает сохранить независимость результатов.

Пример реализации удаления cookies между тестами в структуре с использованием beforeEach и afterEach:

beforeEach(async () => {
  await page.context().clearCookies();
});

afterEach(async () => {
  await page.context().clearCookies();
});

Таким образом, перед каждым тестом будет выполняться очистка cookies, обеспечивая чистоту тестовой среды.

Советы и лучшие практики

  1. Использование cookies для тестирования аутентификации: Удаление cookies может быть полезным для тестирования различных состояний аутентификации. Например, после авторизации можно удалить все cookies и проверить, как приложение реагирует на отсутствие сессии.

  2. Удаление cookies после завершения теста: При использовании нескольких контекстов важно не забывать о том, что cookies остаются в контексте до явного их удаления. Рекомендуется очищать cookies в afterEach, чтобы не повлиять на выполнение следующих тестов.

  3. Сохранение cookies для восстановления сессии: В некоторых случаях полезно сохранять cookies в файл перед их удалением, чтобы можно было восстановить сессию между тестами. Это особенно актуально для тестов, где требуется продолжать работу с определённым пользователем.

Пример сохранения cookies:

const cookies = await page.context().cookies();
fs.writeFileSync('cookies.json', JSON.stringify(cookies));
  1. Тестирование с несколькими пользователями: При тестировании с несколькими пользователями необходимо учитывать, что cookies для разных пользователей могут быть сохранены в разных контекстах браузера. Удаление cookies в одном контексте не повлияет на cookies в других.

Заключение

Удаление cookies в Playwright предоставляет мощный инструмент для управления состоянием сессий и тестирования различных сценариев, включая аутентификацию, авторизацию и взаимодействие с веб-приложением. Playwright предлагает гибкие способы работы с cookies, включая возможность удаления как всех cookies, так и их части. Это позволяет создать независимые и стабильные тесты, которые не зависят от состояния сессии или предыдущих запросов.