2025年9月1日

Playwright MCP 実装詳細ガイド

概要

Playwright MCP(Model Context Protocol)は、Microsoftが開発した次世代のブラウザ自動化ツールです。アクセシビリティツリーを活用してUI要素を認識・操作することにより、UI変更への高い耐性と安定した要素特定を実現しています。

設定

MCP設定ファイル (.cursor/mcp.json)

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

主要関数一覧

1. ブラウザ制御関数

browser_navigate

説明: 指定したURLにブラウザを移動させます。

パラメータ:

  • url (string): 移動先のURL

実装例:

{
  "tool_name": "browser_navigate",
  "arguments": {
    "url": "https://example.com"
  }
}

使用場面:

  • テスト対象のWebサイトへの移動
  • 特定のページへの遷移
  • 初期ページの読み込み

browser_close

説明: 現在操作しているブラウザを閉じます。

パラメータ: なし

実装例:

{
  "tool_name": "browser_close",
  "arguments": {}
}

使用場面:

  • テスト終了時のクリーンアップ
  • リソースの解放
  • 複数ブラウザインスタンスの管理

browser_tabs

説明: ブラウザタブの管理を行います。

パラメータ:

  • action (string): 実行する操作("list", "new", "close", "select")
  • index (number, optional): タブのインデックス

実装例:

{
  "tool_name": "browser_tabs",
  "arguments": {
    "action": "new"
  }
}

使用場面:

  • 新しいタブの作成
  • タブ間の切り替え
  • 不要なタブの削除

2. 要素操作関数

browser_click

説明: 指定した要素をクリックします。

パラメータ:

  • element (string): 操作対象の要素の説明
  • ref (string): ページスナップショットから取得した正確な要素参照
  • doubleClick (boolean, optional): ダブルクリックかどうか
  • button (string, optional): クリックするボタン("left", "right", "middle")

実装例:

{
  "tool_name": "browser_click",
  "arguments": {
    "element": "ログインボタン",
    "ref": "ref123",
    "button": "left"
  }
}

使用場面:

  • ボタンのクリック
  • リンクのクリック
  • フォームの送信
  • メニューの選択

browser_type

説明: 編集可能な要素にテキストを入力します。

パラメータ:

  • element (string): 操作対象の要素の説明
  • ref (string): ページスナップショットから取得した正確な要素参照
  • text (string): 入力するテキスト
  • submit (boolean, optional): 入力後にEnterキーを押すかどうか
  • slowly (boolean, optional): 一文字ずつ入力するかどうか

実装例:

{
  "tool_name": "browser_type",
  "arguments": {
    "element": "ユーザー名入力欄",
    "ref": "ref456",
    "text": "myuser",
    "submit": false,
    "slowly": false
  }
}

使用場面:

  • フォームへの入力
  • 検索ボックスへの入力
  • チャットメッセージの入力

browser_fill_form

説明: 複数のフォームフィールドを一度に埋めます。

パラメータ:

  • fields (array): 埋めるフィールドの配列
    • name (string): フィールド名
    • type (string): フィールドタイプ("textbox", "checkbox", "radio", "combobox", "slider")
    • ref (string): 要素参照
    • value (string): 入力値

実装例:

{
  "tool_name": "browser_fill_form",
  "arguments": {
    "fields": [
      {
        "name": "ユーザー名",
        "type": "textbox",
        "ref": "ref123",
        "value": "testuser"
      },
      {
        "name": "パスワード",
        "type": "textbox",
        "ref": "ref456",
        "value": "password123"
      }
    ]
  }
}

使用場面:

  • ログインフォームの入力
  • 登録フォームの入力
  • 設定画面の入力

browser_select_option

説明: ドロップダウンからオプションを選択します。

パラメータ:

  • element (string): 操作対象の要素の説明
  • ref (string): 要素参照
  • values (array): 選択する値の配列

実装例:

{
  "tool_name": "browser_select_option",
  "arguments": {
    "element": "国選択ドロップダウン",
    "ref": "ref789",
    "values": ["Japan"]
  }
}

