Cookies играют ключевую роль в веб-приложениях, обеспечивая хранение пользовательских данных между сессиями, управление авторизацией и настройками интерфейса. В автоматизированном тестировании важно иметь возможность контролировать cookies для проверки поведения приложения в различных состояниях. Cypress предоставляет мощный API для работы с cookies, позволяя читать, устанавливать и удалять их на лету.
Получение 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 часто используются для хранения токенов аутентификации, настроек интерфейса и состояния сессии. 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.
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
});
Для обеспечения чистоты тестового окружения часто используют хуки
beforeEach и afterEach:
beforeEach(() => {
cy.clearCookies();
});
afterEach(() => {
cy.getCookies().should('be.empty');
});
Это гарантирует, что каждый тест запускается с пустым состоянием cookies, исключая влияние предыдущих тестов на результат.
secure,
expiry, domain).Работа с cookies в Cypress обеспечивает детальный контроль состояния
приложения, позволяет ускорить тесты и проверять критически важные
сценарии, связанные с авторизацией, настройками пользователя и
безопасностью. Правильное использование методов getCookie,
setCookie и clearCookie вместе с настройкой
опций создаёт надёжное и воспроизводимое тестовое окружение.