mcpField
P
playwright

playwright

github.com/oakossテスト・品質20456 回インストール11 週間前に更新
リポジトリ

playwright について

Playwrightは、Node.jsとPython向けのブラウザー自動化フレームワークです。開発者やテスターがブラウザーテスト、スクレイピング、API検証に利用でき、共通API、自動待機、再試行型アサーション、テスト分離を備えています。

主な機能

  1. 01共通APIによるChromium、Firefox、WebKitの操作
  2. 02自動待機とWeb優先アサーション
  3. 03新しいコンテキストによるテスト分離
  4. 04HTTPリクエスト送信とレスポンス検証
  5. 05スクリーンショットとPDFの生成

活用シーン

  1. 01ブラウザーのエンドツーエンドテスト作成
  2. 02ウェブページのスクレイピング
  3. 03APIリクエストとレスポンスのテスト
  4. 04ページのスクリーンショットやPDFの生成

MCP 対応

READMEでは高度なトピックの一つとしてMCPに触れていますが、具体的な連携方法は説明されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill playwright

インストール後、Claude Code で/playwrightを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced-assertions.md
advanced-topics.md
blocking-and-bypasses.md
common-patterns.md
configuration.md
debug-and-performance.md
docker-and-ci.md
input-and-actions.md
known-issues.md
network-testing.md
quick-start.md
selector-strategies.md
stealth-mode.md
testing-patterns.md
troubleshooting.md

詳細

Playwright

概要

Playwright は、単一の API で Chromium、Firefox、WebKit をサポートする、Node.js および Python 向けのブラウザー自動化フレームワークです。自動待機、Web ファーストのアサーション、完全なテスト分離を備え、信頼性の高いエンドツーエンドテストを実現します。

使用する場面: ブラウザー自動化、Web スクレイピング、スクリーンショット/PDF の生成、API テスト、Playwright Test の設定、Playwright エラーのトラブルシューティング、ステルスモードとボット対策の回避。

使用しない場面: 単純な HTTP リクエスト(fetch を使用)、ユニットテスト(Vitest/Jest を使用)、大規模なサーバーレススクレイピング(Cloudflare Browser Rendering を検討)。E2E テストのアーキテクチャ(ページオブジェクトモデル、CI のシャーディング、テストの整理、認証パターン)については、e2e-testing スキルを使用してください。

クイックリファレンス