使用場面:

  • 国選択
  • 言語選択
  • カテゴリ選択

3. マウス操作関数

browser_hover

説明: 要素の上にマウスをホバーします。

パラメータ:

  • element (string): 操作対象の要素の説明
  • ref (string): 要素参照

実装例:

{
  "tool_name": "browser_hover",
  "arguments": {
    "element": "メニューアイテム",
    "ref": "ref123"
  }
}

使用場面:

  • ドロップダウンメニューの表示
  • ツールチップの表示
  • ホバー効果のテスト

browser_drag

説明: ドラッグ&ドロップ操作を実行します。

パラメータ:

  • startElement (string): ドラッグ開始要素の説明
  • startRef (string): 開始要素の参照
  • endElement (string): ドロップ先要素の説明
  • endRef (string): 終了要素の参照

実装例:

{
  "tool_name": "browser_drag",
  "arguments": {
    "startElement": "ドラッグするファイル",
    "startRef": "ref123",
    "endElement": "アップロードエリア",
    "endRef": "ref456"
  }
}

使用場面:

  • ファイルのアップロード
  • リストアイテムの並び替え
  • カレンダーの予定移動

4. キーボード操作関数

browser_press_key

説明: キーボードのキーを押します。

パラメータ:

  • key (string): 押すキーの名前

実装例:

{
  "tool_name": "browser_press_key",
  "arguments": {
    "key": "Enter"
  }
}

使用場面:

  • Enterキーでの送信
  • Escapeキーでのキャンセル
  • ショートカットキーの実行

5. ファイル操作関数

browser_file_upload

説明: ファイルをアップロードします。

パラメータ:

  • paths (array): アップロードするファイルのパスの配列

実装例:

{
  "tool_name": "browser_file_upload",
  "arguments": {
    "paths": ["/path/to/file1.jpg", "/path/to/file2.pdf"]
  }
}

使用場面:

  • 画像のアップロード
  • ドキュメントのアップロード
  • 複数ファイルの一括アップロード

6. スクリーンショット・スナップショット関数

browser_take_screenshot

説明: 現在のページのスクリーンショットを撮影します。

パラメータ:

  • type (string, optional): 画像形式("png", "jpeg")
  • filename (string, optional): 保存するファイル名
  • element (string, optional): 特定要素のスクリーンショット
  • ref (string, optional): 要素参照
  • fullPage (boolean, optional): ページ全体を撮影するかどうか

実装例:

{
  "tool_name": "browser_take_screenshot",
  "arguments": {
    "type": "png",
    "filename": "test_screenshot",
    "fullPage": true
  }
}

使用場面:

  • テスト結果の記録
  • バグ報告用の画像作成
  • UI変更の確認

browser_snapshot

説明: 現在のページのアクセシビリティスナップショットを取得します。

パラメータ: なし

実装例:

{
  "tool_name": "browser_snapshot",
  "arguments": {}
}

使用場面:

  • ページ構造の分析
  • 要素の特定
  • アクセシビリティの確認

7. 待機・同期関数

browser_wait_for

説明: 特定の条件を待機します。

パラメータ:

  • time (number, optional): 待機時間(秒)
  • text (string, optional): 待機するテキスト
  • textGone (string, optional): 消えるのを待つテキスト

実装例:

{
  "tool_name": "browser_wait_for",
  "arguments": {
    "text": "ログイン完了",
    "time": 10
  }
}

使用場面:

  • ページ読み込みの待機
  • 非同期処理の完了待機
  • 要素の表示待機

8. ダイアログ処理関数

browser_handle_dialog

説明: ダイアログを処理します。

パラメータ:

  • accept (boolean): ダイアログを受け入れるかどうか
  • promptText (string, optional): プロンプトダイアログのテキスト

実装例:

{
  "tool_name": "browser_handle_dialog",
  "arguments": {
    "accept": true,
    "promptText": "確認メッセージ"
  }
}

使用場面:

  • 確認ダイアログの処理
  • アラートの処理
  • プロンプトダイアログの処理

9. JavaScript実行関数

browser_evaluate

説明: ページ上でJavaScriptを実行します。

