WebDriver в Protractor является центральным компонентом для взаимодействия с браузером и выполнения тестов. Одной из ключевых возможностей WebDriver является ведение и анализ логов, которые помогают выявлять ошибки, нестабильное поведение и проблемы производительности приложений.
WebDriver поддерживает несколько категорий логов, каждая из которых предоставляет определённый вид информации:
Для Chrome и Firefox наиболее часто используются категории BROWSER и DRIVER, так как они предоставляют детальную информацию о поведении тестируемого приложения и его окружении.
Для включения логов в 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 ошибки в браузере');
Это позволяет автоматически фейлить тест при наличии критических ошибок на странице, а не только при падении элементов или сценариев.
get, поэтому важно делать это после выполнения
действий, которые могут вызвать сообщения.ALL) может замедлять тесты, особенно при большом
количестве сообщений, поэтому фильтрация по уровню и категориям является
оптимальной практикой.Анализ логов WebDriver в Protractor позволяет выявлять ошибки на уровне браузера и драйвера, повышать стабильность тестов и улучшать качество веб-приложений. Системный сбор, фильтрация и интеграция логов в тестовые отчёты являются ключевыми аспектами профессионального тестирования на JavaScript с использованием Protractor.