Версионирование

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(&#39;#username&#39;, &#39;testuser&#39;); await page.type(&#39;#password&#39;, &#39;123456&#39;); await page.click(&#39;#login-button&#39;); await page.waitForNavigation(); const welcomeText = await page.$eval('.welcome', el => el.textContent);

Работа с версионированием

Puppeteer активно развивается, поэтому контроль версий критичен для стабильности тестов. Изменения в API могут повлиять на существующие тестовые сценарии.

Определение версии Puppeteer:

npm list puppeteer

Важные аспекты версионирования:

  1. Совместимость с Chromium: Каждая версия Puppeteer поставляется с конкретной версией Chromium. Несовпадение версий может привести к ошибкам рендеринга или взаимодействия с элементами.

  2. Локальная фиксация версии: В package.json рекомендуется указывать точную версию, чтобы тесты на разных машинах или CI выполнялись одинаково:

"dependencies": {
  "puppeteer": "21.0.1"
}
  1. Обновления и депрецированные методы: Перед обновлением Puppeteer необходимо проверить релиз-ноуты на предмет изменений API. Некоторые методы могут быть удалены или изменены.

Пример совместимости с 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();
})();

Интеграция с CI/CD

Для стабильного тестирования важно фиксировать версию Puppeteer в CI/CD:

  • Docker: Использовать образ с нужной версией Chromium.
  • GitHub Actions / GitLab CI: Добавлять установку Puppeteer с конкретной версией в pipeline:
- name: Install dependencies
  run: npm install puppeteer@21.0.1
  • Кэширование node_modules: Позволяет избежать скачивания новых версий при каждом запуске.

Логирование и отладка

Фиксированная версия Puppeteer упрощает диагностику ошибок. Для анализа действий тестов можно использовать:

  • headless: false для визуального наблюдения.
  • slowMo для замедления операций:
const browser = await puppeteer.launch({
  headless: false,
  slowMo: 50
});
  • page.on(‘console’, msg => console.log(msg.text())) для перехвата сообщений консоли страницы.

Практика версионирования в тестах

  1. Создание стабильного окружения: Использовать .nvmrc для фиксации Node.js и фиксированную версию Puppeteer.
  2. Регулярное обновление: Раз в квартал проверять совместимость с новыми версиями Puppeteer и Chromium.
  3. Изоляция тестов: Локальные тесты и CI должны запускаться на одинаковых версиях Puppeteer, чтобы избежать расхождений.
  4. Документирование изменений: Все обновления Puppeteer фиксировать в changelog проекта, особенно если обновления затрагивают взаимодействие с DOM или API браузера.

Версионирование Puppeteer обеспечивает предсказуемость и повторяемость тестов, предотвращает неожиданные сбои при автоматизации браузера и упрощает интеграцию в процессы CI/CD. Оно становится критическим элементом любой стратегии автоматизированного тестирования веб-приложений.