Для работы с WebdriverIO требуется Node.js. Инициализация проекта
начинается с создания package.json через команду
npm init -y. Далее устанавливается WebdriverIO и
необходимые зависимости:
npm install --save-dev @wdio/cli @wdio/local-runner @wdio/mocha-framework @wdio/spec-reporter
Для запуска автогенератора конфигурации используется команда:
npx wdio config
В процессе настройки выбирается тестовый фреймворк (Mocha, Jasmine
или Cucumber), тип запуска (локальный или через облачные сервисы) и
браузеры для тестирования. После генерации создаётся файл
wdio.conf.js, который служит центральной точкой настройки
сессий, репортеров и хуков.
Запуск браузера в WebdriverIO осуществляется с помощью объекта
browser. Вся работа с окном и страницей происходит через
его методы. Для создания сессии достаточно вызвать
browser.url() для перехода на нужный URL:
describe('Пример инициализации браузера', () => {
it('Открытие страницы', async () => {
await browser.url('https://example.com');
});
});
Встроенные возможности WebdriverIO позволяют управлять браузером без
прямого обращения к драйверу. Каждый метод асинхронный и возвращает
промис, поэтому используется async/await.
Размер окна
Изменение размеров окна выполняется методом
browser.setWindowSize(width, height):
await browser.setWindowSize(1280, 800);
Для получения текущих размеров используется
browser.getWindowSize():
const size = await browser.getWindowSize();
console.log(size.width, size.height);
Максимизация окна
Максимизация окна доступна через
browser.maximizeWindow():
await browser.maximizeWindow();
Метод адаптируется под текущую операционную систему и браузер, обеспечивая корректное развертывание окна на весь экран.
Минимизация окна
Для уменьшения окна используется
browser.minimizeWindow():
await browser.minimizeWindow();
Метод полезен для тестов, где важно проверить отображение элементов при ограниченных размерах экрана.
Перемещение окна
Положение окна можно задавать с помощью
browser.setWindowPosition(x, y):
await browser.setWindowPosition(100, 50);
Текущие координаты окна можно получить через
browser.getWindowPosition():
const position = await browser.getWindowPosition();
console.log(position.x, position.y);
Создание новой вкладки
WebdriverIO позволяет открывать новые вкладки с помощью команды:
await browser.newWindow('https://example.com');
Метод возвращает идентификатор окна, который можно использовать для переключения между вкладками.
Переключение между окнами
Для переключения применяется
browser.switchToWindow(windowHandle). Сначала получаем все
открытые окна:
const handles = await browser.getWindowHandles();
await browser.switchToWindow(handles[1]);
Закрытие окна
Закрыть текущее окно можно через:
await browser.closeWindow();
После закрытия рекомендуется вернуться к основной вкладке, используя
switchToWindow() с нужным handle.
Перезагрузка страницы
Метод browser.refresh() обновляет текущую страницу:
await browser.refresh();
Навигация назад и вперед
Для имитации работы кнопок браузера применяются
browser.back() и browser.forward():
await browser.back();
await browser.forward();
Эти методы помогают тестировать поведение приложения при изменении истории навигации.
Очистка cookies
Удаление всех cookie выполняется командой:
await browser.deleteAllCookies();
Для удаления конкретного cookie используется
browser.deleteCookies('cookieName').
Закрытие сессии
Завершение работы браузера через WebdriverIO выполняется
автоматически при завершении тестов. Для ручного завершения используется
browser.deleteSession().
WebdriverIO позволяет устанавливать явные ожидания через
waitUntil, чтобы дождаться изменения размеров окна или
появления нового окна:
await browser.waitUntil(
async () => (await browser.getWindowSize()).width === 1280,
{
timeout: 5000,
timeoutMsg: 'Окно не приняло ожидаемую ширину'
}
);
Использование таких ожиданий критично для стабильных тестов, особенно при асинхронной загрузке интерфейсов.
async/await для работы с методами
браузера.Эти механизмы создают основу для детального управления браузером и позволяют создавать устойчивые, предсказуемые автотесты на JavaScript с WebdriverIO.