Очистка cookies

При автоматизированном тестировании веб-приложений управление состоянием браузера играет ключевую роль. Одним из основных элементов состояния являются cookies. 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.

Валидация состояния cookies

Cypress позволяет проверять состояние cookies после операций:

  • Получение значения cookie:
cy.getCookie('имя_куки').should('have.property', 'value', 'значение')
  • Проверка отсутствия cookie:
cy.getCookie('имя_куки').should('not.exist')

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

Автоматическая очистка cookies между тестами

Cypress по умолчанию очищает cookies между тестами (it) в одном describe, что обеспечивает изоляцию тестов. Этот процесс настраивается через конфигурацию:

Cypress.Cookies.defaults({
  preserve: [] // список имен cookies, которые сохраняются
})

Если необходимо сохранять определённые cookies, например для авторизации, их имена указываются в массиве preserve.

Работа с сессионными cookies

Некоторые cookies имеют флаг session и удаляются автоматически после завершения сессии браузера. Cypress учитывает это поведение, однако для тестов, которые требуют переинициализации сессии, рекомендуется явно очищать cookies командой cy.clearCookies().

Практические советы

  • Использовать cy.clearCookies() в beforeEach или afterEach для поддержания чистоты тестового окружения.
  • Для тестов авторизации сохранять только необходимые cookies через Cypress.Cookies.defaults({ preserve: [...] }).
  • Проверять удаление cookies через cy.getCookie(...).should('not.exist') для уверенности в корректной очистке.
  • При работе с несколькими доменами использовать опцию domain для управления cookies только конкретного сайта.

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