Tests mobiles avec Playwright
Tests mobiles Playwright, incluant principalement des fonctionnalités telles que la simulation d'appareils mobiles, la géolocalisation et le contrôle des autorisations.
En plus de simuler des navigateurs de bureau, Playwright prend également en chargeles tests sur appareils mobiles, notamment :
- Simulation de différents modèles de téléphones (taille d'écran, résolution, UA, etc.)
- Simulation d'événements tactiles (tap, swipe, appui long)
- Simulation de la géolocalisation (GPS)
- Simulation des autorisations (caméra, localisation, notifications)
Cela nous permet de tester sur un PC avec des effets proches de ceux d’un vrai téléphone.
Simulation d’appareils
Playwright fournit quelques configurations d’appareils courantes (basées sur les descripteurs d’appareils deChrome DevTools), et peut êtredevicesinvoqué.
Exemple
(async () => {
const iPhone = devices['iPhone 12']; // Sélectionner l’appareil
const browser = await chromium.launch();
const context = await browser.newContext({
...iPhone // Appliquer la configuration de l’appareil
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'mobile.png' });
await browser.close();
})();
Ce qui peut être simulé :
- Résolution de l’écran(width、height、deviceScaleFactor)
- User-Agent(UA mobile simulé)
- Prise en charge des événements tactiles
- Basculement paysage/portrait
Simulation des opérations tactiles
Playwright activeles événements tactiles。
Opérations courantes :
1. Appui
await page.tap('button#submit');
2. Balayage/Glisser
await page.touchscreen.tap(200, 300); // 点击指定坐标 await page.touchscreen.swipe(200, 300, 200, 800); // 自定义封装,模拟滑动
3. Appui long
await page.touchscreen.down(200, 300); await page.waitForTimeout(1000); // 按住 1 秒 await page.touchscreen.up();
Simulation de la géolocalisation
Peut simuler lepositionnement GPS du téléphone。
Exemple
geolocation: { longitude: 116.4074, latitude: 39.9042 }, // Pékin
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.google.com/maps');
Simulation des autorisations
Playwright prend en charge l'octroi ou le refus des autorisations courantes, par exemple :
geolocation(Géolocalisation)camera(Caméra)microphone(Microphone)notifications(Notifications)
const context = await browser.newContext({
permissions: ['geolocation', 'notifications']
});
Simulation du basculement paysage/portrait
En modifiantviewportla configuration.
await context.newPage({
viewport: { width: 812, height: 375 }, // 横屏
isMobile: true
});
Exemple complet : tests mobiles
Exemple
(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 }, // Shanghai
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 courantes
| API | Description | Exemple |
|---|---|---|
devices['iPhone 12'] |
Obtenir la configuration de l'appareil | const iphone = devices['iPhone 12'] |
context = browser.newContext({...device}) |
Activer la simulation d'appareil | ...iPhone |
page.tap(selector) |
Toucher l'élément | await page.tap('#btn') |
page.touchscreen.tap(x,y) |
Cliquer aux coordonnées | await page.touchscreen.tap(100,200) |
page.touchscreen.down(x,y) |
Appui du doigt | await page.touchscreen.down(100,200) |
page.touchscreen.up() |
Lever du doigt | await page.touchscreen.up() |
geolocation |
Définir la géolocalisation | { longitude: 120, latitude: 30 } |
permissions |
Définir les autorisations | ['geolocation','camera'] |
viewport |
Définir la largeur et la hauteur de l'écran | { width: 812, height: 375 } |
isMobile |
Activer le mode mobile | isMobile: true |
Appareils courants
Playwright dispose d'une liste intégrée d'appareils courants, y comprisla série iPhone, la série Pixel, iPad, etc.
Liste des appareils courants Playwright
Playwright inclut des dizaines de configurations d'appareils courants (basées sur les données de Chrome DevTools). Lors de l'utilisation, via :
const { devices } = require('playwright');
const iphone = devices['iPhone 12'];
Vous pouvez obtenir les paramètres de configuration de cet appareil.
Série iPhone
| Nom de l'appareil | viewport | deviceScaleFactor | UA (abrév.) | Remarques |
|---|---|---|---|---|
iPhone SE |
375 × 667 | 2 | Safari iOS | Petit écran classique |
iPhone 6 |
375 × 667 | 2 | Safari iOS | Modèle plus ancien |
iPhone 7 |
375 × 667 | 2 | Safari iOS | Modèle plus ancien |
iPhone 8 |
375 × 667 | 2 | Safari iOS | Courantes |
iPhone 8 Plus |
414 × 736 | 3 | Safari iOS | Grand écran |
iPhone X |
375 × 812 | 3 | Safari iOS | Écran à encoche |
iPhone 11 |
414 × 896 | 2 | Safari iOS | Courantes |
iPhone 11 Pro |
375 × 812 | 3 | Safari iOS | |
iPhone 11 Pro Max |
414 × 896 | 3 | Safari iOS | |
iPhone 12 |
390 × 844 | 3 | Safari iOS | Populaire |
iPhone 12 Pro |
390 × 844 | 3 | Safari iOS | |
iPhone 12 Pro Max |
428 × 926 | 3 | Safari iOS | Grand écran |
iPhone 12 Mini |
360 × 780 | 3 | Safari iOS | Petit écran |
iPhone 13 |
390 × 844 | 3 | Safari iOS | Populaire |
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 |
Série Google Pixel
| Nom de l'appareil | viewport | deviceScaleFactor | UA (abrév.) | Remarques |
|---|---|---|---|---|
Pixel 2 |
411 × 731 | 2.6 | Chrome Android | Modèle plus ancien |
Pixel 2 XL |
411 × 823 | 3.5 | Chrome Android | Grand écran |
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 | Recommandé |
Série iPad
| Nom de l'appareil | viewport | deviceScaleFactor | UA (abrév.) | Remarques |
|---|---|---|---|---|
iPad (gen 6) |
768 × 1024 | 2 | Safari iOS | Courantes |
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 | Grand écran |
Autres modèles Android
| Nom de l'appareil | viewport | deviceScaleFactor | UA (abrév.) | Remarques |
|---|---|---|---|---|
Galaxy S5 |
360 × 640 | 3 | Chrome Android | Plus ancien |
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 | Populaire |
Utilisation
Exemple
(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 }, // Pékin
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'iphone12.png' });
await browser.close();
})();