При автоматизированном тестировании веб-приложений управление состоянием браузера играет ключевую роль. Одним из основных элементов состояния являются cookies. Cookies используются для хранения информации о сессиях, настройках пользователя и других данных, необходимых для работы приложения. В тестах часто требуется сбрасывать cookies, чтобы обеспечить чистое окружение перед выполнением сценария или между шагами теста.
Cypress предоставляет встроенные команды для работы с cookies, которые позволяют не только очищать все cookies, но и управлять отдельными значениями.
1. Очистка всех cookies
Для полного удаления cookies используется команда:
cy.clearCookies()
Эта команда удаляет все cookies, установленные в текущем домене. Она полезна при подготовке чистого состояния перед запуском теста.
Опционально можно использовать scope для указания конкретного домена:
cy.clearCookies({ domain: 'example.com' })
describe('Тестирование с очисткой cookies', () => {
beforeEach(() => {
cy.visit('https://example.com')
cy.clearCookies()
})
it('Должен работать с чистыми cookies', () => {
cy.get('#login-form').should('be.visible')
})
})
В этом примере перед каждым тестом браузер очищает cookies, что гарантирует независимость тестов.
2. Очистка конкретного cookie
Иногда требуется удалить только один cookie, не затрагивая остальные. Для этого используется:
cy.clearCookie('имя_куки')
Пример:
cy.setCookie('session_id', '123456')
cy.clearCookie('session_id')
cy.getCookie('session_id').should('not.exist')
Эта практика позволяет тестировать сценарии выхода из системы или изменения состояния сессии без полного сброса всех cookies.
Cypress позволяет проверять состояние cookies после операций:
cy.getCookie('имя_куки').should('have.property', 'value', 'значение')
cy.getCookie('имя_куки').should('not.exist')
Эти проверки необходимы для убедительной валидации того, что очистка cookies прошла корректно.
Cypress по умолчанию очищает cookies между тестами
(it) в одном describe, что обеспечивает
изоляцию тестов. Этот процесс настраивается через конфигурацию:
Cypress.Cookies.defaults({
preserve: [] // список имен cookies, которые сохраняются
})
Если необходимо сохранять определённые cookies,
например для авторизации, их имена указываются в массиве
preserve.
Некоторые cookies имеют флаг session и удаляются
автоматически после завершения сессии браузера. Cypress учитывает это
поведение, однако для тестов, которые требуют переинициализации
сессии, рекомендуется явно очищать cookies командой
cy.clearCookies().
cy.clearCookies() в
beforeEach или afterEach для поддержания
чистоты тестового окружения.Cypress.Cookies.defaults({ preserve: [...] }).cy.getCookie(...).should('not.exist') для уверенности в
корректной очистке.domain для управления cookies только конкретного
сайта.Эффективное управление cookies повышает надёжность тестов, предотвращает побочные эффекты от предыдущих сценариев и позволяет эмулировать разные состояния пользователя без необходимости ручного вмешательства.