Cypress предоставляет встроенные методы для управления навигацией в
браузере во время тестирования. Метод
cy.go() используется для программного
перехода по истории браузера, позволяя перемещаться вперёд или назад без
явного клика по элементам интерфейса. Этот инструмент особенно полезен
для проверки поведения приложения при использовании кнопок «Назад» и
«Вперед», а также для тестирования маршрутов в одностраничных
приложениях (SPA).
cy.go(directionOrIndex, options)
directionOrIndex — параметр, определяющий направление перехода. Может принимать значения:
'back' — переход на одну страницу назад (аналог кнопки
браузера «Назад»).'forward' — переход на одну страницу вперёд (аналог
кнопки браузера «Вперед»).-n соответствует переходу назад на n шагов,
положительное n — вперед на n шагов.options — необязательный объект с настройками,
включая timeout. Используется для контроля времени ожидания
завершения навигации.
Пример использования:
cy.visit('/home')
cy.visit('/about')
cy.go('back') // вернётся на /home
cy.go('forward') // снова откроется /about
cy.go(-1) // аналог 'back'
cy.go(1) // аналог 'forward'
Асинхронность: cy.go() является
асинхронной командой Cypress и автоматически ждёт завершения загрузки
страницы или выполнения маршрута. Нет необходимости добавлять
дополнительные ожидания.
Совместимость с SPA: В одностраничных
приложениях переход по истории может не инициировать перезагрузку
страницы. Cypress корректно отслеживает изменение URL и состояние
приложения при помощи встроенного слежения за
window.history.
История браузера: Метод использует внутренний
стек истории браузера. Если попытаться перейти дальше доступной истории,
Cypress выбросит ошибку. Например, вызов cy.go('forward')
на последней странице истории приведёт к сбою теста.
Интеграция с другими командами: Часто
cy.go() используется совместно с cy.url() или
cy.location() для проверки корректного перехода:
cy.visit('/page1')
cy.visit('/page2')
cy.go('back')
cy.url().should('include', '/page1')
cy.go('forward')
cy.url().should('include', '/page2')
Метод позволяет указывать целые числа для перемещения на несколько шагов по истории сразу:
cy.visit('/step1')
cy.visit('/step2')
cy.visit('/step3')
cy.go(-2) // вернётся на /step1
cy.go(1) // откроется /step2
'back', но позволяют
сразу откатить несколько шагов.'forward'.Переход может занять разное время в зависимости от загрузки страницы
или асинхронных запросов. cy.go() поддерживает опцию
timeout, чтобы явно указать максимальное время
ожидания:
cy.go('back', { timeout: 10000 }) // ждёт до 10 секунд
Если страница не загрузилась за указанное время, тест завершится с ошибкой.
'back' или 'forward', число — целым. Любое
другое значение приведёт к сбою.cy.visit(): если
история браузера пустая, вызов cy.go() не имеет смысла и
тест упадёт.cy.go(), так как URL
может измениться без полной перезагрузки страницы.Тест навигации в SPA с динамическим контентом:
cy.visit('/products')
cy.get('[data-cy=product-1]').click()
cy.url().should('include', '/products/1')
cy.go('back')
cy.url().should('include', '/products')
cy.go('forward')
cy.get('[data-cy=product-detail]').should('be.visible')
Проверка нескольких шагов истории:
cy.visit('/step1')
cy.visit('/step2')
cy.visit('/step3')
cy.go(-2)
cy.url().should('include', '/step1')
cy.go(2)
cy.url().should('include', '/step3')
Использование cy.go() обеспечивает
прямой контроль над навигацией в браузере, позволяет тестировать кнопки
«Назад» и «Вперед», а также проверять корректность маршрутизации в
одностраничных приложениях без необходимости взаимодействия с элементами
интерфейса. Правильное применение метода помогает создавать стабильные,
надёжные и читаемые тесты, минимизируя зависимость от временных задержек
и асинхронных процессов.