Подключение к удалённому Grid серверу

WebdriverIO поддерживает интеграцию с удалёнными Selenium Grid или облачными сервисами, такими как BrowserStack, Sauce Labs, LambdaTest и другими. Использование удалённого Grid сервера позволяет запускать тесты параллельно на множестве платформ и браузеров, обеспечивая масштабируемость и ускорение тестирования.


Настройка wdio.conf.js для удалённого Grid

Для подключения к удалённому Selenium Grid ключевыми параметрами являются:

  • hostname — адрес сервера Grid.
  • port — порт, на котором доступен Grid (по умолчанию 4444 для Selenium Grid 3).
  • path — путь к эндпоинту WebDriver (обычно /wd/hub).
  • protocol — протокол передачи данных (http или https).

Пример базовой конфигурации:

exports.config = {
    hostname: 'grid.example.com',
    port: 4444,
    path: '/wd/hub',
    protocol: 'http',
    capabilities: [{
        browserName: 'chrome',
        browserVersion: 'latest',
        'goog:chromeOptions': {
            args: ['--headless', '--disable-gpu']
        }
    }],
    logLevel: 'info',
    framework: 'mocha',
    reporters: ['spec'],
};

Ключевой момент: в capabilities необходимо указывать браузеры и их версии, которые поддерживает удалённый Grid. Для некоторых облачных сервисов добавляются специфические опции, например bstack:options для BrowserStack.


Использование облачных провайдеров

Для облачных Grid-сервисов настройки могут включать авторизацию. Например, для BrowserStack:

exports.config = {
    user: process.env.BROWSERSTACK_USER,
    key: process.env.BROWSERSTACK_KEY,
    hostname: 'hub.browserstack.com',
    port: 443,
    protocol: 'https',
    path: '/wd/hub',
    capabilities: [{
        browserName: 'firefox',
        browserVersion: 'latest',
        'bstack:options': {
            os: 'Windows',
            osVersion: '11',
            seleniumVersion: '4.8.0',
            local: 'false'
        }
    }],
    logLevel: 'info',
    framework: 'mocha',
    reporters: ['spec'],
};

Особенности:

  • Переменные окружения BROWSERSTACK_USER и BROWSERSTACK_KEY безопаснее хранить вне кода.
  • Опция bstack:options.local позволяет запускать тесты на локальных ресурсах через BrowserStack Local.

Для Sauce Labs и LambdaTest структура аналогична, но с другими именами опций.


Конфигурация параллельного запуска

WebdriverIO позволяет запускать несколько сессий одновременно. Для удалённого Grid это особенно важно, чтобы ускорить тестирование на разных браузерах:

exports.config = {
    maxInstances: 5,
    capabilities: [
        {
            browserName: 'chrome',
            maxInstances: 3
        },
        {
            browserName: 'firefox',
            maxInstances: 2
        }
    ],
};

Пояснение:

  • maxInstances на уровне конфигурации ограничивает количество одновременных сессий для всего тестового запуска.
  • Внутри каждого блока capabilities можно задавать индивидуальное количество параллельных экземпляров браузера.

Работа с нестандартными портами и сертификатами

Иногда Grid доступен через нестандартный порт или защищён HTTPS-сертификат. WebdriverIO поддерживает такие сценарии:

exports.config = {
    protocol: 'https',
    hostname: 'secure-grid.example.com',
    port: 8443,
    path: '/wd/hub',
    capabilities: [{
        browserName: 'chrome',
        acceptInsecureCerts: true
    }],
};

Важно: acceptInsecureCerts: true позволяет работать с самоподписанными сертификатами на тестовом Grid.


Диагностика подключения

Проверка работы с Grid включает несколько шагов:

  1. Проверка доступности сервера: curl http://grid.example.com:4444/wd/hub/status.
  2. Логи WebdriverIO: logLevel: 'debug' помогает видеть отправляемые команды и ответы сервера.
  3. Удостоверение, что версии браузеров и драйверов совпадают с доступными на Grid.

Проблемы подключения часто связаны с неверным path, портом или отсутствием поддержки нужного браузера на удалённом Grid.


Особенности использования в CI/CD

При интеграции в CI/CD важно учитывать:

  • Авторизация и безопасное хранение ключей доступа.
  • Параллельное распределение тестов с помощью maxInstances и capabilities.
  • Таймауты: удалённые сессии могут быть медленнее, поэтому разумно увеличивать connectionRetryTimeout и waitforTimeout.

Пример:

exports.config = {
    connectionRetryTimeout: 120000,
    waitforTimeout: 15000,
    connectionRetryCount: 3,
};

Эти настройки повышают устойчивость тестов к временным задержкам и сбоям сети.


Поддержка современных протоколов

Selenium Grid 4 использует W3C WebDriver протокол по умолчанию. WebdriverIO полностью совместим с этим протоколом, что гарантирует корректную работу команд для всех браузеров, включая новые версии Chrome, Firefox и Edge.

Для передачи специфичных опций браузера используется формат W3C capabilities с именованными объектами (goog:chromeOptions, moz:firefoxOptions), что является стандартом для современных Grid-серверов.


Подключение к удалённому Grid серверу обеспечивает гибкость тестирования, масштабируемость и параллельное выполнение тестов, при этом ключевыми аспектами остаются правильная конфигурация wdio.conf.js, корректные capabilities и учет специфики используемого Grid или облачного провайдера.