Мобильное тестирование в Playwright
Мобильное тестирование Playwright, в основном включающее такие функции, как имитация мобильных устройств, геолокация и управление разрешениями.
Помимо имитации десктопных браузеров, Playwright также поддерживаеттестирование мобильных устройств, включая:
- Имитация различных моделей телефонов (размер экрана, разрешение, UA и т. д.)
- Имитация событий касания (тап, свайп, долгое нажатие)
- Имитация геолокации (GPS)
- Имитация разрешений (камера, местоположение, уведомления)
Это позволяет тестировать на ПК с эффектами, близкими к настоящему телефону.
Эмуляция устройств
Playwright предоставляет некоторые распространённые конфигурации устройств (на основе дескрипторов устройствChrome DevTools), и может бытьdevicesвызван.
Пример
(async () => {
const iPhone = devices['iPhone 12']; // Выбрать устройство
const browser = await chromium.launch();
const context = await browser.newContext({
...iPhone // Применить конфигурацию устройства
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'mobile.png' });
await browser.close();
})();
Что можно эмулировать:
- Разрешение экрана(width、height、deviceScaleFactor)
- User-Agent(эмулируемый мобильный UA)
- Поддержка сенсорных событий
- Переключение альбомной/портретной ориентации
Симуляция сенсорных операций
Playwright включаетсенсорные события。
Обычные операции:
1. Касание
await page.tap('button#submit');
2. Свайп/перетаскивание
await page.touchscreen.tap(200, 300); // 点击指定坐标 await page.touchscreen.swipe(200, 300, 200, 800); // 自定义封装,模拟滑动
3. Долгое нажатие
await page.touchscreen.down(200, 300); await page.waitForTimeout(1000); // 按住 1 秒 await page.touchscreen.up();
Симуляция геолокации
Можно имитироватьGPS-позиционирование телефона。
Пример
geolocation: { longitude: 116.4074, latitude: 39.9042 }, // Пекин
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.google.com/maps');
Имитация разрешений
Playwright поддерживает предоставление или отклонение распространённых разрешений, например:
geolocation(Геолокация)camera(Камера)microphone(Микрофон)notifications(Уведомления)
const context = await browser.newContext({
permissions: ['geolocation', 'notifications']
});
Имитация переключения альбомной/портретной ориентации
Путём измененияviewportконфигурации.
await context.newPage({
viewport: { width: 812, height: 375 }, // 横屏
isMobile: true
});
Полный пример: тестирование мобильных устройств
Пример
(async () => {
const pixel5 = devices['Pixel 5'];
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({
...pixel5,
geolocation: { longitude: 121.4737, latitude: 31.2304 }, // Шанхай
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.google.com/maps');
await page.screenshot({ path: 'mobile-map.png' });
await browser.close();
})();
Общие API
| API | Описание | Пример |
|---|---|---|
devices['iPhone 12'] |
Получить конфигурацию устройства | const iphone = devices['iPhone 12'] |
context = browser.newContext({...device}) |
Включить эмуляцию устройства | ...iPhone |
page.tap(selector) |
Коснуться элемента | await page.tap('#btn') |
page.touchscreen.tap(x,y) |
Щёлкнуть по координатам | await page.touchscreen.tap(100,200) |
page.touchscreen.down(x,y) |
Опустить палец | await page.touchscreen.down(100,200) |
page.touchscreen.up() |
Поднять палец | await page.touchscreen.up() |
geolocation |
Установить геолокацию | { longitude: 120, latitude: 30 } |
permissions |
Установить разрешения | ['geolocation','camera'] |
viewport |
Установить ширину и высоту экрана | { width: 812, height: 375 } |
isMobile |
Включить мобильный режим | isMobile: true |
Распространённые устройства
В Playwright есть встроенный список распространённых устройств, включаясерию iPhone, серию Pixel, iPadи т. д.
Список распространённых устройств Playwright
Playwright включает десятки конфигураций распространённых устройств (на основе данных Chrome DevTools). При использовании — через:
const { devices } = require('playwright');
const iphone = devices['iPhone 12'];
Вы можете получить параметры конфигурации этого устройства.
Серия iPhone
| Название устройства | viewport | deviceScaleFactor | UA (сокр.) | Примечания |
|---|---|---|---|---|
iPhone SE |
375 × 667 | 2 | Safari iOS | Классический маленький экран |
iPhone 6 |
375 × 667 | 2 | Safari iOS | Старая модель |
iPhone 7 |
375 × 667 | 2 | Safari iOS | Старая модель |
iPhone 8 |
375 × 667 | 2 | Safari iOS | Распространённые |
iPhone 8 Plus |
414 × 736 | 3 | Safari iOS | Большой экран |
iPhone X |
375 × 812 | 3 | Safari iOS | Экран с вырезом |
iPhone 11 |
414 × 896 | 2 | Safari iOS | Распространённые |
iPhone 11 Pro |
375 × 812 | 3 | Safari iOS | |
iPhone 11 Pro Max |
414 × 896 | 3 | Safari iOS | |
iPhone 12 |
390 × 844 | 3 | Safari iOS | Популярные |
iPhone 12 Pro |
390 × 844 | 3 | Safari iOS | |
iPhone 12 Pro Max |
428 × 926 | 3 | Safari iOS | Большой экран |
iPhone 12 Mini |
360 × 780 | 3 | Safari iOS | Маленький экран |
iPhone 13 |
390 × 844 | 3 | Safari iOS | Популярные |
iPhone 13 Pro |
390 × 844 | 3 | Safari iOS | |
iPhone 13 Pro Max |
428 × 926 | 3 | Safari iOS | |
iPhone 13 Mini |
360 × 780 | 3 | Safari iOS |
Серия Google Pixel
| Название устройства | viewport | deviceScaleFactor | UA (сокр.) | Примечания |
|---|---|---|---|---|
Pixel 2 |
411 × 731 | 2.6 | Chrome Android | Старая модель |
Pixel 2 XL |
411 × 823 | 3.5 | Chrome Android | Большой экран |
Pixel 3 |
393 × 786 | 2.75 | Chrome Android | |
Pixel 3 XL |
412 × 847 | 3.5 | Chrome Android | |
Pixel 4 |
353 × 745 | 2.75 | Chrome Android | |
Pixel 4 XL |
412 × 869 | 3.5 | Chrome Android | |
Pixel 5 |
393 × 851 | 2.75 | Chrome Android | Рекомендуется |
Серия iPad
| Название устройства | viewport | deviceScaleFactor | UA (сокр.) | Примечания |
|---|---|---|---|---|
iPad (gen 6) |
768 × 1024 | 2 | Safari iOS | Распространённые |
iPad (gen 7) |
810 × 1080 | 2 | Safari iOS | |
iPad Air |
820 × 1180 | 2 | Safari iOS | |
iPad Mini |
768 × 1024 | 2 | Safari iOS | |
iPad Pro 11 |
834 × 1194 | 2 | Safari iOS | |
iPad Pro 12.9 |
1024 × 1366 | 2 | Safari iOS | Большой экран |
Другие модели Android
| Название устройства | viewport | deviceScaleFactor | UA (сокр.) | Примечания |
|---|---|---|---|---|
Galaxy S5 |
360 × 640 | 3 | Chrome Android | Старые |
Galaxy S8 |
360 × 740 | 4 | Chrome Android | |
Galaxy S9+ |
412 × 846 | 4.5 | Chrome Android | |
Galaxy Note 3 |
360 × 640 | 3 | Chrome Android | |
Galaxy Note 9 |
414 × 846 | 4.5 | Chrome Android | |
Galaxy A51/71 |
412 × 914 | 2.63 | Chrome Android | Популярные |
Использование
Пример
(async () => {
const iPhone = devices['iPhone 12'];
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({
...iPhone,
geolocation: { longitude: 116.4074, latitude: 39.9042 }, // Пекин
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'iphone12.png' });
await browser.close();
})();