パターンAPI / 設定主なポイント
基本テストtest('name', async ({ page }) => {})自動待機、ウェブファーストのアサーション、テストの分離
ロケーターpage.getByRole() / page.locator()CSS よりもロール/ラベル/テキストのセレクターを優先する
アサーションexpect(locator).toBeVisible()自動再試行、タイムアウトを設定可能
API テストrequest フィクスチャ / apiRequestContextHTTP リクエストを送信し、レスポンスを検証する
Aria スナップショットexpect(locator).toMatchAriaSnapshot()YAML を使用してアクセシビリティツリーの構造を検証する
クラスアサーションexpect(locator).toContainClass('active')個々の CSS クラス名に一致させる(v1.52+)
表示フィルターlocator.filter({ visible: true })表示されている要素のみを対象にする(v1.51+)
テストステップtest.step('name', async (step) => {})タイムアウト、スキップ、添付ファイル(v1.50+)
ステルスモードplaywright-extra + ステルスプラグイン20 種類以上の検出方法を回避するパッチを適用する
認証済みセッションcontext.cookies() + addCookies()Cookie と IndexedDB を保存/復元して状態を保持する
スクリーンショットpage.screenshot({ fullPage: true })先に主要な要素が読み込まれるまで待機する
PDF 生成page.pdf({ format: 'A4' })Chromium のみ。printBackground: true を設定する
Clock APIpage.clockテストで時間を停止、早送り、またはシミュレートする
A11y アサーションtoHaveAccessibleName, toHaveRoleaxe-core 依存なしでネイティブのアサーションを使用する
ビューポートアサーションexpect(locator).toBeInViewport()要素が表示ビューポート内にあることを検証する
変更されたテストのみ--only-changed=$GITHUB_BASE_REFベースブランチ以降に変更されたテストファイルのみを実行する
Dockermcr.microsoft.com/playwright:v1.58.2-noble--init --ipc=host フラグを使用する
デバッグメソッドpage.consoleMessages() / page.requests() (v1.56+)イベントリスナーは不要
SpeedboardHTML レポーター (v1.57+)実行の遅いテストとボトルネックを特定する
Playwright Agentsnpx playwright init-agentsLLM 主導のテスト向けのプランナー、ジェネレーター、ヒーラー
不安定なテストの検出--fail-on-flaky-tests (v1.50+)CI で不安定なテストがある場合に終了コード 1 を返す
実際のレスポンスを変更するroute.fetch() + route.fulfill()実際のレスポンスをインターセプトし、JSON を調整して返す
ソフトアサーションexpect.soft(locator)失敗してもテストを停止せず、最後にすべて報告する
再試行ブロックexpect(async () => {}).toPass()デフォルトのタイムアウトは 0(無期限)— 必ず設定する
カスタムマッチャーexpect.extend() / mergeExpects()カスタムアサーションメソッドを定義または結合する
アクション可能性マトリックスアクションごとの自動待機チェックclick:5 つすべてのチェック、fill:3 つ、focus/blur:なし
テスト修飾子test.fixme() / test.fail() / test.slow()fixme=スキップ+追跡、fail=アサーション失敗、slow=3 倍
並列モードtest.describe.configure({ mode: 'serial' })describe ブロックごとに serial、parallel、またはデフォルトを指定
ティアダウンプロジェクトセットアッププロジェクトの teardown オプションすべての依存先の完了後に自動クリーンアップする

よくある間違い

間違い正しいパターン
ロールセレクターより CSS セレクターを使う堅牢性を高めるため、getByRole、getByLabel、getByText を優先します
ブラウザーを閉じない常に finally ブロックで await browser.close() を実行します
待機に setTimeout を使うロケーターの自動待機または waitForLoadState を使います
CI コードに page.pause() を残すif (!process.env.CI) で囲みます。CI が無期限に停止します
待たずにクリックする自動待機が組み込まれた locator().click() を使います
テスト間で状態を共有するフィクスチャを通じて、各テストに新しいコンテキストが割り当てられます
実装の詳細をテストするDOM 構造ではなく、ユーザーに見える動作を検証します
動的コンテンツに固定の待機時間を設定するセレクターの出現またはコンテンツの安定化を待ちます
アサーションに await を付け忘れるすべての expect() アサーションはプロミスを返すため、await が必要です
すべてのスクレイピングで同じユーザーエージェントを使う大量のスクレイピングではユーザーエージェントをローテーションします
時間に依存するテストで setTimeout を使うpage.clock API を使って時間を停止または早送りします
簡単な a11y チェックに axe-core をインストールするネイティブの toHaveAccessibleName/toHaveRole アサーションを使います
明示的なタイムアウトなしで toPass() を使う常に { timeout: 10_000 } を渡します。デフォルトは 0(無期限)です
サービスワーカーが page.route() を気付かれずにブロックするMSW を使う場合は、コンテキスト設定で serviceWorkers: 'block' を設定します
オートコンプリート/デバウンス入力に fill() を使うキー入力ごとに処理するには、必要に応じて遅延を指定し、pressSequentially() を使います
storageState で sessionStorage が失われるstorageState が保存するのは Cookie と localStorage のみです。addInitScript() で sessionStorage を挿入します

委任

  • セレクターのトラブルシューティング:Explore エージェントを使います
  • テストパターンのレビュー:Task エージェントを使います
  • コードレビュー:code-reviewer エージェントに委任します

E2E テストのアーキテクチャ、Page Object Model パターン、CI のシャーディング戦略、認証フロー、ビジュアルリグレッションのワークフロー、またはテストの構成については、e2e-testing スキルを使います。

参考資料

コメント