Claude CodeとPlaywright MCPで実現する対話型UI自動テスト構築

Claude CodeとPlaywright MCPで実現する対話型UI自動テスト構築

Claude CodeとPlaywright MCPを組み合わせ、実ブラウザ操作を確認しながら対話的にUIテストを構築する方法を紹介します。確認作業とテスト作成を分断しないPlaywrightテスト作成を実例付きで紹介します。
2026.02.05

はじめに

UIテストを書くとき、
「セレクタを探す → 失敗する → ブラウザを見直す」
という往復に時間を取られていませんか?

本記事では、Claude CodePlaywright MCP を組み合わせて、
実際のブラウザ操作を確認しながら対話的にUIテストを構築する方法を紹介します。

テストコードをあとから書くのではなく、
確認作業そのものをテスト生成につなげる のがこの方法の良いところです。

本記事は、Claude CodeとPlaywrightを利用したことがある方向けに書いています。
各サービスについて詳しく知りたい方は、こちらをご覧ください。

Claude CodeとPlaywrightの参考ブログ

動画で動きを紹介

モバイル表示時のハンバーガーメニューのテストを対話的に作成している例です。
こんなことができます。

https://youtu.be/kET8uuystqw

生成したテストコードの詳細

この記事で作成したテストコードは、GitHubにまとめています。

https://github.com/rednes/claude-playwright-sample

Playwright MCPとは?

Playwright MCPは、Claude Code(AIエージェント)が
Playwrightを使って実際のブラウザ操作を行えるようにする仕組みです。

Playwright MCPを使うことで、Claude Codeが表示された画面を確認しながら
テスト内容を考えることができます。

本記事では、この仕組みを使った対話的なUIテスト作成を紹介します。

公式リポジトリ

https://github.com/microsoft/playwright-mcp

Claude Code × Playwright MCPで何が変わるのか

従来のPlaywrightテスト構築では、

  • 実装者がブラウザで挙動を確認
  • DOM構造やセレクタを調査
  • その内容を元にテストコードを書く

という流れが一般的でした。

Claude CodeにPlaywright MCPを組み合わせることで、
この「確認作業」をAIと共有できるようになります。

Playwright MCPを通じてClaude Codeは、
特定の画面サイズでの表示結果や操作後の要素情報を取得し、
その情報を元にテスト内容を提案・コード生成します。

結果として、

  • セレクタ調査にかける時間が減る
  • 操作手順をテストコードに落とす時間が減る
  • 動かないテストを書いてしまう手戻りが減る

という変化を感じました。

対話型でテストを作るワークフロー

このワークフローの良いところは、

「テストコードを書く前に、人間とAIで何をテストするか合意する」 点にあります。

大まかな流れは次の通りです。

  1. Claude CodeがPlaywright MCPを使ってブラウザを操作
  2. 画面表示や要素情報を確認した上で、テスト候補を提示
  3. 人間が内容を確認・承認
  4. 承認された内容をテストコードとして生成
  5. 生成したテストコードの動作をClaude Codeと人間の両面で確認

これにより、テストコードを自動生成しながらも どういったテストが行われているのかがスムーズに理解できます。

実例: モバイルナビゲーションのテスト構築

例として、DevelopersIO(https://dev.classmethod.jp)の

モバイル表示時のハンバーガーメニューをテストするケースを紹介します。

動画を再掲

Claude Codeに

「モバイル画面で左上にハンバーガーメニューが表示されて、クリックするとメニューが開くテストしたい」

と伝えると、Playwright MCPを使って以下を自動で行います。

  • モバイルサイズへリサイズ
  • 対象ページへ遷移
  • 画面表示や要素情報を取得
  • スクリーンショットによる視覚確認

確認した動作内容として、次のようなテスト項目を提案されました。

  1. モバイル画面(375px幅)で左上にハンバーガーメニュー(≡アイコン)が表示される
  2. メニューボタンをクリックするとナビゲーションメニューが開く
  3. メニューにはAWS、Amazon EC2、AWS IAM、Google Cloud、ChatGPT、Python、LINE、ビジネス・アナリティクス、Looker、セミナー、事例などのリンクが表示される
  4. メニューが開くとアイコンが「×」に変わる

この内容を承認すると、Claude CodeはPlaywrightのテストコードを生成し、実行して動作確認をします。

テストコード生成例
test("ハンバーガーメニューをクリックするとメニューが開く", async ({ page }) => {
  await page.goto("/");

  // ハンバーガーメニューボタンが表示されていることを確認
  const menuButton = page.getByRole("button", { name: "メニューボタン" });
  await expect(menuButton).toBeVisible();

  // メニューが閉じている状態であることを確認
  await expect(menuButton).not.toHaveAttribute("aria-expanded", "true");

  // メニューボタンをクリック
  await menuButton.click();

  // メニューが開いたことを確認(aria-expanded属性がtrueになる)
  await expect(menuButton).toHaveAttribute("aria-expanded", "true");

  // メニュー内のリンクが表示されていることを確認
  const menuList = page.locator("button[aria-expanded='true'] + ul");
  await expect(menuList).toBeVisible();

  // メニュー内のリンクがいくつか存在することを確認
  await expect(menuList.getByRole("link", { name: "AWS" })).toBeVisible();
  await expect(menuList.getByRole("link", { name: "Python" })).toBeVisible();
});

失敗すれば、原因を分析して対応し、再実行します。

ヘッド付きで実行すれば、ブラウザ上での挙動を人間も確認できるため、テスト内容の把握が簡単になります。

補足:マルチデバイス実行でテストが失敗した例

作成したテストケースはPlaywrightのテストコードになっているため、マルチブラウザ・マルチデバイスを想定してテスト実行することが可能です。

そして、モバイル向けに「ブログカードが縦一列に表示されること」というテストを作り、iPadで実行したところテストが失敗しました。

画面幅が広いため、想定していた1カラム表示になっていなかったことが、レポートのスクリーンショットで確認できます。

(システム側に問題が見当たらないので、わざと失敗するようなテストケースを作成しました(:P)

Playwrightレポートの画像

playwright

このような失敗についても、実行結果を確認しながらClaude Codeとテスト条件を見直していけます。

まとめ

Claude Code と Playwright MCP を組み合わせることで、

  • ブラウザ確認とテスト作成が分断されない
  • 手戻りの少ないUIテスト構築ができる

というメリットを感じました。

AIが生成するテストコードをそのまま信用するのはまだ難しいですが、
テストコードの生成は圧倒的に早いです。
AIにテストコードを生成してもらいながら、適宜テストコードの修正をすることで楽にPlaywrightのテストが作れそうです。

参考リンク

この記事をシェアする

FacebookHatena blogX

関連記事