Cypress предоставляет встроенные методы для работы с cookies, что позволяет эффективно управлять состоянием приложения между тестами и сохранять пользовательские данные. Cookies играют ключевую роль в аутентификации, хранении сессий и управлении настройками пользователя.
В Cypress доступны несколько основных команд для работы с cookies:
cy.setCookie(name, value, options) —
установка cookie.cy.getCookie(name) — получение
конкретного cookie по имени.cy.getCookies([filter]) — получение
всех cookies или выборочных по фильтру.cy.clearCookie(name) — удаление
конкретного cookie.cy.clearCookies([filter]) — удаление
всех cookies или выборочных по фильтру.Установка cookie производится с помощью метода
cy.setCookie. Он принимает обязательные параметры
name и value, а также объект
options, в котором можно задать дополнительные
свойства:
cy.setCookie('session_id', '123ABC', {
domain: 'example.com',
path: '/',
secure: true,
httpOnly: true,
expiry: Math.floor(Date.now() / 1000) + 3600
});
Пояснение параметров:
domain — домен, для которого действует
cookie.path — путь, на котором cookie
доступно.secure — устанавливает cookie только
для HTTPS-соединений.httpOnly — запрещает доступ к cookie
через JavaScript в браузере.expiry — время жизни cookie в секундах
с 1970 года (Unix Timestamp).Важно учитывать, что Cypress автоматически очищает cookies перед
каждым тестом. Для сохранения состояния между тестами используется
настройка preserve в
Cypress.Cookies.defaults():
Cypress.Cookies.defaults({
preserve: 'session_id'
});
Для проверки значений cookie используется метод
cy.getCookie(name), который возвращает объект cookie с
полями: name, value, domain,
path, secure, httpOnly,
expiry.
Пример получения cookie и проверки его значения:
cy.getCookie('session_id').should('have.property', 'value', '123ABC');
Для получения всех cookies используется
cy.getCookies():
cy.getCookies().then((cookies) => {
cookies.forEach(cookie => {
cy.log(`${cookie.name}: ${cookie.value}`);
});
});
Метод также поддерживает фильтр по имени или регулярному выражению:
cy.getCookies(['session_id', 'user_pref']).then((cookies) => {
// работа с конкретными cookies
});
Удаление конкретного cookie осуществляется через
cy.clearCookie(name):
cy.clearCookie('session_id');
Удаление всех cookies или выборочных — через
cy.clearCookies([filter]):
cy.clearCookies();
cy.clearCookies(['user_pref']);
Использование фильтров позволяет удалять только необходимые cookies, не затрагивая остальные.
Cypress позволяет глобально сохранять или очищать cookie с помощью
Cypress.Cookies.defaults(). Пример настройки для сохранения
нескольких cookies между тестами:
Cypress.Cookies.defaults({
preserve: ['session_id', 'auth_token']
});
Можно также исключать определённые cookie из автоматического сохранения, используя функцию:
Cypress.Cookies.defaults({
preserve: (cookie) => cookie.name !== 'tracking_id'
});
Эта гибкость позволяет точно управлять состоянием приложения и предотвращает лишние очистки cookies, что критично при сложных сценариях тестирования.
cy.getCookie, если они соответствуют текущему
домену.cy.request для установки cookie на целевой домен, так как
cy.setCookie работает только с текущим доменом теста.Работа с cookies в Cypress обеспечивает мощный инструмент для контроля состояния приложения, ускоряет тестирование и позволяет точно управлять сессиями и пользовательскими данными.