WebdriverIO предоставляет мощный и гибкий набор инструментов для работы с навигацией в браузере. Важнейшей частью автоматизированного тестирования является корректная работа с переходами между страницами, управление историей браузера и синхронизация с асинхронными действиями на сайте.
1. url() Метод используется для
перехода на указанную страницу. Он принимает строку с абсолютным или
относительным URL.
await browser.url('https://example.com/login');
Если передан относительный путь, WebdriverIO добавляет его к базовому
URL, указанному в конфигурации. Метод возвращает объект
Promise, что требует использования await для
корректного ожидания завершения навигации.
2. back() и forward()
Позволяют управлять историей браузера аналогично кнопкам «Назад» и
«Вперед».
await browser.back(); // Переход к предыдущей странице
await browser.forward(); // Переход к следующей странице
Эти методы полезны при тестировании сценариев с многошаговой навигацией, когда необходимо проверить корректность работы истории браузера.
3. refresh() Обновляет текущую
страницу, аналогично кнопке обновления браузера.
await browser.refresh();
Этот метод гарантирует повторное выполнение всех сетевых запросов и загрузку динамического контента.
Навигация в браузере часто сопровождается асинхронными операциями: загрузкой элементов, выполнением AJAX-запросов, отображением модальных окон. WebdriverIO предоставляет мощные методы ожидания для синхронизации действий теста с состоянием страницы:
waitUntil() – позволяет ожидать
выполнение произвольного условия.waitForExist() /
waitForDisplayed() – удобны для проверки появления
элементов после перехода.const loginButton = await $('#login');
await loginButton.waitForDisplayed({ timeout: 5000 });
Использование этих методов снижает вероятность нестабильности тестов, связанных с асинхронной загрузкой страницы.
WebdriverIO поддерживает работу с несколькими окнами или вкладками через методы:
getWindowHandle() – возвращает
идентификатор текущего окна.getWindowHandles() – возвращает массив
всех открытых окон.switchToWindow(handle) – переключается
на указанное окно.const handles = await browser.getWindowHandles();
await browser.switchToWindow(handles[1]);
Это особенно важно при тестировании всплывающих окон или внешних ссылок, открывающихся в новом табе.
Для одностраничных приложений (SPA) часто используется фреймворк типа React или Vue. В таких случаях переход между страницами реализуется через изменение состояния приложения, а URL может оставаться прежним. WebdriverIO позволяет работать с динамическим контентом с помощью ожиданий и проверки URL:
await browser.url('/dashboard');
await browser.waitUntil(
async () => (await browser.getUrl()).includes('dashboard'),
{ timeout: 5000, timeoutMsg: 'Страница Dashboard не загрузилась' }
);
await browser.url('/products');
const productLink = await $('a.product');
await productLink.click();
await browser.back();
const handlesBefore = await browser.getWindowHandles();
await browser.newWindow('https://example.com');
const handlesAfter = await browser.getWindowHandles();
const newTab = handlesAfter.find(h => !handlesBefore.includes(h));
await browser.switchToWindow(newTab);
await expect(await browser.getUrl()).toContain('example.com');
await browser.refresh();
await $('#main-content').waitForDisplayed({ timeout: 7000 });
Навигация по страницам в WebdriverIO сочетает простоту методов с возможностью точной синхронизации действий и проверки состояния приложения, что делает её базовым инструментом при построении надежных автоматизированных тестов.