WebdriverIO предоставляет мощные возможности для управления браузерами и распределённого запуска тестов. Одним из ключевых инструментов для этого является Selenium Grid или совместимые решения, которые позволяют запускать тесты параллельно на нескольких узлах и браузерах, что критически важно для масштабируемого тестирования.
Selenium Grid состоит из двух компонентов:
Hub управляет очередью тестов, следит за состоянием узлов и распределяет нагрузку. Node регистрируется на Hub, сообщает о своих возможностях и выполняет задачи по мере поступления.
Для подключения WebdriverIO к Grid необходимо правильно
сконфигурировать wdio.conf.js. Ключевые параметры:
export const config = {
runner: 'local',
// Указываем адрес Hub
hostname: 'localhost',
port: 4444,
path: '/wd/hub',
capabilities: [
{
browserName: 'chrome',
maxInstances: 5,
'goog:chromeOptions': {
args: ['--headless', '--disable-gpu']
}
},
{
browserName: 'firefox',
maxInstances: 5,
'moz:firefoxOptions': {
args: ['-headless']
}
}
],
logLevel: 'info',
framework: 'mocha',
reporters: ['spec']
};
Ключевые моменты настройки:
hostname, port, path –
параметры подключения к Hub.capabilities – массив объектов с конфигурациями
браузеров, которые могут выполняться параллельно.maxInstances – количество одновременных сессий на один
узел для конкретного браузера.chromeOptions,
firefoxOptions) позволяют запускать браузеры в headless
режиме, указывать пользовательские аргументы и профили.WebdriverIO интегрируется с Grid через механизм multi-remote или стандартные capabilities. Для параллельного запуска тестов достаточно задать:
maxInstances: 5
Это позволяет одновременно выполнять до пяти тестов на одном браузере, а Grid автоматически распределяет задачи по доступным узлам. Если количество тестов превышает число доступных узлов, тесты становятся в очередь.
Node может быть настроен на запуск определённых версий браузеров, операционных систем и размеров окон. Пример запуска узла с Docker:
docker run -d -p 5555:5555 --name selenium-node-chrome selenium/node-chrome:latest
Node регистрируется на Hub:
docker run -d -p 4444:4444 --name selenium-hub selenium/hub:latest
docker network connect bridge selenium-node-chrome
Можно настроить узлы с различными параметрами:
Grid создаёт отдельные сессии для каждого теста, поэтому важно корректно работать с объектами браузера:
const browserA = await remote({
capabilities: { browserName: 'chrome' }
});
const browserB = await remote({
capabilities: { browserName: 'firefox' }
});
// Пример параллельного выполнения действий
await Promise.all([
browserA.url('https://example.com'),
browserB.url('https://example.org')
]);
Использование Promise.all ускоряет выполнение и
эффективно распределяет нагрузку между узлами Grid.
Grid предоставляет интерфейс мониторинга через веб-консоль Hub. Там можно видеть:
WebdriverIO позволяет интегрировать логирование через встроенные
репортеры (spec, allure) для подробного
анализа прохождения тестов на Grid.
Для масштабных проектов рекомендуется:
maxInstances на узлах, чтобы избежать
перегрузки.beforeSession и afterSession
хуки для подготовки и очистки окружения.export const config = {
runner: 'local',
hostname: 'localhost',
port: 4444,
path: '/wd/hub',
specs: ['./tests/**/*.spec.js'],
maxInstances: 10,
capabilities: [
{
browserName: 'chrome',
maxInstances: 5,
'goog:chromeOptions': { args: ['--headless', '--disable-gpu'] }
},
{
browserName: 'firefox',
maxInstances: 5,
'moz:firefoxOptions': { args: ['-headless'] }
}
],
logLevel: 'info',
framework: 'mocha',
reporters: ['spec', ['allure', { outputDir: 'allure-results' }]],
mochaOpts: { timeout: 60000 }
};
Такая конфигурация обеспечивает:
Grid в связке с WebdriverIO является мощным инструментом для организации параллельного тестирования, эффективного использования ресурсов и покрытия широкого спектра браузеров и платформ без потери контроля над выполнением.