Playwright
エンジニアのためのWebチートシート
Playwrightは、Microsoftが開発したモダンなE2Eテストフレームワークです。 Chromium、Firefox、WebKitのクロスブラウザテスト、Auto-wait、ロケーター、アサーション、テストランナー、設定ファイル、スクリーンショット、トレースなどをチートシートにまとめました。
セットアップ & CLI
インストール
Playwrightのセットアップ方法です。
CLIコマンド
| コマンド | 説明 |
|---|---|
| npx playwright test | 全テストを実行します。 |
| npx playwright test tests/login.spec.ts | 特定のテストファイルを実行します。 |
| npx playwright test --grep "login" | テスト名でフィルタして実行します。 |
| npx playwright test --headed | ブラウザを表示してテストを実行します。 |
| npx playwright test --ui | UIモードでテストを実行します(インタラクティブ)。 |
| npx playwright test --debug | デバッグモードでテストを実行します。 |
| npx playwright test --project=chromium | 特定のブラウザプロジェクトのみ実行します。 |
| npx playwright codegen https://example.com | ブラウザ操作を記録してテストコードを自動生成します。 |
| npx playwright show-report | HTMLテストレポートを開きます。 |
| npx playwright install | テスト用ブラウザをインストールします。 |
| npx playwright install-deps | システム依存パッケージをインストールします。 |
| npx playwright test --list | テストの一覧を表示します(実行しない)。 |
ロケーター
推奨ロケーター
| ロケーター | 説明 | 例 |
|---|---|---|
| getByRole | アクセシブルロールで要素を検索(最も推奨) | page.getByRole('button', { name: 'Submit' }) |
| getByText | テキスト内容で検索 | page.getByText('Hello World') |
| getByLabel | フォームラベルで検索 | page.getByLabel('Email') |
| getByPlaceholder | プレースホルダーで検索 | page.getByPlaceholder('Enter email') |
| getByTestId | data-testid属性で検索 | page.getByTestId('submit-btn') |
| getByAltText | alt属性で画像を検索 | page.getByAltText('Logo') |
| getByTitle | title属性で検索 | page.getByTitle('Settings') |
CSS / XPath セレクター
推奨ロケーターで対応できない場合に使用します。
ロケーターの連鎖
ロケーターをチェインして絞り込むパターンです。
ページ操作
ナビゲーション
| アクション | 説明 |
|---|---|
| await page.goto('https://example.com') | 指定URLに移動します。 |
| await page.goBack() | ブラウザの「戻る」を実行します。 |
| await page.goForward() | ブラウザの「進む」を実行します。 |
| await page.reload() | ページをリロードします。 |
値の取得
| アクション | 説明 |
|---|---|
| await locator.textContent() | 要素のテキストコンテンツを取得します。 |
| await locator.inputValue() | 入力フィールドの値を取得します。 |
| await locator.getAttribute('href') | 要素の属性値を取得します。 |
| await locator.innerHTML() | 要素のHTMLコンテンツを取得します。 |
| await locator.isVisible() | 要素が表示されているかを確認します。 |
| await locator.count() | 一致する要素の数を取得します。 |
要素操作
| アクション | 説明 |
|---|---|
| await locator.click() | 要素をクリックします。 |
| await locator.dblclick() | 要素をダブルクリックします。 |
| await locator.fill('text') | 入力フィールドに値を設定します(既存値をクリア)。 |
| await locator.type('text') | 文字を1つずつ入力します。 |
| await locator.check() | チェックボックスをONにします。 |
| await locator.uncheck() | チェックボックスをOFFにします。 |
| await locator.selectOption('value') | ドロップダウンの値を選択します。 |
| await locator.hover() | 要素の上にマウスカーソルを移動します。 |
| await locator.focus() | 要素にフォーカスします。 |
| await locator.press('Enter') | キーボードキーを押します。 |
| await locator.setInputFiles('file.pdf') | ファイルをアップロードします。 |
アサーション
要素アサーション
| アサーション | 説明 |
|---|---|
| expect(locator).toBeVisible() | 要素が表示されていることを確認します。 |
| expect(locator).toBeHidden() | 要素が非表示であることを確認します。 |
| expect(locator).toBeEnabled() | 要素が有効であることを確認します。 |
| expect(locator).toBeDisabled() | 要素が無効であることを確認します。 |
| expect(locator).toHaveText('text') | テキストが完全一致することを確認します。 |
| expect(locator).toContainText('text') | テキストが含まれていることを確認します。 |
| expect(locator).toHaveValue('value') | 入力値が一致することを確認します。 |
| expect(locator).toHaveAttribute('name', 'val') | 属性値が一致することを確認します。 |
| expect(locator).toHaveClass(/active/) | CSSクラスが含まれていることを確認します。 |
| expect(locator).toHaveCount(3) | 要素の数が一致することを確認します。 |
| expect(locator).toBeChecked() | チェックボックスがONであることを確認します。 |
ページアサーション
| アサーション | 説明 |
|---|---|
| expect(page).toHaveTitle(/Dashboard/) | ページタイトルが一致することを確認します。 |
| expect(page).toHaveURL(/dashboard/) | URLが一致することを確認します。 |
| expect(page).toHaveScreenshot() | スクリーンショットがベースラインと一致することを確認します。 |
テストランナー
テスト構造
@playwright/test の基本的なテスト構造です。
カスタムFixtures
再利用可能なセットアップロジックを定義するパターンです。
テスト制御
テストのスキップや条件付き実行のパターンです。
設定ファイル
基本設定
playwright.config.ts の主要な設定項目です。
ブラウザプロジェクト設定
複数ブラウザでのテスト実行設定です。
Webサーバー自動起動
テスト前に開発サーバーを自動起動する設定です。
スクリーンショット & トレース
スクリーンショット
テスト中にスクリーンショットを取得するパターンです。
トレース
テスト実行の詳細なトレースを記録するパターンです。
ビジュアルリグレッションテスト
スクリーンショットベースのUI回帰テストです。
ベストプラクティス
推奨プラクティス
| プラクティス |
|---|
| ユーザーの行動をテストする(実装の詳細ではなく) |
| CSSセレクターよりgetByRole等の意味的ロケーターを優先する |
| page.waitForTimeout()やsleepを使わない(Auto-waitを活用) |
| Page Object Model (POM) パターンでテストコードを整理する |
| beforeEachよりFixturesを使って共通セットアップを定義する |
| テストは並列実行できるよう独立させる |
| 各テストでBrowser Contextを分離する(Cookie/Storage独立) |
| Web-firstアサーション(自動リトライ付き)を使う |