WebdriverIO предоставляет мощные средства для управления историей браузера и навигацией между страницами. Работа с историей особенно полезна при тестировании многостраничных приложений, где необходимо эмулировать поведение пользователя: переход вперёд и назад, перезагрузка страниц и проверка корректного состояния интерфейса.
WebdriverIO использует объект browser для управления
навигацией. Основные методы:
browser.url(path) Переход по
указанному URL. Аргумент path может быть как относительным
(/login), так и абсолютным
(https://example.com/login). Пример:
await browser.url('/dashboard');browser.back() Возврат к предыдущей
странице в истории браузера, аналог кнопки «Назад». Пример:
await browser.back();browser.forward() Переход к
следующей странице в истории браузера, если ранее использовался
back(). Пример:
await browser.forward();browser.refresh() Перезагрузка
текущей страницы. Полезно для проверки состояния элементов после
обновления страницы. Пример:
await browser.refresh();Для проверки корректного перехода и состояния страницы используются следующие методы:
browser.getUrl() Возвращает текущий
URL. Можно использовать для ассертов в тестах.
const currentUrl = await browser.getUrl();
expect(currentUrl).toContain('/dashboard');browser.getTitle() Возвращает
заголовок текущей страницы, что удобно для проверки правильной загрузки
нужной страницы.
const title = await browser.getTitle();
expect(title).toBe('Панель управления');window.historyWebdriverIO позволяет выполнять JavaScript в контексте страницы через
browser.execute(), что даёт доступ к объекту
window.history. Основные методы:
history.back() и
history.forward() Аналогично
browser.back() и browser.forward(), но
вызываются внутри браузера.
await browser.execute(() => window.history.back());history.go(n) Позволяет
перемещаться на n шагов в истории: отрицательное число для
возврата назад, положительное — вперёд.
await browser.execute(() => window.history.go(-2));history.length Возвращает
количество страниц в истории текущего окна.
const historyLength = await browser.execute(() => window.history.length);Все действия с навигацией требуют корректной работы с асинхронностью. Например, при переходе на страницу нужно убедиться, что она полностью загрузилась перед следующей операцией:
await browser.url('/profile');
await browser.waitUntil(
async () => (await browser.getTitle()) === 'Профиль пользователя',
{
timeout: 5000,
timeoutMsg: 'Страница профиля не загрузилась за 5 секунд'
}
);
Использование waitUntil предотвращает ошибки, связанные
с попыткой взаимодействия с элементами до завершения загрузки.
Тестирование кнопок навигации Проверка работы кнопок «Назад» и «Вперед»:
await browser.url('/page1');
await browser.url('/page2');
await browser.back();
expect(await browser.getUrl()).toContain('/page1');
await browser.forward();
expect(await browser.getUrl()).toContain('/page2');Перезагрузка и сохранение состояния Проверка того, что состояние элементов сохраняется после перезагрузки:
await $('#checkbox').click();
await browser.refresh();
const isChecked = await $('#checkbox').isSelected();
expect(isChecked).toBe(true);История многостраничных приложений Эмуляция сложного перехода:
await browser.url('/step1');
await browser.url('/step2');
await browser.url('/step3');
await browser.back();
expect(await browser.getUrl()).toContain('/step2');
await browser.back();
expect(await browser.getUrl()).toContain('/step1');browser.url() для
перехода на новые страницы, а не execute() с
window.location, так как первый метод корректно
обрабатывает асинхронность и ожидания.waitUntil,
waitForExist) для стабильных тестов.execute()
с window.history.go(n) для точного управления перемещением
по истории.Методы навигации и работы с историей в WebdriverIO позволяют эмулировать поведение пользователя при перемещении между страницами, обеспечивая точность и стабильность тестов многостраничных веб-приложений. Правильное сочетание встроенных методов и JavaScript-исполнения обеспечивает гибкость в управлении историей браузера.