Playwright モバイルテスト
Playwright モバイルテスト、主にモバイルデバイスのエミュレーション、地理位置情報、権限制御などの機能を含みます。
Playwright はデスクトップブラウザのエミュレーションに加えて、モバイルデバイステストもサポートしています。具体的には、
- さまざまなスマートフォンモデルのエミュレーション(画面サイズ、解像度、UA など)
- タッチイベントのエミュレーション(タップ、スワイプ、長押し)
- 地理位置情報(GPS)のエミュレーション
- 権限のエミュレーション(カメラ、位置情報、通知)
これにより、PC上で実機に近いスマートフォンのテストができます。
デバイスのエミュレーション
Playwright はいくつかの一般的なデバイス設定を提供しています(Chrome DevToolsデバイス記述に基づく)、次の方法でdevices呼び出します。
例
const { chromium, devices } = require('playwright');
(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();
})();
(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位置情報。
例
const context = await browser.newContext({
geolocation: { longitude: 116.4074, latitude: 39.9042 }, // 北京
permissions: ['geolocation']
});
const page = await context.newPage();
await page.goto('https://www.google.com/maps');
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
});
完全な例:モバイルテスト
例
const { chromium, devices } = require('playwright');
(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();
})();
(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 | 人気 |
使用方法
例
const { chromium, devices } = require('playwright');
(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();
})();
(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();
})();