В процессе автоматизации тестирования с использованием Puppeteer конфигурационные файлы играют ключевую роль. Они позволяют гибко настраивать параметры работы фреймворка, улучшая производительность и обеспечивая удобство в повторных запусках тестов.
Puppeteer не требует наличия отдельного конфигурационного файла для своей работы, однако многие пользователи предпочитают создавать такой файл, чтобы централизованно управлять настройками. Стандартная структура конфигурационного файла в проектах с Puppeteer может выглядеть следующим образом:
module.exports = {
headless: true,
slowMo: 50,
args: [&
timeout: 30000,
executablePath: '/path/to/chrome'
};
В данном примере перечислены основные настройки, которые могут быть полезны в процессе тестирования.
headless Параметр, определяющий, будет ли браузер работать в режиме без графического интерфейса. В большинстве случаев для автоматизированного тестирования используется режим headless, так как он ускоряет выполнение тестов, исключая отрисовку UI.
headless: true // или false, если нужно запустить браузер с интерфейсом
slowMo Данный параметр регулирует замедление выполнения команд Puppeteer. Устанавливая его в миллисекундах, можно заставить браузер выполнять действия с заданной задержкой, что полезно при отладке или демонстрации работы скриптов.
slowMo: 50 // задержка в 50 миллисекунд
args Это массив параметров, передаваемых
непосредственно при запуске браузера. Примером может служить аргумент
–no-sandbox, который отключает использование песочницы для
браузера. Такие параметры могут быть полезны в специфичных средах
(например, при запуске тестов на CI-системах).
args: ['--no-sandbox', '--disable-setuid-sandbox']
timeout Параметр, который задает максимальное время ожидания выполнения действия перед тем, как будет сгенерирована ошибка. Обычно устанавливается на несколько секунд, чтобы не зависать на неопределённый срок в случае ошибок или долгих загрузок.
timeout: 30000 // тайм-аут в 30 секунд
executablePath В некоторых случаях необходимо указать путь к исполняемому файлу браузера, особенно если используется нестандартная версия Chrome или Chromium.
executablePath: '/path/to/chrome'
После того как конфигурационный файл создан, его можно импортировать и использовать в коде тестирования. Например:
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 системах, таких как 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. Создание универсальных, легко настраиваемых конфигураций помогает быстро адаптировать тесты под различные условия и требования, что особенно важно при работе в различных средах и на разных устройствах.