パラメータ:

  • function (string): 実行するJavaScript関数
  • element (string, optional): 対象要素の説明
  • ref (string, optional): 要素参照

実装例:

{
  "tool_name": "browser_evaluate",
  "arguments": {
    "function": "() => { return document.title; }"
  }
}

使用場面:

  • ページ情報の取得
  • カスタムJavaScriptの実行
  • DOM要素の操作

10. ブラウザ設定関数

browser_resize

説明: ブラウザウィンドウのサイズを変更します。

パラメータ:

  • width (number): ウィンドウの幅
  • height (number): ウィンドウの高さ

実装例:

{
  "tool_name": "browser_resize",
  "arguments": {
    "width": 1920,
    "height": 1080
  }
}

使用場面:

  • レスポンシブデザインのテスト
  • 異なる画面サイズでのテスト
  • モバイル表示のテスト

browser_install

説明: 指定されたブラウザをインストールします。

パラメータ: なし

実装例:

{
  "tool_name": "browser_install",
  "arguments": {}
}

使用場面:

  • 初回セットアップ
  • ブラウザの更新
  • 新しいブラウザの追加

11. デバッグ・情報取得関数

browser_console_messages

説明: コンソールメッセージを取得します。

パラメータ: なし

実装例:

{
  "tool_name": "browser_console_messages",
  "arguments": {}
}

使用場面:

  • JavaScriptエラーの確認
  • デバッグ情報の取得
  • ログの確認

browser_network_requests

説明: ネットワークリクエストを取得します。

パラメータ: なし

実装例:

{
  "tool_name": "browser_network_requests",
  "arguments": {}
}

使用場面:

  • API呼び出しの確認
  • ネットワークエラーの確認
  • パフォーマンスの分析

実装のベストプラクティス

1. 要素の特定

  • アクセシビリティツリーを活用して要素を特定
  • 意味のある要素名を使用(例:「ログインボタン」ではなく「ユーザー名入力欄」)
  • 要素参照(ref)を正確に使用

2. 待機処理

  • 非同期処理には適切な待機処理を実装
  • 要素の表示待機を使用
  • タイムアウトを適切に設定

3. エラーハンドリング

  • 要素が見つからない場合の処理
  • ネットワークエラーの処理
  • ダイアログの適切な処理

4. テストの安定性

  • フレームワークに依存しない要素特定
  • アクセシビリティを考慮した要素選択
  • 一貫性のある命名規則

使用例

ログインフローの自動化

[
  {
    "tool_name": "browser_navigate",
    "arguments": {
      "url": "https://example.com/login"
    }
  },
  {
    "tool_name": "browser_fill_form",
    "arguments": {
      "fields": [
        {
          "name": "ユーザー名",
          "type": "textbox",
          "ref": "ref123",
          "value": "testuser"
        },
        {
          "name": "パスワード",
          "type": "textbox",
          "ref": "ref456",
          "value": "password123"
        }
      ]
    }
  },
  {
    "tool_name": "browser_click",
    "arguments": {
      "element": "ログインボタン",
      "ref": "ref789"
    }
  },
  {
    "tool_name": "browser_wait_for",
    "arguments": {
      "text": "ログイン完了"
    }
  }
]

ファイルアップロードの自動化

[
  {
    "tool_name": "browser_navigate",
    "arguments": {
      "url": "https://example.com/upload"
    }
  },
  {
    "tool_name": "browser_file_upload",
    "arguments": {
      "paths": ["/path/to/file.jpg"]
    }
  },
  {
    "tool_name": "browser_click",
    "arguments": {
      "element": "アップロードボタン",
      "ref": "ref123"
    }
  },
  {
    "tool_name": "browser_wait_for",
    "arguments": {
      "text": "アップロード完了"
    }
  }
]

まとめ

Playwright MCPは、アクセシビリティツリーを活用した安定したブラウザ自動化を提供します。各関数は特定の用途に特化しており、組み合わせることで複雑なWeb操作を自動化できます。適切な要素特定と待機処理を実装することで、堅牢なテストスクリプトを作成できます。