Установка и запуск Selenium Grid

Selenium Grid — это инструмент для параллельного запуска автоматизированных тестов на разных браузерах и платформах. Он позволяет значительно ускорить выполнение тестов за счет распределения нагрузки между несколькими узлами. В связке с WebdriverIO Grid используется для управления удаленными WebDriver-сессиями.


Установка Selenium Grid

Selenium Grid поставляется в составе Selenium Server в виде JAR-файла. Для работы потребуется Java (версии 8 и выше).

  1. Установка Java Проверка установленной версии Java:

    java -version

    Если Java не установлена, ее нужно скачать с официального сайта OpenJDK или Oracle и установить в систему.

  2. Скачивание Selenium Server Актуальная версия Selenium Server доступна на официальной странице Selenium: https://www.selenium.dev/downloads/ Обычно скачивается файл вида selenium-server-<version>.jar.

  3. Настройка структуры Grid Grid состоит из Hub (центрального узла) и Nodes (исполняющих узлов). Hub управляет распределением тестов на Nodes. Nodes регистрируются на Hub, указывая поддерживаемые браузеры, версии и платформы.


Запуск Hub

Для запуска центрального узла Selenium Grid используется команда:

java -jar selenium-server-<version>.jar hub

При успешном запуске в консоли появится сообщение о том, что Hub слушает соединения на порту 4444 (по умолчанию). Через веб-интерфейс Hub доступен по адресу:

http://localhost:4444/ui

В интерфейсе отображается список подключенных Nodes и информация о состоянии Grid.


Настройка и запуск Node

Node — это сервер, на котором будут выполняться тесты. Для запуска Node необходимо указать URL Hub и параметры поддерживаемых браузеров. Пример команды:

java -jar selenium-server-<version>.jar node --hub http://localhost:4444

Можно дополнительно указать конфигурационный файл JSON с параметрами:

{
  "capabilities": [
    {
      "browserName": "chrome",
      "maxInstances": 5,
      "platformName": "ANY"
    },
    {
      "browserName": "firefox",
      "maxInstances": 3,
      "platformName": "ANY"
    }
  ],
  "nodeStatusCheckTimeout": 5000,
  "port": 5555
}

Запуск Node с конфигурационным файлом:

java -jar selenium-server-<version>.jar node --config node-config.json

После успешной регистрации Node появится в интерфейсе Hub, и он станет доступен для выполнения тестов.


Интеграция с WebdriverIO

WebdriverIO позволяет подключаться к Selenium Grid, используя удаленный WebDriver. Для этого в конфигурационном файле wdio.conf.js указываются следующие параметры:

exports.config = {
    hostname: 'localhost',
    port: 4444,
    path: '/wd/hub',
    capabilities: [{
        browserName: 'chrome',
        maxInstances: 5
    }],
    logLevel: 'info',
    framework: 'mocha',
    specs: ['./test/specs/**/*.js'],
};
  • hostname — адрес Hub.
  • port — порт, на котором запущен Hub (по умолчанию 4444).
  • path — путь к WebDriver API (/wd/hub для Selenium 4).

После запуска тестов WebdriverIO автоматически распределяет сессии по доступным Nodes.


Параллельное выполнение тестов

Grid особенно полезен при большом количестве тестов. WebdriverIO поддерживает параллельное выполнение через maxInstances:

capabilities: [{
    browserName: 'chrome',
    maxInstances: 3
}]

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


Советы по оптимизации

  • Использование Docker Для упрощения развертывания можно использовать официальные Docker-образы Selenium Grid. Это позволяет быстро запускать Hub и Nodes на разных контейнерах без ручной установки браузеров.

  • Мониторинг состояния Nodes Регулярно проверять веб-интерфейс Hub, чтобы убедиться, что все Nodes доступны и корректно регистрируются.

  • Согласование версий браузеров и драйверов Несовпадение версий ChromeDriver/GeckoDriver с браузером может привести к ошибкам запуска тестов.

  • Логи и диагностика Использовать флаги --log при запуске Hub и Node для сохранения детализированных логов, что облегчает отладку проблем с подключением.


Проверка работоспособности

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

describe('Selenium Grid Test', () => {
    it('should open Google', async () => {
        await browser.url('https://www.google.com');
        const title = await browser.getTitle();
        console.log(title);
    });
});

Если тест запускается на Grid и выводит корректный заголовок страницы, конфигурация полностью рабочая.


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