Puppeteer — это библиотека для Node.js, предоставляющая высокоуровневый API для управления браузером Chrome или Chromium через протокол DevTools. Она позволяет автоматизировать действия пользователя, тестировать веб-приложения, получать скриншоты и PDF, а также анализировать производительность страниц.
Установка Puppeteer выполняется через npm:
npm install puppeteer
Подключение в проекте:
const puppeteer = require(&
После подключения можно запускать браузер и создавать новые страницы:
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Параметр headless: true запускает браузер без графического
интерфейса, что ускоряет выполнение тестов.
Основные возможности Puppeteer для тестирования
Навигация и взаимодействие с элементами:
-
page.goto(url) — переход по URL.
-
page.click(selector) — клик по элементу.
-
page.type(selector, text) — ввод текста в поле.
-
page.select(selector, value) — выбор значения в
<select>.
Получение информации со страницы:
-
page.(selector) < /code > —поискпервогоэлемента. < /li > < li > < code > page.$(selector)</code> — поиск всех
элементов.</li>
<li><code>page.evaluate(fn)</code> — выполнение
функции в контексте
страницы.</li>
</ul>
<p><strong>Пример взаимодействия:</strong></p>
<pre class="javascript"><code>await
page.type('#username', 'testuser');
await page.type('#password', '123456');
await page.click('#login-button');
await page.waitForNavigation();
const welcomeText = await page.$eval('.welcome', el =>
el.textContent);
Puppeteer активно развивается, поэтому контроль версий критичен для стабильности тестов. Изменения в API могут повлиять на существующие тестовые сценарии.
Определение версии Puppeteer:
npm list puppeteer
Важные аспекты версионирования:
Совместимость с Chromium: Каждая версия Puppeteer поставляется с конкретной версией Chromium. Несовпадение версий может привести к ошибкам рендеринга или взаимодействия с элементами.
Локальная фиксация версии: В package.json
рекомендуется указывать точную версию, чтобы тесты на разных машинах или
CI выполнялись одинаково:
"dependencies": {
"puppeteer": "21.0.1"
}
Пример совместимости с Chromium:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/specific/chrome', // фиксированная версия браузера
headless: true
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Для стабильного тестирования важно фиксировать версию Puppeteer в CI/CD:
- name: Install dependencies
run: npm install puppeteer@21.0.1
Фиксированная версия Puppeteer упрощает диагностику ошибок. Для анализа действий тестов можно использовать:
headless: false для визуального наблюдения.
slowMo для замедления операций:
const browser = await puppeteer.launch({
headless: false,
slowMo: 50
});
page.on(‘console’, msg => console.log(msg.text())) для
перехвата сообщений консоли страницы.
.nvmrc для фиксации Node.js и фиксированную версию
Puppeteer.
Версионирование Puppeteer обеспечивает предсказуемость и повторяемость тестов, предотвращает неожиданные сбои при автоматизации браузера и упрощает интеграцию в процессы CI/CD. Оно становится критическим элементом любой стратегии автоматизированного тестирования веб-приложений.