ブラウザQA — 自動ビジュアルテスト&インタラクション は何をしますか?
使用タイミング
- staging/preview環境にフィーチャーをデプロイした後
- ページ間のUI動作を確認する必要がある場合
- 出荷前にレイアウト、フォーム、インタラクションが実際に動作することを確認する
- フロントエンドコードに変更を加えるPRをレビューするとき
- アクセシビリティ監査やレスポンシブテストを行うとき
動作の仕組み
ブラウザ自動化MCP(claude-in-chrome、Playwright、Puppeteer)を使用して、実際のユーザーと同じようにライブページとインタラクションします。
安全第一 — 爆発半径(デフォルトは読み取り専用)
Browser QAは実際の認証と実際のユーザージャーニーを操作するため、爆発半径を明示的に扱います。 デフォルトは読み取り専用:本番URLに対して変更を伴うジャーニー(チェックアウト、支払い、削除、 大量更新)を決して実行しないでください — 明示的なオプトインかつ staging/preview URLが必要です。シードされたテスト用認証情報を使用し、実際の本番ログインは決して使用せず、スクリーンショットを保存する前に 認証情報/トークン/PIIを必ずマスクしてください。
フェーズ1: スモークテスト
1. ターゲットURLに移動
2. コンソールエラーをチェック(ノイズを除外:アナリティクス、サードパーティ)
3. ネットワークリクエストに4xx/5xxがないことを確認
4. デスクトップ + モバイルビューポートでファーストビューをスクリーンショット
5. Core Web Vitalsをチェック: LCP < 2.5s、CLS < 0.1、INP < 200ms
(INPは2024年3月にFIDを置き換えました。閾値はweb.devを参照)
フェーズ2: インタラクションテスト
1. すべてのナビゲーションリンクをクリック — デッドリンクがないことを確認
2. 有効なデータでフォームを送信 — 成功状態を確認
3. 無効なデータでフォームを送信 — エラー状態を確認
4. 認証フローをテスト: ログイン → 保護ページ → ログアウト(テスト認証情報のみ、本番は不可)
5. 重要なユーザージャーニーをテスト(チェックアウト、オンボーディング、検索)
— デフォルトは読み取り専用。変更を伴うジャーニーは staging に対してのみ
明示的なオプトインのもとで実行(上記「安全第一」を参照)
フェーズ3: ビジュアルリグレッション
1. 3つのブレークポイント(375px、768px、1440px)で主要ページをスクリーンショット
2. コミット済みのベースラインスクリーンショットと比較
— ベースラインがない場合は INCONCLUSIVE を報告し、決して黙って PASS しない
3. 5pxを超えるレイアウトシフト、欠落要素、オーバーフローをフラグ
4. 該当する場合はダークモードもチェック
フェーズ4: アクセシビリティ
1. 各ページで axe-core または同等のツールを実行
2. WCAG 2.2 AA違反をフラグ(コントラスト、ラベル、フォーカス順序)
3. キーボードナビゲーションがエンドツーエンドで機能することを確認
4. スクリーンリーダーのランドマークをチェック
注: axe-coreはWCAGの約30〜40%を自動カバーします。クリーンな実行は必要ですが、 十分ではありません — キーボードナビゲーション、フォーカス順序、スクリーンリーダーのパスは 依然として手動チェックが必要です。自動パスの結果だけで「アクセシブル」と報告しないでください。
出力形式
## QAレポート — [URL] — [タイムスタンプ]
### スモークテスト
- コンソールエラー: 0 致命的、2 警告(アナリティクスのノイズ)
- ネットワーク: すべて200/304、失敗なし
- Core Web Vitals: LCP 1.2s ✓、CLS 0.02 ✓、INP 89ms ✓
### インタラクション
- [✓] ナビゲーションリンク: 12/12 動作中
- [✗] お問い合わせフォーム: 無効なメールアドレスに対するエラー状態が欠落
- [✓] 認証フロー: ログイン/ログアウト 動作中
### ビジュアル
- [✗] ヒーローセクションが375pxビューポートでオーバーフロー
- [✓] ダークモード: 全ページ一貫
### アクセシビリティ
- AA違反2件: ヒーロー画像に代替テキスト欠落、フッターリンクのコントラスト不足
### 判定: 修正して出荷(問題2件、ブロッカー0件)
# 判定 ∈ SHIP / SHIP WITH FIXES / DO NOT SHIP。ビジュアルベースラインがない場合は INCONCLUSIVE を使用
連携
任意のブラウザMCPで動作:
mChild__claude-in-chrome__*ツール(推奨 — 実際のChromeを使用)- Playwright via
mcp__browserbase__* - 直接Puppeteerスクリプト
デプロイ後監視のために /canary-watch と組み合わせて使用。