Puppeteer изначально создавался для управления браузером Chromium через API высокого уровня, предоставляя возможности для автоматизации тестирования веб-приложений. При работе с мобильными версиями сайтов возникает ряд специфических особенностей, которые напрямую влияют на сценарии тестирования и выбор стратегий автоматизации.
Для тестирования мобильных интерфейсов Puppeteer предоставляет
встроенные инструменты эмуляции устройств. Основной объект для этого —
page.emulate(). Он позволяет задать:
Пример настройки эмуляции iPhone X:
const puppeteer = require(&
const iPhone = puppeteer.devices['iPhone X'];
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.emulate(iPhone);
await page.goto('https://example.com');
await browser.close();
})();
Использование предустановленных устройств значительно ускоряет настройку тестов и снижает риск ошибок при ручной конфигурации размеров экрана и плотности пикселей.
Мобильная автоматизация требует работы с сенсорными взаимодействиями:
касания, свайпы, масштабирование. Puppeteer предоставляет API
page.touchscreen, позволяющий отправлять события
tap, swipe и имитировать multi-touch действия.
Пример имитации свайпа:
await page.touchscreen.tap(100, 200); // одиночный тап
await page.touchscreen.touchStart([{ x: 50, y: 50 }]);
await page.touchscreen.touchMove([{ x: 200, y: 50 }]);
await page.touchscreen.touchEnd();
Важно учитывать, что не все жесты можно полностью эмулировать
стандартным API. Для сложных взаимодействий иногда приходится
комбинировать mouse и touchscreen.
Мобильные интерфейсы используют адаптивный дизайн, поэтому элементы могут менять положение и размеры в зависимости от устройства. В Puppeteer это требует:
page.waitForSelector() с опцией { visible: true
};
elementHandle.boundingBox();
Пример проверки видимости кнопки и клика:
const button = await page.waitForSelector('#submit', { visible: true });
const box = await button.boundingBox();
await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
Для мобильного тестирования важно имитировать реальные сетевые условия:
низкая скорость, высокая задержка, ограниченные данные. Puppeteer
позволяет использовать page.emulateNetworkConditions() для
настройки:
Offline, Slow
3G, Fast 3G;
Пример:
const slow3G = {
offline: false,
downloadThroughput: 50 * 1024 / 8,
uploadThroughput: 20 * 1024 / 8,
latency: 400
};
await page.emulateNetworkConditions(slow3G);
Это позволяет тестировать поведение страниц на слабых мобильных соединениях и выявлять проблемы производительности.
Скриншоты и визуальное тестирование — важная часть проверки мобильных интерфейсов. Puppeteer позволяет делать:
page.screenshot({ fullPage:
true });
elementHandle.screenshot();
Пример:
await page.screenshot({ path: 'mobile_view.png', fullPage: true });
Это особенно полезно при тестировании адаптивного дизайна и проверки верстки на разных устройствах.
Для диагностики проблем можно использовать:
page.on(‘console’) — перехват сообщений
консоли;
page.on(‘pageerror’) — отслеживание ошибок
JavaScript;
page.on(‘requestfailed’) — контроль
сетевых запросов.
Пример логирования ошибок страницы:
page.on('pageerror', error => {
console.error('Ошибка на странице:', error);
});
Эти инструменты помогают выявлять не только функциональные баги, но и проблемы, возникающие только на мобильных версиях.
Мобильная автоматизация в Puppeteer легко интегрируется в CI/CD пайплайны. Важно:
Такой подход обеспечивает стабильность тестов и позволяет отслеживать изменения интерфейса на мобильных устройствах в процессе разработки.