WebdriverIO предоставляет мощные средства для работы с логами браузера и драйвера, что является важной частью автоматизированного тестирования. Логи помогают выявлять ошибки, анализировать производительность и отслеживать нестандартное поведение веб-приложений.
WebdriverIO поддерживает несколько категорий логов, которые можно получать через API:
Browser Logs Логи браузера содержат сообщения из консоли, предупреждения, ошибки JavaScript и информационные сообщения. Основные уровни логов:
TRACE — детальная отладочная информация.DEBUG — полезная информация для диагностики.INFO — общие информационные сообщения.WARN — предупреждения, которые могут привести к
проблемам.ERROR — критические ошибки, нарушающие работу скриптов
или страницы.Driver Logs Логи драйвера фиксируют взаимодействие WebDriver с браузером. Сюда включаются команды, отправленные драйверу, ответы, а также внутренние ошибки WebDriver. Driver logs часто используются для диагностики проблем с запуском браузера или нестабильной автоматизации.
Performance Logs Эти логи собирают данные о производительности страницы, включая время загрузки ресурсов, сетевые запросы и отклики. Особенно полезны для тестирования сложных веб-приложений с динамическим контентом.
Для получения логов необходимо настроить capabilities браузера и
уровень логирования в конфигурационном файле WebdriverIO
(wdio.conf.js):
exports.config = {
capabilities: [{
maxInstances: 1,
browserName: 'chrome',
'goog:loggingPrefs': {
browser: 'ALL', // Уровни: SEVERE, WARNING, INFO, DEBUG, ALL
driver: 'ALL',
},
}],
logLevel: 'info', // Уровень логирования WebdriverIO
};
Ключевой момент: goog:loggingPrefs позволяет указать,
какие типы логов и уровни сообщений необходимо получать.
Для извлечения логов используется метод getLogs:
const logs = await browser.getLogs('browser'); // Получение логов браузера
console.log(logs);
const driverLogs = await browser.getLogs('driver'); // Получение логов драйвера
console.log(driverLogs);
Каждый лог представлен объектом со следующими свойствами:
level — уровень сообщения (INFO,
WARN, ERROR и др.).message — текст сообщения.timestamp — время события в формате UNIX.Пример фильтрации ошибок из логов браузера:
const errorLogs = (await browser.getLogs('browser'))
.filter(log => log.level === 'SEVERE');
errorLogs.forEach(log => {
console.error(`[${log.level}] ${log.message}`);
});
Совместимость браузеров Не все браузеры поддерживают одинаковые типы логов. Chrome и Firefox предоставляют наиболее полный набор, тогда как Safari и Edge могут иметь ограничения. Для кроссбраузерного тестирования важно учитывать эти различия.
Очистка логов WebdriverIO не хранит историю
логов между сессиями. Каждый вызов getLogs возвращает
только новые записи с момента последнего запроса.
Производительность Частый вызов
getLogs может влиять на производительность теста, особенно
при больших объёмах сообщений. Рекомендуется получать логи по завершении
критических сценариев или при возникновении ошибок.
1. Отслеживание ошибок JavaScript на странице:
it('should have no JS errors', async () => {
await browser.url('https://example.com');
const jsErrors = (await browser.getLogs('browser')).filter(log => log.level === 'SEVERE');
if (jsErrors.length > 0) {
throw new Error(`Найдены JS ошибки: ${jsErrors.map(e => e.message).join('\n')}`);
}
});
2. Логирование действий драйвера для диагностики:
it('should log driver commands', async () => {
await browser.url('https://example.com');
const driverLogs = await browser.getLogs('driver');
driverLogs.forEach(log => console.log(`[DRIVER] ${log.timestamp}: ${log.message}`));
});
3. Использование логов для анализа производительности:
it('should track performance events', async () => {
const perfLogs = await browser.getLogs('performance');
perfLogs.forEach(log => console.log(`[PERF] ${log.message}`));
});
Логирование в WebdriverIO является незаменимым инструментом для диагностики, повышения стабильности тестов и анализа работы веб-приложений в разных условиях.