フロントエンド開発といえば。
react アプリの初期化( pnpm create vite@latest または npm init vite@latest <アプリ名> )

PlayWrightのベストプラクティス

● コンテキストのクローズ

context.close() は、ベストプラクティスとして明示的に呼ぶことが推奨されています。 page.close() は自動的に呼ばれるのでわざわざ呼ばなくてもOKです

// 省略していい await page.close();
await context.close();

● 純粋に 20秒待ちたい

const context = await browser.newContext();
const page = await context.newPage();
await page.goto('/foo/bar');
await page.waitForTimeout(20000);

● reactなど非同期に描画されるボタンを確実に押す

Reactなどで非同期に描画されるボタンは、タイミングによってクリックに失敗することがあります。 そんなときは expect().toPass() が便利です。

await expect(async () => {
  await page.getByRole("button", { name: "保存" }).click();
}).toPass();

toPass() は、コールバック内の処理が成功するまで一定時間(1回目:100sec, 2回目:250sec, 3回目:500sec, 4回目以降:1000sec 間隔)リトライしてくれます。

そのため、

  • Reactでボタンが少し遅れて表示される
  • API完了後にクリック可能になる
  • アニメーション終了後に操作したい

といったケースで、waitForTimeout() を書かずに安定したテストを書けます。

● 取得した要素のHTMLを確認する

const h1 = page.locator('h1');
console.log(await h1.evaluate(el => el.outerHTML));

● ブラウザの種類

https://github.com/microsoft/playwright/blob/d3d436d3/packages/playwright-core/src/server/deviceDescriptorsSource.json#L1188-L1202

Device Orientation Viewport Scale Mobile Touch Browser
Blackberry PlayBook Portrait 600 × 1024 1 WebKit
Blackberry PlayBook Landscape 1024 × 600 1 WebKit
BlackBerry Z30 Portrait 360 × 640 2 WebKit
BlackBerry Z30 Landscape 640 × 360 2 WebKit
Galaxy Note 3 Portrait 360 × 640 3 WebKit
Galaxy Note 3 Landscape 640 × 360 3 WebKit
Galaxy Note II Portrait 360 × 640 2 WebKit
Galaxy Note II Landscape 640 × 360 2 WebKit
Galaxy S III Portrait 360 × 640 2 WebKit
Galaxy S III Landscape 640 × 360 2 WebKit
Galaxy S5 Portrait 360 × 640 3 Chromium
Galaxy S5 Landscape 640 × 360 3 Chromium
Galaxy S8 Portrait 360 × 740 3 Chromium
Galaxy S8 Landscape 740 × 360 3 Chromium
Galaxy S9+ Portrait 320 × 658 4.5 Chromium
Galaxy S9+ Landscape 658 × 320 4.5 Chromium
Galaxy S24 Portrait 360 × 780 3 Chromium
Galaxy S24 Landscape 780 × 360 3 Chromium
Galaxy A55 Portrait 480 × 1040 2.25 Chromium
Galaxy A55 Landscape 1040 × 480 2.25 Chromium
Galaxy Tab S4 Portrait 712 × 1138 2.25 Chromium
Galaxy Tab S4 Landscape 1138 × 712 2.25 Chromium
Galaxy Tab S9 Portrait 640 × 1024 2.5 Chromium
Galaxy Tab S9 Landscape 1024 × 640 2.5 Chromium
Galaxy Z Fold 6 Portrait 928 × 1004 2 Chromium
Galaxy Z Fold 6 Cover Portrait 484 × 1112 2 Chromium
Galaxy Z Fold 7 Portrait 984 × 1016 2 Chromium
Galaxy Z Fold 7 Cover Portrait 360 × 764 3 Chromium
Galaxy Z Flip 6 Portrait 360 × 804 3 Chromium
Galaxy Z Flip 6 Cover Portrait 360 × 298 2 Chromium
Galaxy Z Flip 7 Portrait 360 × 764 3 Chromium
Galaxy Z Flip 7 Cover Portrait 474 × 448 2 Chromium
iPad (gen 5) Portrait 768 × 1024 2 WebKit
iPad (gen 6) Portrait 768 × 1024 2 WebKit
iPad (gen 7) Portrait 810 × 1080 2 WebKit
iPad (gen 11) Portrait 656 × 944 2.5 WebKit
iPad Mini Portrait 768 × 1024 2 WebKit
iPad Pro 11 Portrait 834 × 1194 2 WebKit
iPhone SE Portrait 320 × 568 2 WebKit
iPhone SE (3rd gen) Portrait 375 × 667 2 WebKit
iPhone 6 Portrait 375 × 667 2 WebKit
iPhone 6 Plus Portrait 414 × 736 3 WebKit
iPhone 7 Portrait 375 × 667 2 WebKit
iPhone 7 Plus Portrait 414 × 736 3 WebKit
iPhone 8 Portrait 375 × 667 2 WebKit
iPhone 8 Plus Portrait 414 × 736 3 WebKit
iPhone X Portrait 375 × 812 3 WebKit
iPhone XR Portrait 414 × 896 3 WebKit
iPhone 11 Portrait 414 × 715 2 WebKit
iPhone 11 Pro Portrait 375 × 635 3 WebKit
iPhone 11 Pro Max Portrait 414 × 715 3 WebKit
iPhone 12 Portrait 390 × 664 3 WebKit
iPhone 12 Mini Portrait 375 × 629 3 WebKit
iPhone 12 Pro Portrait 390 × 664 3 WebKit
iPhone 12 Pro Max Portrait 428 × 746 3 WebKit
iPhone 13 Portrait 390 × 664 3 WebKit
iPhone 13 Mini Portrait 375 × 629 3 WebKit
iPhone 13 Pro Portrait 390 × 664 3 WebKit
iPhone 13 Pro Max Portrait 428 × 746 3 WebKit
iPhone 14 Portrait 390 × 664 3 WebKit
iPhone 14 Plus Portrait 428 × 746 3 WebKit
iPhone 14 Pro Portrait 393 × 660 3 WebKit
iPhone 14 Pro Max Portrait 430 × 740 3 WebKit
iPhone 15 Portrait 393 × 659 3 WebKit
iPhone 15 Plus Portrait 430 × 739 3 WebKit
iPhone 15 Pro Portrait 393 × 659 3 WebKit
iPhone 15 Pro Max Portrait 430 × 739 3 WebKit
iPhone 16 Portrait 393 × 659 3 WebKit
iPhone 16 Plus Portrait 430 × 739 3 WebKit
iPhone 16 Pro Portrait 402 × 681 3 WebKit
iPhone 16 Pro Max Portrait 440 × 763 3 WebKit
iPhone 16e Portrait 390 × 651 3 WebKit
iPhone 17 Portrait 402 × 681 3 WebKit
No.2763
08/06 16:29

edit