Получение и установка cookies

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

Получение cookies

Для получения cookies в Playwright используется метод context.cookies(). Этот метод возвращает массив объектов, представляющих cookies, которые доступны для текущего контекста (например, для страницы или для всей сессии).

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');

  // Получение cookies
  const cookies = await context.cookies();
  console.log(cookies);

  await browser.close();
})();

В результате выполнения этого кода в консоли будет выведен список cookies для текущего контекста. Каждый объект в массиве будет содержать информацию о cookie, такую как имя, значение, домен, путь, дата истечения срока действия и другие параметры.

Метод context.cookies() также позволяет получать cookies для конкретных URL или страниц. Для этого необходимо передать массив URL в качестве аргумента:

const cookies = await context.cookies('https://example.com');

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

Установка cookies

Playwright позволяет устанавливать cookies для контекста с помощью метода context.addCookies(). Этот метод принимает массив объектов, каждый из которых представляет собой cookie. Каждый объект cookie должен содержать обязательные свойства, такие как name, value, domain, а также необязательные параметры, такие как path, expires, httpOnly, secure и другие.

Пример установки cookies:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();

  // Установка cookies
  await context.addCookies([{
    name: 'myCookie',
    value: 'cookieValue',
    domain: 'example.com',
    path: '/',
    httpOnly: true,
    secure: true
  }]);

  // Проверка наличия cookies
  const cookies = await context.cookies();
  console.log(cookies);

  await browser.close();
})();

В этом примере создается cookie с именем myCookie и значением cookieValue. Устанавливаются дополнительные параметры, такие как httpOnly и secure, которые обеспечивают, что cookie будет передаваться только по безопасному каналу (через HTTPS) и не будет доступно через JavaScript.

Особенности работы с cookies в Playwright

  1. Контексты браузера: В Playwright cookies привязаны к контекстам браузера. Контекст браузера представляет собой изолированное окружение, где можно хранить свои cookies и сессии. Cookies, установленные в одном контексте, не будут доступны в другом. Это позволяет создавать несколько изолированных окружений в одном браузере, что полезно для тестирования разных пользователей или сессий.

  2. HttpOnly и Secure: Если cookie имеет флаг httpOnly, то оно не будет доступно через JavaScript (например, через document.cookie). Это важно для обеспечения безопасности и предотвращения доступа к cookies через скрипты на странице. Если cookie имеет флаг secure, оно будет передаваться только через HTTPS-соединение.

  3. Срок действия cookie: Если cookie имеет срок действия (поле expires), то оно будет удалено автоматически, когда срок его действия истечет. Если срок действия не указан, cookie будет удалено по завершении сессии.

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

  5. Cookies и аутентификация: Один из наиболее распространенных случаев использования cookies — это тестирование сценариев, связанных с аутентификацией. Например, можно установить cookie, которая хранит токен аутентификации, и проверить, что веб-приложение правильно распознает пользователя при переходе на защищенную страницу.

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();

  // Устанавливаем cookie с токеном аутентификации
  await context.addCookies([{
    name: 'authToken',
    value: 'your-auth-token-here',
    domain: 'example.com',
    path: '/',
    secure: true,
    httpOnly: true
  }]);

  const page = await context.newPage();
  await page.goto('https://example.com/dashboard');

  // Проверка успешной аутентификации
  const userProfile = await page.$('text=Welcome, User');
  console.log(userProfile ? 'Аутентификация успешна' : 'Неудачная аутентификация');

  await browser.close();
})();

В этом примере устанавливается cookie с токеном аутентификации и проверяется, успешно ли выполняется переход на защищенную страницу после установки cookie.

Использование cookies в различных тестовых сценариях

Cookies часто используются в различных сценариях тестирования, таких как:

  • Тестирование входа и выхода из системы: Проверка того, что приложение правильно сохраняет сессию пользователя с использованием cookies, а также корректно очищает cookies при выходе.
  • Тестирование мультимодальных пользователей: Можно создать несколько контекстов браузера с различными cookies для имитации работы с несколькими пользователями одновременно.
  • Симуляция изменений в cookies: Тестирование различных ситуаций, например, истечение срока действия cookies или изменение их значений в процессе работы приложения.

Playwright предоставляет мощные инструменты для манипулирования cookies, что делает его удобным для тестирования и автоматизации работы с веб-приложениями.