Логирование событий в WebdriverIO является ключевым инструментом для диагностики тестов, анализа ошибок и мониторинга процессов автоматизированного тестирования. Эффективное логирование помогает выявлять проблемы на ранних этапах, а также сохранять прозрачность выполнения тестов.
WebdriverIO использует встроенную систему логирования, основанную на
пакете @wdio/logger. Каждый модуль или компонент может
иметь собственный логгер с настраиваемым уровнем логирования. Уровни
логирования включают:
Пример создания логгера:
const logger = require('@wdio/logger').default;
const log = logger('example');
log.info('Тест начал выполнение');
log.warn('Потенциальная проблема обнаружена');
log.error('Ошибка выполнения теста');
WebdriverIO позволяет отслеживать все действия браузера через хуки,
такие как beforeCommand, afterCommand,
onError и beforeTest. Использование хуков
обеспечивает централизованное логирование всех взаимодействий с
браузером.
Пример логирования команд:
exports.config = {
beforeCommand: function (commandName, args) {
console.log(`Выполняется команда: ${commandName} с аргументами: ${JSON.stringify(args)}`);
},
afterCommand: function (commandName, args, result, error) {
if (error) {
console.error(`Ошибка в команде ${commandName}: ${error.message}`);
} else {
console.log(`Команда ${commandName} выполнена успешно, результат: ${JSON.stringify(result)}`);
}
}
};
Хуки позволяют отслеживать не только успехи или ошибки команд, но и промежуточные состояния элементов, параметры навигации и вводимые данные.
WebdriverIO поддерживает интеграцию с внешними системами логирования, такими как Winston, Log4js и облачные сервисы вроде ELK Stack или Datadog. Это позволяет сохранять логи в централизованной системе и выполнять последующий анализ.
Пример интеграции с Winston:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'test.log' }),
new winston.transports.Console()
]
});
exports.config = {
beforeTest: function (test) {
logger.info(`Начало теста: ${test.title}`);
},
afterTest: function (test, context, { error }) {
if (error) {
logger.error(`Тест ${test.title} завершился с ошибкой: ${error.message}`);
} else {
logger.info(`Тест ${test.title} успешно завершен`);
}
}
};
WebdriverIO поддерживает создание отчетов через репортеры, например Allure, Spec, JUnit. Логи можно включать в отчеты, что позволяет видеть подробную хронологию действий теста прямо в отчете.
Пример использования Allure для логирования шагов теста:
const { addStep } = require('@wdio/allure-reporter').default;
it('должен открыть страницу и проверить заголовок', async () => {
addStep('Открытие страницы');
await browser.url('https://example.com');
addStep('Проверка заголовка страницы');
const title = await browser.getTitle();
if (title !== 'Example Domain') {
throw new Error(`Ожидался заголовок "Example Domain", найден "${title}"`);
}
});
Каждый шаг фиксируется в отчете, что облегчает анализ и поиск причины ошибки.
click, setValue,
url позволяют понять, на каком шаге теста возникает
ошибка.onError обеспечивает
возможность мгновенно получать стек трейс.Логирование в WebdriverIO — это не просто вывод сообщений в консоль. Это мощный инструмент для построения прозрачных, поддерживаемых и масштабируемых тестовых решений. Оно позволяет отслеживать все действия теста, сохранять историю выполнения и интегрироваться с современными системами мониторинга и отчетности.