Получение логов драйвера

WebdriverIO предоставляет мощные средства для работы с логами браузера и драйвера, что является важной частью автоматизированного тестирования. Логи помогают выявлять ошибки, анализировать производительность и отслеживать нестандартное поведение веб-приложений.


Типы логов

WebdriverIO поддерживает несколько категорий логов, которые можно получать через API:

  1. Browser Logs Логи браузера содержат сообщения из консоли, предупреждения, ошибки JavaScript и информационные сообщения. Основные уровни логов:

    • TRACE — детальная отладочная информация.
    • DEBUG — полезная информация для диагностики.
    • INFO — общие информационные сообщения.
    • WARN — предупреждения, которые могут привести к проблемам.
    • ERROR — критические ошибки, нарушающие работу скриптов или страницы.
  2. Driver Logs Логи драйвера фиксируют взаимодействие WebDriver с браузером. Сюда включаются команды, отправленные драйверу, ответы, а также внутренние ошибки WebDriver. Driver logs часто используются для диагностики проблем с запуском браузера или нестабильной автоматизации.

  3. 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}`);
});

Особенности работы с логами

  1. Совместимость браузеров Не все браузеры поддерживают одинаковые типы логов. Chrome и Firefox предоставляют наиболее полный набор, тогда как Safari и Edge могут иметь ограничения. Для кроссбраузерного тестирования важно учитывать эти различия.

  2. Очистка логов WebdriverIO не хранит историю логов между сессиями. Каждый вызов getLogs возвращает только новые записи с момента последнего запроса.

  3. Производительность Частый вызов 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}`));
});

Советы по эффективному использованию логов

  • Настраивать логирование только на нужные уровни, чтобы избежать перегрузки тестов массивом ненужных данных.
  • Использовать фильтрацию по уровню или ключевым словам для выявления критических ошибок.
  • Хранить логи в отдельные файлы или базы данных для последующего анализа, особенно при интеграции с CI/CD.
  • Сочетать логи драйвера и браузера для полной картины выполнения теста и выявления скрытых проблем.

Логирование в WebdriverIO является незаменимым инструментом для диагностики, повышения стабильности тестов и анализа работы веб-приложений в разных условиях.