Трассировка ошибок — ключевой аспект автоматизированного тестирования с использованием Puppeteer. Она позволяет выявлять неполадки на ранних этапах, понимать причины сбоев и улучшать стабильность тестовых сценариев. Puppeteer предоставляет широкий набор инструментов для диагностики, логирования и анализа поведения браузера и страниц.
Puppeteer позволяет отслеживать различные события браузера, которые помогают идентифицировать проблемы:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
page.on('console', msg => console.log('CONSOLE:', msg.text()));
page.on('pageerror', err => console.error('PAGE ERROR:', err));
page.on('requestfailed', req => console.warn('REQUEST FAILED:', req.url(), req.failure().errorText));
try {
await page.goto('https://example.com');
await page.click('#nonexistent'); // вызовет ошибку
} catch (err) {
console.error('SCRIPT ERROR:', err);
} finally {
await browser.close();
}
})();
Ключевые моменты:
page.on(‘console’) — перехватывает сообщения консоли,
включая console.log, console.warn и
console.error.
page.on(‘pageerror’) — фиксирует ошибки JavaScript на
странице.
page.on(‘requestfailed’) — отслеживает неудачные сетевые
запросы, полезно при проверке загрузки ресурсов.
try/catch помогает локализовать ошибки внутри скриптов
Puppeteer.
Скриншоты и снимки DOM помогают понять, что происходило в момент ошибки:
await page.screenshot({ path: 'error_screenshot.png', fullPage: true });
const html = await page.content();
const fs = require('fs');
fs.writeFileSync('error_dump.html', html);
Особенности:
screenshot фиксирует визуальное состояние страницы.
page.content() сохраняет полный HTML, что позволяет
анализировать структуру DOM после сбоя.
Puppeteer позволяет контролировать все сетевые операции, что облегчает поиск ошибок загрузки ресурсов и API:
page.on('request', req => console.log('REQUEST:', req.url()));
page.on('response', res => console.log('RESPONSE:', res.url(), res.status()));
Важные аспекты:
request показывает каждое отправленное сетевое обращение.
response позволяет проверять статус и корректность ответа.
debug и headless-режима
Puppeteer поддерживает детальное логирование через переменную окружения:
DEBUG=puppeteer:* node script.js
Особенности:
headless: false можно визуально наблюдать за
поведением страницы.
Частой причиной ошибок является недостаток времени для загрузки элементов или ресурсов. Puppeteer позволяет настраивать тайм-ауты:
await page.goto('https://example.com', { waitUntil: 'networkidle2', timeout: 10000 });
await page.waitForSelector('#dynamicElement', { timeout: 5000 });
Ключевые моменты:
waitUntil: ‘networkidle2’ обеспечивает ожидание завершения
сетевых запросов.
waitForSelector предотвращает попытку взаимодействия с
элементами до их появления на странице.
Puppeteer предоставляет встроенный инструмент для записи трассировки действий страницы:
await page.tracing.start({ path: 'trace.json', screenshots: true });
await page.goto('https://example.com');
// действия на странице
await page.tracing.stop();
Особенности:
tracing.start и tracing.stop создают JSON-файл
с полной информацией о загрузке страницы, рендеринге и сетевых запросах.
screenshots: true позволяет видеть визуальные
шаги теста.
Можно создавать собственные обработчики, чтобы централизованно управлять логированием и уведомлениями о сбоях:
function handleError(err, context) {
console.error('ERROR IN CONTEXT:', context, err);
// можно добавить сохранение скриншота или дампа DOM
}
page.on('pageerror', err => handleError(err, 'page'));
page.on('requestfailed', req => handleError(req.failure().errorText, req.url()));
Преимущества:
В автоматизированных пайплайнах Puppeteer-скрипты часто выполняются в headless-режиме на сервере. Для трассировки ошибок рекомендуется:
headless: false при локальном отладочном запуске.
tracing) для сложных сценариев,
где визуальное состояние страницы критично.
Эти меры позволяют детально анализировать сбои и повышают надежность автоматических тестов.