Проверка URL и маршрутов является одной из ключевых задач при тестировании веб-приложений. Она позволяет убедиться, что навигация работает корректно, страницы загружаются по правильным адресам, а параметры маршрутов передаются и обрабатываются верно. Cypress предоставляет гибкий набор инструментов для работы с URL, маршрутизацией и изменениями истории браузера.
Cypress позволяет получать текущий URL с помощью команды
cy.url(). Эта команда возвращает объект
Chainable, с которым можно использовать различные
методы для проверки значений.
Примеры проверок URL:
// Проверка точного совпадения URL
cy.url().should('eq', 'https://example.com/dashboard');
// Проверка, что URL содержит определённый путь
cy.url().should('include', '/dashboard');
// Проверка с использованием регулярного выражения
cy.url().should('match', /dashboard$/);
Особенности:
cy.url() автоматически ожидает завершения перехода и
загрузки страницы.should и then позволяют применять
как синхронные, так и асинхронные проверки.include удобна для
динамических URL с параметрами.Маршруты в приложениях с фронтенд-фреймворками (React, Vue, Angular) часто используют hash-based routing или history API. Cypress обеспечивает возможность тестирования таких маршрутов без дополнительных зависимостей.
Примеры:
// Проверка хэша в URL
cy.hash().should('eq', '#/profile');
// Переход на маршрут с хэшом
cy.visit('/#/settings');
cy.hash().should('include', '#/settings');
Особенности:
cy.hash() возвращает часть URL после символа
#.Команды cy.visit() и действия пользователя
(cy.click(), cy.get().trigger()) позволяют
инициировать переходы, после которых необходимо проверять URL:
// Переход по ссылке и проверка URL
cy.get('a[href="/about"]').click();
cy.url().should('include', '/about');
// Переход с использованием cy.visit
cy.visit('/contact');
cy.url().should('eq', 'https://example.com/contact');
Особенности:
cy.visit() полностью перезагружает страницу.Query-параметры часто используются для фильтров, поиска и сортировки. Проверка корректности параметров важна для гарантии правильного поведения приложения.
Примеры:
// Проверка полного URL с query-параметрами
cy.url().should('eq', 'https://example.com/search?query=test');
// Проверка отдельного параметра
cy.url().then(url => {
const params = new URL(url).searchParams;
expect(params.get('query')).to.eq('test');
});
Особенности:
URL API позволяет удобно работать с
параметрами.Одностраничные приложения часто используют методы
pushState и replaceState для управления
историей браузера. Cypress поддерживает проверку таких изменений.
Пример:
cy.window().then(win => {
win.history.pushState({}, '', '/profile');
});
cy.url().should('include', '/profile');
Особенности:
Cypress позволяет тестировать редиректы как клиентские, так и серверные. Важен порядок действий: сначала инициируется переход, затем проверяется конечный URL.
Пример проверки редиректа:
cy.visit('/old-page');
cy.url().should('eq', 'https://example.com/new-page');
Особенности:
Кнопки и ссылки могут изменять URL через SPA-маршруты или редиректы. Проверка URL после действий пользователя является стандартной практикой:
cy.get('button#go-to-dashboard').click();
cy.url().should('include', '/dashboard');
Особенности:
cy.go('back'), cy.go('forward')).cy.url().should(...) вместо
cy.then() для декларативного подхода.Проверка URL и маршрутов в Cypress обеспечивает надёжный контроль
навигации, позволяет выявлять ошибки маршрутизации и гарантирует
корректное поведение приложения при переходах и изменениях истории
браузера. Использование встроенных методов cy.url(),
cy.hash(), cy.visit() и работы с
window.history позволяет покрыть все основные сценарии
маршрутизации, включая SPA, редиректы и динамические
query-параметры.