Pruebas móviles con Playwright
Pruebas móviles con Playwright, principalmente incluye funciones como simulación de dispositivos móviles, ubicación geográfica, control de permisos, etc.
Además de simular navegadores de escritorio, Playwright también admitepruebas en dispositivos móviles, que incluyen:
- Simular diferentes modelos de teléfonos (tamaño de pantalla, resolución, UA, etc.)
- Simular eventos táctiles (toque, deslizamiento, pulsación larga)
- Simular ubicación geográfica (GPS)
- Simular permisos (cámara, ubicación, notificaciones)
Esto nos permite probar en PC efectos similares a los de un teléfono real.
Simulación de dispositivos
Playwright ofrece algunas configuraciones de dispositivos comunes (basadas enChrome DevToolsdescripciones de dispositivos), que se puedendevicesinvocar.
Ejemplo
(async () => {
const iPhone = devices['iPhone 12']; // Seleccionar dispositivo
const browser = await chromium.launch();
const context = await browser.newContext({
...iPhone // Aplicar configuración del dispositivo
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'mobile.png' });
await browser.close();
})();
Contenido que se puede simular:
- Resolución de pantalla(width、height、deviceScaleFactor)
- User-Agent(simular UA móvil)
- Soporte de eventos táctiles
- Cambio de orientación horizontal/vertical
Simular operaciones táctiles
Playwright activa el modo de dispositivo móvileventos táctiles。
Operaciones comunes:
1. Tocar
await page.tap('button#submit');
2. Deslizar / Arrastrar
await page.touchscreen.tap(200, 300); // 点击指定坐标 await page.touchscreen.swipe(200, 300, 200, 800); // 自定义封装,模拟滑动
3. Pulsación larga
await page.touchscreen.down(200, 300); await page.waitForTimeout(1000); // 按住 1 秒 await page.touchscreen.up();
Simular ubicación geográfica
Puede simular laubicación GPS。
Ejemplo
geolocation: { longitude: 116.4074, latitude: 39.9042 }, // Pekín
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.google.com/maps');
Simular permisos
Playwright admite otorgar o denegar permisos comunes, por ejemplo:
geolocation(ubicación geográfica)camera(cámara)microphone(micrófono)notifications(notificaciones)
const context = await browser.newContext({
permissions: ['geolocation', 'notifications']
});
Simular cambio de orientación horizontal/vertical
Modificando laviewportconfiguración.
await context.newPage({
viewport: { width: 812, height: 375 }, // 横屏
isMobile: true
});
Ejemplo completo: Pruebas móviles
Ejemplo
(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 }, // Shanghái
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 comunes
| API | Descripción | Ejemplo |
|---|---|---|
devices['iPhone 12'] |
Obtener configuración del dispositivo | const iphone = devices['iPhone 12'] |
context = browser.newContext({...device}) |
Activar simulación de dispositivo | ...iPhone |
page.tap(selector) |
Tocar un elemento | await page.tap('#btn') |
page.touchscreen.tap(x,y) |
Tocar en coordenadas | await page.touchscreen.tap(100,200) |
page.touchscreen.down(x,y) |
Presionar dedo | await page.touchscreen.down(100,200) |
page.touchscreen.up() |
Levantar dedo | await page.touchscreen.up() |
geolocation |
Establecer ubicación | { longitude: 120, latitude: 30 } |
permissions |
Establecer permisos | ['geolocation','camera'] |
viewport |
Establecer ancho y alto de pantalla | { width: 812, height: 375 } |
isMobile |
Activar modo móvil | isMobile: true |
Dispositivos comunes
Playwright incluye una lista de dispositivos comunes, que incluyeserie iPhone, serie Pixel, iPad, etc.
Lista de dispositivos comunes de Playwright
Playwright incluye decenas de configuraciones de dispositivos comunes (basadas en datos de Chrome DevTools). Para usarlas, mediante:
const { devices } = require('playwright');
const iphone = devices['iPhone 12'];
se obtienen los parámetros de configuración de ese dispositivo.
Serie iPhone
| Nombre del dispositivo | viewport | deviceScaleFactor | UA (abreviado) | Notas |
|---|---|---|---|---|
iPhone SE |
375 × 667 | 2 | Safari iOS | Clásico de pantalla pequeña |
iPhone 6 |
375 × 667 | 2 | Safari iOS | Modelo antiguo |
iPhone 7 |
375 × 667 | 2 | Safari iOS | Modelo antiguo |
iPhone 8 |
375 × 667 | 2 | Safari iOS | Común |
iPhone 8 Plus |
414 × 736 | 3 | Safari iOS | Pantalla grande |
iPhone X |
375 × 812 | 3 | Safari iOS | Pantalla con muesca |
iPhone 11 |
414 × 896 | 2 | Safari iOS | Común |
iPhone 11 Pro |
375 × 812 | 3 | Safari iOS | |
iPhone 11 Pro Max |
414 × 896 | 3 | Safari iOS | |
iPhone 12 |
390 × 844 | 3 | Safari iOS | Popular |
iPhone 12 Pro |
390 × 844 | 3 | Safari iOS | |
iPhone 12 Pro Max |
428 × 926 | 3 | Safari iOS | Pantalla grande |
iPhone 12 Mini |
360 × 780 | 3 | Safari iOS | Pantalla pequeña |
iPhone 13 |
390 × 844 | 3 | Safari iOS | Popular |
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 |
Serie Google Pixel
| Nombre del dispositivo | viewport | deviceScaleFactor | UA (abreviado) | Notas |
|---|---|---|---|---|
Pixel 2 |
411 × 731 | 2.6 | Chrome Android | Modelo antiguo |
Pixel 2 XL |
411 × 823 | 3.5 | Chrome Android | Pantalla grande |
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 | Recomendado |
Serie iPad
| Nombre del dispositivo | viewport | deviceScaleFactor | UA (abreviado) | Notas |
|---|---|---|---|---|
iPad (gen 6) |
768 × 1024 | 2 | Safari iOS | Común |
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 | Pantalla grande |
Otros modelos Android
| Nombre del dispositivo | viewport | deviceScaleFactor | UA (abreviado) | Notas |
|---|---|---|---|---|
Galaxy S5 |
360 × 640 | 3 | Chrome Android | Más antiguo |
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 | Popular |
Método de uso
Ejemplo
(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 }, // Pekín
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'iphone12.png' });
await browser.close();
})();