•9 min read

PlaywrightE2Eテスト:フレークのないテストを実現する4つのルール

PlaywrightE2Eテスト:フレークのないテストを実現する4つのルール
Playwright E2E Modern Browser Automation Architecture

Microsoft Playwrightはこれを根本的に解決します。 Chrome DevTools Protocol (CDP) とWebSocketストリームを介してブラウザのレンダリングエンジンと直接通信することで、Playwrightは組み込みの自動待機、マルチコンテキストブラウザ分離、ネイティブな並列テストシャーディングにより、不安定さを排除します。

このガイドでは、エンタープライズグレードのE2Eテストスイートを構築するために必要なメンタルモデル、ロケーターのベストプラクティス、およびCI/CDパターンを習得します。


Audio Briefing
0:00 / 0:00

E2Eフレームワーク対決: Playwright vs Cypress vs Selenium

機能PlaywrightCypressSelenium
ブラウザ通信
直接WebSocket / DevTools Protocol
ブラウザ内iframe実行
HTTP WebDriver RESTラッパー
自動待機エンジン
組み込み: アクション前に可視性、安定性、イベントをチェック
部分的 (cy.waitまたはリトライが頻繁に必要)
手動 (Thread.sleepまたは明示的な待機)
マルチタブ & マルチドメイン
オリジンと複数のタブ/ウィンドウを横断するネイティブサポート
単一ドメインのオリジン制約により制限あり
複雑なウィンドウ切り替えでサポート
実行速度とワーカー
並列でオーバーヘッドゼロの分離されたBrowserContext
ランナープロセスごとに単一テスト
重いフルブラウザインスタンス

Advertisement

自動待機アクション可能性パイプライン

Playwrightがなぜsleep()を必要としないのでしょうか?任意のアクション(例: click、fill、hover)を実行する前に、Playwrightは自動化された6段階のアクション可能性検証パスを実行します。


ワークフローを強化する3つのモード

Playwright UIモードは、タイムトラベルデバッグ、ウォッチモード、リアルタイムでのビジュアルDOMロケーターピッキングを提供します。

# Launch interactive graphical test runner
npx playwright test --ui

ハイライト: DOMスナップショットを遡ってステップ実行し、ステップごとのネットワークリクエストを検査し、DOMツリーでロケーターをライブでテストできます。


本番テストパターン: 堅牢な認証とカートフロー

import { test, expect } from "@playwright/test";

test.describe("E-Commerce Checkout Workflow", () => {
  test.beforeEach(async ({ page }) => {
    await page.goto("/store");
  });

  test("User can search, add item to cart, and reach payment screen", async ({ page }) => {
    // 1. Resilient Locator: Target user-facing semantic role
    const searchInput = page.getByRole("searchbox", { name: "Search products" });
    await searchInput.fill("Mechanical Keyboard");
    await page.keyboard.press("Enter");

    // 2. Locate product card and click Add to Cart
    const productCard = page.getByTestId("product-card").filter({ hasText: "Keychron K2" });
    await expect(productCard).toBeVisible();

    const addToCartButton = productCard.getByRole("button", { name: "Add to Cart" });
    await addToCartButton.click();

    // 3. Verify badge updates without manual wait
    const cartBadge = page.getByRole("status", { name: "Cart items" });
    await expect(cartBadge).toHaveText("1");

    // 4. Navigate to checkout and confirm form presence
    await page.getByRole("link", { name: "Proceed to Checkout" }).click();
    await expect(page).toHaveURL(/.*\/checkout/);

    const emailInput = page.getByLabel("Email address");
    await expect(emailInput).toBeFocused();
  });
});

Advertisement

完璧なE2Eスイートのための4つのルール

1. ユーザー向けロールロケーターを優先する

.btn-primary-2や#item > div:nth-child(3)のような脆いCSSセレクターは避けてください。実際の人間ユーザーやスクリーンリーダーがページとどのようにやり取りするかを反映するpage.getByRole()、page.getByLabel()、またはpage.getByText()を常に使用してください。

2. BrowserContext認証共有を活用する

すべてのテストでUIを介してログインしないでください!グローバルセットアップで一度ログインし、署名されたストレージ状態をauth.jsonに保存し、認証されたストレージ状態を並列テストワーカー間で再利用してください。

3. スリープをハードコードしない

すべてのpage.waitForTimeout(3000)を、await expect(locator).toBeVisible()やawait page.waitForResponse()のようなウェブファーストのアサーションに置き換えてください。

4. CI失敗時にトレースビューアーをアタッチする

playwright.config.tsでtrace: 'on-first-retry'を設定してください。GitHub Actionsでテストが失敗した場合、完全なビデオ、アクションタイムライン、DOMスナップショットバンドルが提供され、ローカルでデバッグできます。


必須用語フラッシュカード

Architecture

BrowserContext

Click to reveal
Architecture
単一のブラウザインスタンス内の、分離されたシークレットモード相当のブラウザセッション。コンテキストの作成はミリ秒単位で完了するため、並列テストのオーバーヘッドは実質ゼロです。

BrowserContext

Best Practices

Web-First Assertions

Click to reveal
Best Practices
期待が満たされるかタイムアウトになるまで、DOMを自動的に再試行およびポーリングするexpect(locator).toBeVisible()のようなアサーション。

Web-First Assertions

Optimization

Storage State

Click to reveal
Optimization
繰り返しのログインフローをテストがバイパスできるようにする、保存された認証クッキー、localStorage、およびセッションデータ。

Storage State


インタラクティブ知識チェック


よくある質問

はい!PlaywrightはGitHub ActionsのようなCIプラットフォームでのテストシャーディングをネイティブにサポートしており、30分のテストスイートを4つの並列ランナーで8分未満に分割できます。

Playwrightは、外部プロキシサーバーなしで、page.route()ハンドラーを使用して任意のHTTP/WebSocketリクエストを直接インターセプトおよびモックできます。

Playwrightは、デバイスのビューポートサイズ、タッチジェスチャー、ユーザーエージェント、GPS地理位置情報座標をシミュレートする高忠実度のモバイルブラウザエミュレーションを提供します。


こちらもおすすめ

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement
エンタープライズ自動化に最適なPlaywrightの代替ツール
playwright

エンタープライズ自動化に最適なPlaywrightの代替ツール

Playwrightは非常に強力ですが、エンタープライズチームはスイートの規模が拡大するにつれて代替ツールを必要とすることがあります。CI/CD統合、ビジュアルリグレッション、AI機能に基づいて、2026年版のトップE2Eテストツールを比較します。

Read more