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

Table of Contents
sleep(5000)の死
経験豊富なエンジニアなら誰でも、CIパイプラインにおける不安定なテストスイートの苦痛を知っています。テスト失敗の80%は実際のバグではなく、競合状態、遅いアニメーションフレーム、そして任意のtime.sleep(5)やcy.wait(3000)の呼び出しによって引き起こされます。
Microsoft Playwrightはこれを根本的に解決します。 Chrome DevTools Protocol (CDP) とWebSocketストリームを介してブラウザのレンダリングエンジンと直接通信することで、Playwrightは組み込みの自動待機、マルチコンテキストブラウザ分離、ネイティブな並列テストシャーディングにより、不安定さを排除します。
このガイドでは、エンタープライズグレードのE2Eテストスイートを構築するために必要なメンタルモデル、ロケーターのベストプラクティス、およびCI/CDパターンを習得します。
E2Eフレームワーク対決: Playwright vs Cypress vs Selenium
| 機能 | Playwright | Cypress | Selenium |
|---|---|---|---|
| ブラウザ通信 | 直接WebSocket / DevTools Protocol | ブラウザ内iframe実行 | HTTP WebDriver RESTラッパー |
| 自動待機エンジン | 組み込み: アクション前に可視性、安定性、イベントをチェック | 部分的 (cy.waitまたはリトライが頻繁に必要) | 手動 (Thread.sleepまたは明示的な待機) |
| マルチタブ & マルチドメイン | オリジンと複数のタブ/ウィンドウを横断するネイティブサポート | 単一ドメインのオリジン制約により制限あり | 複雑なウィンドウ切り替えでサポート |
| 実行速度とワーカー | 並列でオーバーヘッドゼロの分離されたBrowserContext | ランナープロセスごとに単一テスト | 重いフルブラウザインスタンス |
自動待機アクション可能性パイプライン
Playwrightがなぜsleep()を必要としないのでしょうか?任意のアクション(例: click、fill、hover)を実行する前に、Playwrightは自動化された6段階のアクション可能性検証パスを実行します。
ワークフローを強化する3つのモード
Playwright UIモードは、タイムトラベルデバッグ、ウォッチモード、リアルタイムでのビジュアルDOMロケーターピッキングを提供します。
# Launch interactive graphical test runner
npx playwright test --ui
ハイライト: DOMスナップショットを遡ってステップ実行し、ステップごとのネットワークリクエストを検査し、DOMツリーでロケーターをライブでテストできます。
Chromium、Firefox、WebKitでテストスイートを同時に実行します。
# Run tests in parallel with HTML reporting
npx playwright test --project=chromium --workers=4
npx playwright show-report
ハイライト: 失敗したテストに対して、包括的なトレース、コンソールログ、ネットワークウォーターフォール、ビデオ再生を生成します。
実際のブラウザでユーザーアクションを記録し、クリーンなTypeScriptコードを自動生成します。
# Record interactions and export test code
npx playwright codegen https://myapp.com
ハイライト: 脆弱なCSSクラスではなく、堅牢なユーザー向けロールロケーター(getByRole、getByLabel)を自動選択します。
本番テストパターン: 堅牢な認証とカートフロー
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();
});
});
完璧な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スナップショットバンドルが提供され、ローカルでデバッグできます。
必須用語フラッシュカード
BrowserContext
BrowserContext
Web-First Assertions
Web-First Assertions
Storage State
Storage State
インタラクティブ知識チェック
よくある質問
はい!PlaywrightはGitHub ActionsのようなCIプラットフォームでのテストシャーディングをネイティブにサポートしており、30分のテストスイートを4つの並列ランナーで8分未満に分割できます。
Playwrightは、外部プロキシサーバーなしで、page.route()ハンドラーを使用して任意のHTTP/WebSocketリクエストを直接インターセプトおよびモックできます。
Playwrightは、デバイスのビューポートサイズ、タッチジェスチャー、ユーザーエージェント、GPS地理位置情報座標をシミュレートする高忠実度のモバイルブラウザエミュレーションを提供します。
こちらもおすすめ
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

エンタープライズ自動化に最適なPlaywrightの代替ツール
Playwrightは非常に強力ですが、エンタープライズチームはスイートの規模が拡大するにつれて代替ツールを必要とすることがあります。CI/CD統合、ビジュアルリグレッション、AI機能に基づいて、2026年版のトップE2Eテストツールを比較します。
Read more
2026年版E2Eテスト向けPlaywright代替ツールベスト5
エンドツーエンドテストのためのPlaywrightの主要な代替ツールであるCypress、WebdriverIO、Selenium 4、Puppeteer、TestCafeを包括的に比較します。
Read more
2026年版Playwrightの主要代替ツール:Cypress、WebdriverIO、Vitest、Puppeteerを比較
2026年におけるPlaywrightの主要代替ツールであるCypress、WebdriverIO、Vitest、Puppeteerを、実証済みの本番環境での使用例を交えて網羅的に比較解説します。
Read more