Hooks в WebdriverIO позволяют управлять жизненным циклом тестов, обеспечивая выполнение определённых действий до или после запуска тестов, сценариев или отдельных шагов. Они критически важны для настройки окружения, подготовки данных, очистки после тестов и логирования. WebdriverIO предоставляет гибкую систему хуков на уровне конфигурации, что делает их мощным инструментом для построения стабильных и масштабируемых тестов.
WebdriverIO поддерживает несколько категорий хуков, каждый из которых срабатывает в определённый момент выполнения тестов:
before Выполняется один раз
до всех тестов. Обычно используется для:
before: function (capabilities, specs) {
console.log('Запуск тестового окружения');
}after Выполняется один раз
после всех тестов. Используется для:
after: function (result, capabilities, specs) {
console.log('Завершение тестов, результат:', result);
}beforeSuite Срабатывает
перед запуском каждого тестового сьюита
(describe). Позволяет:
beforeSuite: function (suite) {
console.log('Запуск сьюита:', suite.title);
}afterSuite Выполняется
после завершения сьюита, подходит для:
afterSuite: function (suite) {
console.log('Завершение сьюита:', suite.title);
}beforeTest Срабатывает
перед каждым тестом (it). Часто
используется для:
beforeTest: function (test) {
console.log('Старт теста:', test.title);
}afterTest Выполняется после
каждого теста, позволяет:
afterTest: function(test, context, { error, result, duration, passed, retries }) {
if (!passed) {
browser.saveScreenshot(`./screenshots/${test.title}.png`);
}
}beforeCommand /
afterCommand Срабатывают до и после каждой
команды WebDriver. Полезны для:
beforeCommand: function (commandName, args) {
console.log(`Команда ${commandName} запускается с аргументами: ${args}`);
},
afterCommand: function (commandName, args, result, error) {
if (error) {
console.error(`Ошибка в команде ${commandName}:`, error);
}
}onPrepare / onComplete
Эти хуки выполняются до и после всей сессии
тестирования.
onPrepare — настройка окружения, сбор зависимостей,
запуск сторонних сервисов.onComplete — генерация отчётов, выгрузка логов, очистка
ресурсов.Организация setup и teardown для стабильных тестов требует аккуратного распределения хуков:
onPrepare и завершаются в onComplete.before или beforeSuite.beforeTest и afterTest.beforeCommand и afterCommand.Пример комплексного сценария:
exports.config = {
specs: ['./tests/**/*.js'],
capabilities: [{ browserName: 'chrome' }],
before: function () {
console.log('Инициализация тестового окружения');
},
beforeSuite: function (suite) {
console.log('Подготовка сьюита:', suite.title);
},
beforeTest: function (test) {
console.log('Старт теста:', test.title);
},
afterTest: function (test, context, { passed }) {
if (!passed) {
browser.saveScreenshot(`./errorShots/${test.title}.png`);
}
},
afterSuite: function (suite) {
console.log('Очистка после сьюита:', suite.title);
},
after: function () {
console.log('Завершение всех тестов');
}
};
async/await.afterTest
повышают качество отчётов и делают баг-репорты более
информативными.WebdriverIO полностью поддерживает асинхронные хуки:
beforeTest: async function (test) {
await browser.url('/login');
await $('#username').setValue('testuser');
}
Асинхронные хуки гарантируют, что следующие шаги теста не начнутся, пока не завершится setup, что особенно важно при сложных сценариях с внешними зависимостями.
Hooks в WebdriverIO предоставляют полный контроль над жизненным циклом тестирования, делая возможным создание надёжных, повторяемых и масштабируемых автоматизированных тестов. Их правильная организация позволяет существенно снизить количество нестабильных тестов и автоматизировать рутинные процессы подготовки и очистки окружения.