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();
})();

エミュレート可能な内容:

  • 画面解像度(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');

権限のエミュレーション

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();
})();

よく使う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();
})();
その他の拡張