Puppeteer — это библиотека для автоматизации браузера Chrome или Chromium с помощью Node.js. Она предоставляет высокоуровневый API для взаимодействия с веб-страницами, что идеально подходит для тестирования, генерации снимков экрана, создания PDF-документов и многих других задач. В комбинации с Mocha, Puppeteer становится мощным инструментом для автоматизации браузерных тестов.
Для начала работы с Puppeteer необходимо установить его с помощью npm. Это можно сделать, выполнив следующую команду:
npm install puppeteer --save-dev
После этого библиотека будет установлена как зависимость для проекта. Важно понимать, что Puppeteer автоматически скачивает последнюю версию браузера Chrome, подходящую для взаимодействия с API.
Mocha предоставляет удобные средства для написания асинхронных тестов, а Puppeteer идеально подходит для выполнения действий в браузере. С помощью Mocha можно запускать тесты, которые взаимодействуют с веб-страницами в реальном браузере, что помогает убедиться, что интерфейс приложения работает корректно.
Основной шаг в интеграции — это создание настроек для запуска и
завершения браузера, а также использование before и
after хуков для инициализации и очистки.
const puppeteer = require('puppeteer');
let browser;
let page;
before(async () => {
browser = await puppeteer.launch({ headless: true });
page = await browser.newPage();
});
after(async () => {
await browser.close();
});
describe('Тестирование интерфейса', () => {
it('должен загрузить страницу и проверить заголовок', async () => {
await page.goto('https://example.com');
const title = await page.title();
title.should.equal('Example Domain');
});
});
Puppeteer предоставляет обширный набор методов для работы с браузером. Некоторые из них особенно полезны при тестировании.
Чтобы загрузить страницу, используется метод goto(). Он
принимает URL и возвращает промис, который можно использовать для
ожидания завершения загрузки.
await page.goto('https://example.com');
Для взаимодействия с элементами на странице Puppeteer предоставляет
методы, такие как click(), type() и
select(). Например, чтобы кликнуть по кнопке, можно
использовать:
await page.click('#submit-button');
Чтобы ввести текст в поле ввода:
await page.type('#username', 'myUsername');
Puppeteer позволяет делать снимки экрана страницы, что полезно для визуальных регрессионных тестов.
await page.screenshot({ path: 'screenshot.png' });
Для извлечения данных с веб-страницы используется метод
evaluate(), который выполняет код в контексте браузера. Это
позволяет обращаться к DOM и получать любые данные.
const pageTitle = await page.evaluate(() => document.title);
console.log(pageTitle); // В консоль будет выведен заголовок страницы
Иногда необходимо подождать, пока на странице не появится
определённый элемент. Для этого Puppeteer предоставляет методы
waitForSelector() и waitFor().
await page.waitForSelector('#submit-button');
Этот метод ждёт, пока элемент с селектором
#submit-button не появится на странице.
Ниже приведен пример простого теста, который проверяет, что на странице загружается нужный текст и выполняется переход по ссылке.
const puppeteer = require('puppeteer');
describe('Тестирование страницы с Puppeteer', () => {
let browser;
let page;
before(async () => {
browser = await puppeteer.launch({ headless: true });
page = await browser.newPage();
});
after(async () => {
await browser.close();
});
it('должен проверить заголовок страницы и перейти по ссылке', async () => {
await page.goto('https://example.com');
// Проверка заголовка страницы
const title = await page.title();
title.should.equal('Example Domain');
// Переход по ссылке
await page.click('a');
await page.waitForNavigation();
const newUrl = page.url();
newUrl.should.include('iana.org');
});
});
При работе с Puppeteer в Mocha важно правильно обрабатывать ошибки,
чтобы тесты не падали без объяснений. Один из подходов — это
использование try-catch блоков внутри тестов.
it('должен проверить правильность отображения страницы', async () => {
try {
await page.goto('https://example.com');
const title = await page.title();
title.should.equal('Example Domain');
} catch (error) {
console.error('Ошибка при загрузке страницы:', error);
throw error;
}
});
Такой подход позволяет более детально отслеживать ошибки в тестах и упрощает диагностику при их возникновении.
Запуск в headless-режиме: Для улучшения производительности тестов рекомендуется запускать Puppeteer в headless-режиме, когда интерфейс браузера не отображается. Это позволяет сократить время выполнения тестов.
Запуск нескольких экземпляров браузера: Для параллельного выполнения тестов можно запустить несколько экземпляров браузера или страниц. Puppeteer поддерживает создание нескольких страниц в одном браузере, что помогает избежать большого времени ожидания между тестами.
Избегание лишних действий: Каждое взаимодействие с браузером (например, клик, скроллинг или ввод текста) занимает время. Чтобы ускорить тесты, стоит минимизировать количество ненужных действий, таких как скроллинг или простое ожидание.
Puppeteer может быть использован не только для функциональных тестов, но и для других целей, таких как:
Использование Puppeteer в сочетании с Mocha предоставляет широкие возможности для тестирования приложений, позволяя детально проверять как логику взаимодействия с пользователем, так и визуальную составляющую веб-страниц.