Эффективное логирование и корректный вывод результатов являются ключевыми аспектами автоматизированного тестирования с использованием Protractor. Они позволяют отслеживать ход выполнения тестов, выявлять ошибки, а также формировать отчёты для анализа стабильности приложения.
Protractor, будучи надстройкой над Selenium WebDriver для Angular-приложений, не предоставляет встроенной системы логирования уровня приложения, но тесно интегрируется с Node.js, что позволяет использовать стандартные методы и сторонние библиотеки.
1. Использование console.log
Простейший способ вывести информацию о ходе теста:
it('should log page title', async () => {
const title = await browser.getTitle();
console.log('Page title is:', title);
});
2. Библиотека log4js для структурированного
логирования
log4js позволяет создавать настраиваемые логгеры,
записывать логи в файлы, настраивать уровни логирования.
const log4js = require('log4js');
log4js.configure({
appenders: { file: { type: 'file', filename: 'protractor.log' } },
categories: { default: { appenders: ['file'], level: 'info' } }
});
const logger = log4js.getLogger('default');
it('should log with log4js', async () => {
const title = await browser.getTitle();
logger.info('Current page title:', title);
});
info,
warn, error, debug.Protractor полностью использует асинхронную модель JavaScript с
async/await. Важно корректно обрабатывать промисы при
логировании:
it('should wait for element and log text', async () => {
const elem = element(by.css('.message'));
await browser.wait(protractor.ExpectedConditions.visibilityOf(elem), 5000);
const text = await elem.getText();
console.log('Message text:', text);
});
await вывод может быть некорректным, так как промис
ещё не разрешён.ExpectedConditions помогает логировать
только после гарантированного появления элемента.Файл конфигурации protractor.conf.js позволяет включать
логирование уровня WebDriver и Protractor:
exports.config = {
capabilities: {
browserName: 'chrome'
},
framework: 'jasmine',
onPrepare: () => {
browser.manage().logs().get('browser').then(logs => {
logs.forEach(log => console.log(log.message));
});
},
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 60000
}
};
browser.manage().logs().get('browser') позволяет
получить логи консоли браузера.SEVERE,
WARNING, INFO.Protractor поддерживает подключение репортеров Jasmine или Mocha для расширенного вывода результатов:
1. Jasmine Spec Reporter
const { SpecReporter } = require('jasmine-spec-reporter');
jasmine.getEnv().clearReporters();
jasmine.getEnv().addReporter(new SpecReporter({
spec: { displayStacktrace: true }
}));
spec.2. Allure Reporter
Allure позволяет создавать наглядные HTML-отчёты с логами шагов, скриншотами и вложениями:
const { AllureReporter } = require('jasmine-allure2-reporter');
jasmine.getEnv().addReporter(new AllureReporter({ resultsDir: 'allure-results' }));
allure.createStep('Проверка заголовка страницы', async () => {
const title = await browser.getTitle();
console.log('Title:', title);
})();
Protractor позволяет перехватывать ошибки выполнения тестов для детального анализа:
it('should handle errors', async () => {
try {
const nonExistent = element(by.css('.not-found'));
await nonExistent.click();
} catch (error) {
console.error('Caught error:', error.message);
}
});
console.log для больших проектов.await.info, warn, error) для
фильтрации важных сообщений.Логирование и вывод результатов в Protractor формируют основу контроля тестового процесса, позволяя не только фиксировать ошибки, но и создавать прозрачную историю тестирования для команды разработки и тестирования.