Встроенное логирование Protractor

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


Основные возможности логирования

  1. Консольные логи браузера Protractor позволяет получать сообщения из консоли браузера через объект browser.manage().logs(). Логи могут содержать ошибки JavaScript, предупреждения и информационные сообщения.

    browser.manage().logs().get('browser').then(function(browserLogs) {
        browserLogs.forEach(function(log){
            console.log(log.level.name + ': ' + log.message);
        });
    });

    Ключевой момент: доступные уровни логов — SEVERE, WARNING, INFO, DEBUG. Чаще всего в автоматизированных тестах фильтруют ошибки уровня SEVERE для выявления критических проблем.

  2. Логирование действий Protractor Protractor может логировать шаги теста и действия с элементами через встроенный объект browser.logger или через кастомные функции. Простейший способ — использование console.log, однако более структурное логирование достигается с помощью сторонних библиотек вроде winston или log4js.

    console.log('Клик по кнопке Login выполнен');

    Для более профессионального подхода используют уровень логирования (info, warn, error) и форматируют сообщения с временными метками и контекстом.

  3. Логирование HTTP-запросов Protractor не имеет прямого встроенного механизма для логирования сетевых запросов, но можно использовать возможности браузера и WebDriver для доступа к сетевым логам через performance logs:

    const perfLogs = browser.manage().logs().get('performance');
    perfLogs.then((logs) => {
        logs.forEach(log => console.log(log.message));
    });

    Это позволяет отслеживать запросы AJAX, ответы серверов и ошибки API во время выполнения тестов.


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

  1. Конфигурация уровня логов WebDriver В файле protractor.conf.js можно указать уровни логирования для драйвера:

    capabilities: {
        browserName: 'chrome',
        loggingPrefs: {
            browser: 'ALL',
            driver: 'INFO'
        }
    }

    Это задает сбор всех сообщений из браузера и определенный уровень логов для WebDriver. Настройка loggingPrefs критична для обнаружения скрытых проблем на стороне клиента.

  2. Использование Jasmine Reporter Для структурированного логирования результатов тестов часто используют Jasmine Reporter. Он позволяет сохранять логи тестов в файлы, экспортировать их в HTML и интегрировать с CI/CD системами.

    const JasmineReporter = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new JasmineReporter.JUnitXmlReporter({
        savePath: 'testresults',
        consolidateAll: false
    }));

    Этот подход упрощает диагностику проблем при прогоне большого набора тестов и делает результаты легко читаемыми.


Практические рекомендации

  • Фильтрация критических ошибок: при анализе логов рекомендуется сразу отделять сообщения уровня SEVERE от обычной информации и предупреждений.

  • Структурированное логирование: использование внешних библиотек (winston, log4js) помогает централизовать логи и добавлять уровни детализации.

  • Логирование ожиданий: включение логов при использовании ExpectedConditions позволяет отслеживать задержки и таймауты.

    const EC = protractor.ExpectedConditions;
    browser.wait(EC.visibilityOf(element(by.id('login'))), 5000)
        .then(() => console.log('Элемент видим'))
        .catch(() => console.error('Элемент не появился в течении 5 секунд'));
  • Сохранение логов для CI/CD: автоматическая запись логов в файл позволяет анализировать тесты после завершения сборки или в случае падения на сервере сборки.


Особенности работы с разными браузерами

  • Chrome: поддерживает детальные логи консоли и сети через loggingPrefs.
  • Firefox: ограничения в доступе к сетевым логам, часто требуется использование marionette и дополнительных настроек.
  • Edge / IE: поддержка консольных логов ограничена, рекомендуется использовать кастомное логирование в тестах.

Интеграция с отладкой

Protractor поддерживает режим отладки через browser.debugger() и protractor --debug. Совмещение встроенного логирования с пошаговой отладкой позволяет выявлять проблемы на уровне DOM, событий и запросов, а не только по результатам теста.

browser.debugger();
element(by.id('submit')).click();

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