Protractor предоставляет мощные возможности для работы с логами браузера, что особенно важно при автоматизации тестирования веб-приложений. Логи помогают выявлять ошибки JavaScript на клиентской стороне, отслеживать сетевые запросы и получать диагностическую информацию о работе браузера.
Protractor использует WebDriver для взаимодействия с браузером. Для
доступа к логам необходимо настроить capabilities в
конфигурационном файле protractor.conf.js. Основной
параметр, влияющий на логирование, — loggingPrefs.
Пример:
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--disable-infobars']
},
loggingPrefs: {
browser: 'ALL',
driver: 'INFO',
performance: 'ALL'
}
}
Значения могут быть OFF, SEVERE,
WARNING, INFO, DEBUG,
ALL.
Для получения логов используется метод
browser.manage().logs().get(). Пример получения ошибок
Jav * aScript:
it('должен выводить ошибки браузера', async () => {
await browser.get('https://example.com');
const logs = await browser.manage().logs().get('browser');
logs.forEach(entry => {
if (entry.level.name === 'SEVERE') {
console.error(`[JS ERROR] ${entry.message}`);
}
});
});
Особенности:
LogEntry,
содержащих level, message и
timestamp.level — уровень события (SEVERE,
WARNING, INFO и т.д.).message — текст сообщения, который может содержать
стек-трейс ошибок.timestamp — время события в миллисекундах с начала
эпохи UNIX.Для удобного анализа логов полезно фильтровать их по уровню или типу сообщения. Например, вывод только предупреждений:
const warnings = logs.filter(entry => entry.level.name === 'WARNING');
warnings.forEach(entry => console.warn(`[JS WARNING] ${entry.message}`));
Можно реализовать интеграцию с системами отчетности, записывая лог-сообщения в отдельные файлы:
const fs = require('fs');
fs.writeFileSync('browser_logs.json', JSON.stringify(logs, null, 2));
Такой подход позволяет сохранять все события браузера для последующего анализа.
ChromeDriver поддерживает логирование сети через
performance:
const perfLogs = await browser.manage().logs().get('performance');
perfLogs.forEach(entry => {
const message = JSON.parse(entry.message).message;
console.log(message.method, message.params);
});
method — тип события
(Network.requestWillBeSent,
Network.responseReceived и др.).params — объект с подробной информацией о запросе или
ответе.Использование производительных логов особенно полезно для:
Для интеграции с фреймворками вроде Jasmine или Mocha можно добавлять
проверку логов в afterEach:
afterEach(async () => {
const logs = await browser.manage().logs().get('browser');
const errors = logs.filter(entry => entry.level.name === 'SEVERE');
if (errors.length > 0) {
console.error('Обнаружены ошибки JS:', errors.map(e => e.message).join('\n'));
}
});
Такой подход позволяет автоматически фиксировать ошибки JavaScript после каждого теста, что повышает надежность тестовой среды.
loggingPrefs, чтобы уменьшить объем данных.browser,
driver, performance, детализированные
логи.performance реализовано частично.Эти различия необходимо учитывать при разработке кросс-браузерных тестов, чтобы обработка логов была корректной для всех сред.
loggingPrefs для настройки уровней
логов.browser.manage().logs().get() после
ключевых действий.Эффективное управление логами браузера повышает качество автоматизированного тестирования, помогает быстро выявлять ошибки и улучшает понимание поведения веб-приложения в различных условиях.