Сервисы в WebdriverIO представляют собой дополнительные модули, которые расширяют функциональность фреймворка и упрощают интеграцию с внешними инструментами. Они не являются обязательными, но позволяют автоматизировать рутинные задачи, управлять средой тестирования и интегрироваться с облачными платформами для запуска тестов.
Сервисы работают на уровне конфигурации, подключаясь
через файл wdio.conf.js. Они могут выполнять следующие
функции:
Сервис подключается через секцию services в
конфигурационном файле:
exports.config = {
runner: 'local',
framework: 'mocha',
services: ['selenium-standalone', 'devtools'],
seleniumLogs: './logs',
capabilities: [{
maxInstances: 1,
browserName: 'chrome'
}]
};
selenium-standalone — локальный запуск Selenium Server
для работы с браузерами.devtools — интеграция с Chrome DevTools Protocol,
которая позволяет управлять браузером без использования Selenium.Сервисы могут быть встроенными (официальными WebdriverIO) или сторонними, устанавливаемыми через npm.
Каждый сервис может принимать свои настройки,
передаваемые в массиве services в виде объекта:
services: [
['selenium-standalone', {
logPath: './logs',
installArgs: {
drivers: {
chrome: { version: 'latest' },
firefox: { version: 'latest' }
}
},
args: {
drivers: {
chrome: { version: 'latest' }
}
}
}]
]
logPath — путь для сохранения логов сервера.installArgs и args — параметры установки и
запуска драйверов.Такой подход позволяет гибко настраивать среду и гарантировать, что тесты будут запускаться в предсказуемых условиях.
Selenium Standalone Позволяет запускать локальный Selenium Server без необходимости устанавливать его вручную. Поддерживает Chrome, Firefox и Edge.
DevTools Использует Chrome DevTools Protocol для управления браузером напрямую, обходя необходимость в WebDriver. Подходит для headless-тестирования и производительных сценариев.
Appium Позволяет автоматизировать мобильные приложения (iOS, Android) через Appium Server. Настраивается аналогично Selenium, с указанием платформы и версии устройства.
BrowserStack и Sauce Labs Облачные сервисы, обеспечивающие параллельное тестирование на множестве браузеров и устройств. Настраиваются с указанием логина, пароля и необходимых capabilities.
WebdriverIO позволяет создавать кастомные сервисы. Основная структура включает методы, вызываемые в жизненном цикле тестирования:
onPrepare(config, capabilities) — выполняется перед
стартом всех тестов.beforeSession(config, capabilities, specs) — до
инициализации сессии браузера.before(caps, specs) — перед запуском тестов в
конкретной сессии.afterTest(test, context, { error, result, duration, passed })
— после выполнения каждого теста.onComplete(exitCode, config, capabilities, results) —
после завершения всех тестов.Пример минимального кастомного сервиса:
class CustomService {
onPrepare(config, capabilities) {
console.log('Подготовка к тестированию');
}
beforeTest(test) {
console.log(`Запуск теста: ${test.title}`);
}
afterTest(test, context, { passed }) {
console.log(`Результат теста: ${passed ? 'успешно' : 'неудачно'}`);
}
}
module.exports = CustomService;
Для подключения кастомного сервиса его достаточно указать в конфигурации:
services: [
[CustomService, { customOption: true }]
]
Сервисы тесно связаны с hook’ами WebdriverIO, позволяя расширять стандартные этапы тестирования. Это обеспечивает:
selenium-standalone или devtools.Сервисы в WebdriverIO обеспечивают масштабируемость тестовой инфраструктуры, минимизируют ручную настройку и упрощают интеграцию с внешними инструментами, позволяя сосредоточиться на написании качественных тестов.