Работа с cookies

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


Управление cookies в Cypress

Получение cookies выполняется с помощью команды cy.getCookie() или cy.getCookies().

  • cy.getCookie(name) возвращает конкретный cookie по имени.
  • cy.getCookies() возвращает массив всех cookies текущего домена.

Пример использования:

cy.getCookie('session_id').should('exist').then((cookie) => {
  expect(cookie.value).to.eq('12345');
});

cy.getCookies().should('have.length.greaterThan', 0);

Установка cookies осуществляется командой cy.setCookie(name, value, options). Опционально можно указать свойства cookie, такие как path, domain, expiry и secure.

cy.setCookie('user_preference', 'dark_mode', { path: '/', secure: true });

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

Удаление cookies возможно как по имени, так и глобально:

cy.clearCookie('session_id'); // удаление конкретного cookie
cy.clearCookies();            // удаление всех cookies текущего домена

Проверка состояния приложения через cookies

Cookies часто используются для хранения токенов аутентификации, настроек интерфейса и состояния сессии. Cypress позволяет не только устанавливать их вручную, но и проверять корректность их работы в тестах.

Пример проверки сохранения настроек пользователя:

cy.setCookie('theme', 'light');
cy.reload();
cy.getCookie('theme').should('have.property', 'value', 'light');

При тестировании авторизации можно использовать cookie для симуляции состояния залогиненного пользователя:

cy.setCookie('auth_token', 'abcdef12345');
cy.visit('/dashboard');
cy.contains('Добро пожаловать');

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


Опции при работе с cookies

Cypress поддерживает несколько важных опций:

  • path – путь, на котором cookie действителен. По умолчанию /.
  • domain – домен, к которому относится cookie.
  • secure – если true, cookie будет передаваться только через HTTPS.
  • httpOnly – если true, cookie недоступен через JavaScript на клиентской стороне.
  • expiry – время жизни cookie в секундах.

Пример установки cookie с полной конфигурацией:

cy.setCookie('session_id', 'xyz789', {
  domain: 'example.com',
  path: '/',
  secure: true,
  httpOnly: true,
  expiry: Math.floor(Date.now() / 1000) + 3600
});

Перехват и управление cookies в жизненном цикле теста

Для обеспечения чистоты тестового окружения часто используют хуки beforeEach и afterEach:

beforeEach(() => {
  cy.clearCookies();
});

afterEach(() => {
  cy.getCookies().should('be.empty');
});

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


Полезные практики

  1. Использование cookies для ускорения тестов – установка авторизационных cookie позволяет пропустить повторный вход через UI.
  2. Очистка cookies между тестами – предотвращает накопление состояния и снижает вероятность ложноположительных ошибок.
  3. Проверка свойств cookie – важно проверять не только наличие cookie, но и его свойства (secure, expiry, domain).
  4. Комбинирование с localStorage – иногда cookies и localStorage используются одновременно для управления сессиями, поэтому стоит контролировать оба механизма.

Работа с cookies в Cypress обеспечивает детальный контроль состояния приложения, позволяет ускорить тесты и проверять критически важные сценарии, связанные с авторизацией, настройками пользователя и безопасностью. Правильное использование методов getCookie, setCookie и clearCookie вместе с настройкой опций создаёт надёжное и воспроизводимое тестовое окружение.