Конфигурационные файлы

В процессе автоматизации тестирования с использованием Puppeteer конфигурационные файлы играют ключевую роль. Они позволяют гибко настраивать параметры работы фреймворка, улучшая производительность и обеспечивая удобство в повторных запусках тестов.

Структура конфигурационного файла

Puppeteer не требует наличия отдельного конфигурационного файла для своей работы, однако многие пользователи предпочитают создавать такой файл, чтобы централизованно управлять настройками. Стандартная структура конфигурационного файла в проектах с Puppeteer может выглядеть следующим образом:

module.exports = {
  headless: true,
  slowMo: 50,
  args: [&
  timeout: 30000,
  executablePath: '/path/to/chrome'
};

В данном примере перечислены основные настройки, которые могут быть полезны в процессе тестирования.

Описание параметров

  1. headless Параметр, определяющий, будет ли браузер работать в режиме без графического интерфейса. В большинстве случаев для автоматизированного тестирования используется режим headless, так как он ускоряет выполнение тестов, исключая отрисовку UI.

    headless: true // или false, если нужно запустить браузер с интерфейсом
  2. slowMo Данный параметр регулирует замедление выполнения команд Puppeteer. Устанавливая его в миллисекундах, можно заставить браузер выполнять действия с заданной задержкой, что полезно при отладке или демонстрации работы скриптов.

    slowMo: 50 // задержка в 50 миллисекунд
  3. args Это массив параметров, передаваемых непосредственно при запуске браузера. Примером может служить аргумент –no-sandbox, который отключает использование песочницы для браузера. Такие параметры могут быть полезны в специфичных средах (например, при запуске тестов на CI-системах).

    args: ['--no-sandbox', '--disable-setuid-sandbox']
  4. timeout Параметр, который задает максимальное время ожидания выполнения действия перед тем, как будет сгенерирована ошибка. Обычно устанавливается на несколько секунд, чтобы не зависать на неопределённый срок в случае ошибок или долгих загрузок.

    timeout: 30000 // тайм-аут в 30 секунд
  5. executablePath В некоторых случаях необходимо указать путь к исполняемому файлу браузера, особенно если используется нестандартная версия Chrome или Chromium.

    executablePath: '/path/to/chrome'

Использование конфигурации с Puppeteer

После того как конфигурационный файл создан, его можно импортировать и использовать в коде тестирования. Например:

const puppeteer = require('puppeteer');
const config = require('./puppeteer.config.js');

(async () => {
  const browser = await puppeteer.launch(config);
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await browser.close();
})();

В данном примере конфигурация передаётся непосредственно в метод launch(), который запускает браузер с указанными параметрами.

Конфигурация для различных окружений

Одним из распространённых подходов является создание различных конфигурационных файлов для разных сред (например, для разработки, тестирования и продакшн). В таких случаях можно использовать несколько файлов конфигураций и динамически выбирать нужную в зависимости от окружения.

Пример условной загрузки конфигурации:

const puppeteer = require('puppeteer');

let config;
if (process.env.NODE_ENV === 'production') {
  config = require('./puppeteer.prod.config.js');
} else {
  config = require('./puppeteer.dev.config.js');
}

(async () => {
  const browser = await puppeteer.launch(config);
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await browser.close();
})();

Использование переменных окружения

Для большего удобства настройки Puppeteer можно использовать переменные окружения. Это позволяет задавать параметры конфигурации, не меняя исходный код. Например, можно использовать переменные для определения пути к исполняемому файлу браузера или других ключевых параметров.

module.exports = {
  headless: process.env.HEADLESS === 'true',
  slowMo: process.env.SLOWMO ? parseInt(process.env.SLOWMO, 10) : 0,
  args: ['--no-sandbox', '--disable-setuid-sandbox'],
  timeout: process.env.TIMEOUT || 30000,
  executablePath: process.env.EXECUTABLE_PATH || '/path/to/chrome'
};

Запуск через переменные окружения:

HEADLESS=true SLOWMO=50 TIMEOUT=20000 EXECUTABLE_PATH='/path/to/chrome' node script.js

Использование конфигурации в CI/CD

Для автоматизации процессов тестирования на CI/CD системах, таких как Jenkins, GitLab CI или GitHub Actions, необходимо настроить Puppeteer таким образом, чтобы он корректно работал в безголовом режиме и мог запускаться на виртуальных машинах без установленного графического интерфейса.

Типичная конфигурация для CI/CD может выглядеть так:

module.exports = {
  headless: true,
  args: ['--no-sandbox', '--disable-setuid-sandbox'],
  executablePath: '/usr/bin/chromium-browser'
};

В таких случаях важно удостовериться, что в CI/CD контейнере или машине присутствует нужная версия Chromium или Chrome, которая будет использоваться для тестирования.

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

Для улучшения диагностики ошибок полезно добавить в конфигурацию параметры логирования. Это можно сделать как на уровне самого Puppeteer, так и с помощью сторонних библиотек.

Пример включения логирования для Puppeteer:

module.exports = {
  headless: true,
  slowMo: 50,
  args: ['--no-sandbox', '--disable-setuid-sandbox'],
  timeout: 30000,
  executablePath: '/path/to/chrome',
  devtools: true // открытие панели разработчика для отладки
};

Открытие панели разработчика полезно для анализа страниц в процессе выполнения тестов, особенно если необходимо решить проблемы с рендерингом или сетевыми запросами.

Завершение работы

Работа с конфигурационными файлами позволяет значительным образом улучшить удобство и гибкость при автоматизации тестирования с Puppeteer. Создание универсальных, легко настраиваемых конфигураций помогает быстро адаптировать тесты под различные условия и требования, что особенно важно при работе в различных средах и на разных устройствах.