Инициализация браузера и управление окном

Для работы с 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.