Эффективное логирование тестов является ключевым элементом для поддержки, отладки и анализа автоматизированных сценариев. Playwright предоставляет базовые возможности для отслеживания действий, однако интеграция с полноценными logging библиотеками позволяет создавать структурированные, настраиваемые и легко анализируемые логи.
Наиболее популярные библиотеки для логирования в JavaScript —
winston и pino. Они обеспечивают поддержку
различных уровней логирования (info, warn,
error, debug), форматирование сообщений, вывод
в файлы и потоковую передачу в консоль.
Пример настройки winston:
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`)
),
transports: [
new transports.Console(),
new transports.File({ filename: 'test-execution.log' })
]
});
module.exports = logger;
Ключевые моменты настройки:
level — минимальный уровень логирования, который будет
выводиться.format — комбинирует метку времени и формат строки для
читаемости.transports — определяет, куда будут направляться логи:
консоль, файлы или внешние сервисы.Playwright предоставляет события и методы для отслеживания навигации, запросов, ошибок и действий пользователя. Интеграция с logging библиотекой позволяет фиксировать эти события с настраиваемым уровнем детализации.
Пример логирования навигации и кликов:
const { chromium } = require('playwright');
const logger = require('./logger');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
page.on('request', request => {
logger.info(`Запрос: ${request.method()} ${request.url()}`);
});
page.on('response', response => {
logger.info(`Ответ: ${response.status()} ${response.url()}`);
});
await page.goto('https://example.com');
logger.info('Страница загружена');
await page.click('text=More information');
logger.info('Клик по ссылке "More information" выполнен');
await browser.close();
})();
Особенности:
request и response
позволяет отслеживать сетевую активность.goto, click,
fill) помогают отследить ход теста.Библиотеки вроде winston и pino
поддерживают разные уровни логов:
error — критические ошибки.warn — предупреждения.info — общая информация о выполнении теста.debug — детальные сообщения для отладки.Пример условного логирования действий в зависимости от уровня:
if (process.env.LOG_LEVEL === 'debug') {
logger.debug(`Элемент найден: ${await page.locator('#submit').count()} экземпляров`);
} else {
logger.info('Элемент #submit проверен');
}
Для интеграции с аналитикой и внешними системами полезно использовать структурированные форматы, например JSON. Это упрощает парсинг логов и построение отчетов.
Пример конфигурации winston для JSON:
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp(),
format.json()
),
transports: [
new transports.File({ filename: 'structured-log.json' })
]
});
Логи в таком формате можно отправлять в системы мониторинга, такие как ELK Stack или Grafana Loki.
Playwright часто используется вместе с Jest,
Mocha или Playwright Test Runner. Логирование
можно интегрировать на уровне хуков:
const { test } = require('@playwright/test');
const logger = require('./logger');
test.beforeEach(async ({ page }) => {
logger.info(`Начало теста: ${test.info().title}`);
});
test.afterEach(async ({ page }) => {
logger.info(`Окончание теста: ${test.info().title}`);
});
test('Пример теста', async ({ page }) => {
await page.goto('https://example.com');
logger.info('Открыта главная страница');
});
Преимущества подхода:
Playwright генерирует ошибки при недоступности элементов или тайм-аутах. Интеграция с logging библиотекой позволяет фиксировать полное состояние страницы при ошибках:
try {
await page.click('#non-existent');
} catch (error) {
logger.error(`Ошибка клика: ${error.message}`);
await page.screenshot({ path: 'error-screenshot.png' });
logger.info('Скриншот ошибки сохранён');
}
Ключевые моменты:
Использование logging библиотек совместно с Playwright обеспечивает прозрачность тестирования, упрощает отладку и позволяет формировать масштабируемые отчёты о выполнении автоматизированных сценариев.