Анализ логов WebDriver

WebDriver в Protractor является центральным компонентом для взаимодействия с браузером и выполнения тестов. Одной из ключевых возможностей WebDriver является ведение и анализ логов, которые помогают выявлять ошибки, нестабильное поведение и проблемы производительности приложений.

Типы логов WebDriver

WebDriver поддерживает несколько категорий логов, каждая из которых предоставляет определённый вид информации:

  • BROWSER — логи браузера, включающие сообщения JavaScript, ошибки и предупреждения на стороне клиента.
  • CLIENT — логи действий клиента WebDriver, полезны для отладки отправки команд.
  • DRIVER — логи взаимодействия с драйвером браузера (например, chromedriver).
  • SERVER — логи сервера WebDriver, отражающие процесс обработки запросов.
  • PROFILER — данные о производительности, включая время выполнения отдельных операций.

Для Chrome и Firefox наиболее часто используются категории BROWSER и DRIVER, так как они предоставляют детальную информацию о поведении тестируемого приложения и его окружении.

Настройка логирования в Protractor

Для включения логов в Protractor необходимо задать конфигурацию в protractor.conf.js. Пример настройки логирования для Chrome:

capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--disable-infobars'],
        prefs: {
            'profile.default_content_settings.popups': 0
        }
    },
    loggingPrefs: {
        browser: 'ALL',   // Включение логов браузера
        driver: 'ALL'     // Включение логов драйвера
    }
}

Ключевой момент: уровень логов можно указать через loggingPrefs, где значения могут быть OFF, SEVERE, WARNING, INFO, DEBUG, ALL. Для отладки сложных сценариев рекомендуется использовать ALL.

Получение логов во время выполнения теста

Protractor предоставляет метод browser.manage().logs().get(logType), который возвращает промис с массивом объектов логов. Каждый объект содержит следующие поля:

  • level — уровень сообщения (SEVERE, WARNING, INFO и др.)
  • message — текст сообщения
  • timestamp — время записи лога

Пример получения логов браузера:

it('должен выводить логи браузера', async () => {
    await browser.get('https://example.com');

    const logs = await browser.manage().logs().get('browser');
    logs.forEach(log => {
        console.log(`[${log.level.name}] ${log.message}`);
    });
});

Фильтрация и анализ логов

Для упрощения анализа рекомендуется фильтровать логи по уровню или содержимому. Например, можно получить только ошибки SEVERE:

const errorLogs = logs.filter(log => log.level.name === 'SEVERE');
errorLogs.forEach(log => console.log(log.message));

Можно также искать конкретные ключевые слова, указывающие на сбои или недоработки в приложении:

const jsErrors = logs.filter(log => log.message.includes('Uncaught'));
jsErrors.forEach(log => console.log(log.timestamp, log.message));

Автоматизация проверки логов

Для интеграции логов в CI/CD-процессы и тестовые отчёты можно добавлять проверки внутри тестов:

expect(jsErrors.length).toBe(0, 'Обнаружены JavaScript ошибки в браузере');

Это позволяет автоматически фейлить тест при наличии критических ошибок на странице, а не только при падении элементов или сценариев.

Ограничения и особенности

  1. Поддержка браузеров: Не все браузеры одинаково хорошо поддерживают логирование. Chrome и Firefox предоставляют наиболее полные данные, в то время как Edge или Safari могут иметь ограниченные возможности.
  2. Асинхронность: Логи собираются в момент вызова метода get, поэтому важно делать это после выполнения действий, которые могут вызвать сообщения.
  3. Производительность: Постоянное получение всех логов (ALL) может замедлять тесты, особенно при большом количестве сообщений, поэтому фильтрация по уровню и категориям является оптимальной практикой.

Практические советы

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

Вывод

Анализ логов WebDriver в Protractor позволяет выявлять ошибки на уровне браузера и драйвера, повышать стабильность тестов и улучшать качество веб-приложений. Системный сбор, фильтрация и интеграция логов в тестовые отчёты являются ключевыми аспектами профессионального тестирования на JavaScript с использованием Protractor.