jpskill.com
🛠️ 開発・MCP コミュニティ

browser-testing-with-screenshots

WebアプリケーションのUIが正しく機能しているかを確認するため、Chromeブラウザを操作し、要素を選択してスクリーンショットを自動で撮影し、視覚的に検証するテストを効率化するSkill。

📜 元の英語説明(参考)

Use when testing web applications with visual verification - automates Chrome browser interactions, element selection, and screenshot capture for confirming UI functionality

🇯🇵 日本人クリエイター向け解説

一言でいうと

WebアプリケーションのUIが正しく機能しているかを確認するため、Chromeブラウザを操作し、要素を選択してスクリーンショットを自動で撮影し、視覚的に検証するテストを効率化するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o browser-testing-with-screenshots.zip https://jpskill.com/download/17071.zip && unzip -o browser-testing-with-screenshots.zip && rm browser-testing-with-screenshots.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17071.zip -OutFile "$d\browser-testing-with-screenshots.zip"; Expand-Archive "$d\browser-testing-with-screenshots.zip" -DestinationPath $d -Force; ri "$d\browser-testing-with-screenshots.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して browser-testing-with-screenshots.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → browser-testing-with-screenshots フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

スクリーンショットを用いたブラウザテスト

概要

browser-tools を使用して、ビジュアル検証による Chrome ブラウザテストを自動化します。 Chrome DevTools Protocol に接続して、ナビゲーション、インタラクション、およびスクリーンショットのキャプチャを行い、アプリケーションの機能を確認します。

前提条件

必須: https://github.com/badlogic/agent-tools から agent-tools をインストールします。

# agent-tools をクローンしてインストールします
git clone https://github.com/badlogic/agent-tools.git
cd agent-tools
# リポジトリ内のインストール手順に従ってください
# すべての実行可能ファイル (browser-start.js, browser-nav.js など) が PATH にあることを確認してください

インストールの確認:

# ブラウザツールが利用可能であることを確認します
which browser-start.js
which browser-nav.js
which browser-screenshot.js

このスキルで参照されるすべての browser-* コマンドは、agent-tools リポジトリからのものであり、システム PATH に適切にインストールされ、アクセス可能である必要があります。

使用場面

このスキルは、以下の場合に使用します。

  • Web アプリケーションの UI フローをテストする場合
  • ビジュアルな変更やレイアウトを検証する場合
  • 繰り返しのブラウザ操作を自動化する場合
  • スクリーンショットでアプリケーションの動作をドキュメント化する場合
  • 開発中に localhost アプリケーションをテストする場合
  • 人間のような選択を必要とする要素と対話する必要がある場合

以下の場合には使用しないでください。

  • API テスト (直接 HTTP 呼び出しを使用)
  • ビジュアルが重要でないヘッドレステスト
  • 単純なページコンテンツの検証 (curl/wget を使用)

クイックリファレンス

タスク コマンド 目的
ブラウザの起動 browser-start.js デバッグで Chrome を起動
ナビゲーション browser-nav.js http://localhost:5172/dashboard 特定の URL に移動
スクリーンショットの撮影 browser-screenshot.js 現在のビューポートをキャプチャ
要素の選択 browser-pick.js "Select the login button" インタラクティブな要素選択
JavaScript の実行 browser-eval.js 'document.title' ページコンテキストでコードを実行
コンテンツの抽出 browser-content.js 読み取り可能なページコンテンツを取得
Cookie の表示 browser-cookies.js セッション Cookie を一覧表示

セットアップと基本的なワークフロー

1. リモートデバッグで Chrome を起動する

# デバッグを有効にして Chrome を起動します (ユーザープロファイルを保持します)
browser-start.js

# または、新たに開始します (Cookie なし、クリーンな状態)
browser-start.js --fresh

期待される結果: DevTools Protocol が有効になった状態で、Chrome がポート 9222 で開きます。

2. アプリケーションに移動する

# アプリケーションの開始点に移動します
browser-nav.js http://localhost:5172/dashboard

検証: ブラウザがダッシュボードページに移動します。

3. ベースラインのスクリーンショットをキャプチャする

# ページがロードされたことを確認するために、最初のスクリーンショットを撮影します
browser-screenshot.js

出力: スクリーンショットファイルへのパスを返します (例: screenshot_20231203_141532.png)。

スクリーンショットを用いたテストワークフロー

テストシナリオの完全な例

#!/bin/bash
# ログインとダッシュボードの機能をテストします

echo "🚀 ブラウザテストを開始します..."

# 1. ブラウザを起動します
browser-start.js --fresh

# 2. ログインページに移動します
browser-nav.js http://localhost:5172/login
sleep 2

# 3. ログインページのスクリーンショットを撮影します
LOGIN_SHOT=$(browser-screenshot.js)
echo "📸 ログインページ: $LOGIN_SHOT"

# 4. ログインフォームに入力します (インタラクティブな要素選択)
browser-pick.js "Click the username field"
browser-eval.js 'document.activeElement.value = "testuser"'

browser-pick.js "Click the password field"
browser-eval.js 'document.activeElement.value = "password123"'

# 5. フォーム入力後のスクリーンショット
FORM_SHOT=$(browser-screenshot.js)
echo "📸 フォーム入力後: $FORM_SHOT"

# 6. フォームを送信します
browser-pick.js "Click the login button"
sleep 3

# 7. ダッシュボードがロードされたことを確認します
browser-nav.js http://localhost:5172/dashboard
DASHBOARD_SHOT=$(browser-screenshot.js)
echo "📸 ダッシュボード: $DASHBOARD_SHOT"

# 8. 特定のダッシュボード要素を検証します
browser-pick.js "Select the navigation menu"
browser-eval.js 'console.log("Navigation found:", !!document.querySelector(".nav"))'

echo "✅ テスト完了。スクリーンショットが保存されました。"

要素インタラクションのパターン

# インタラクティブな要素選択 (動的なコンテンツに最適)
browser-pick.js "Select the submit button"
# ユーザーがブラウザで要素をクリック → CSS セレクターを返します

# 返されたセレクターを自動化に使用します
SELECTOR=$(browser-pick.js "Select the submit button" | grep "selector:")
browser-eval.js "document.querySelector('$SELECTOR').click()"

# スクリーンショットを撮影してアクションを検証します
browser-screenshot.js

高度な使用法

複雑なインタラクションのための JavaScript 評価

# インタラクションの前に要素が存在するかどうかを確認します
browser-eval.js 'document.querySelector("#login-form") !== null'

# 動的なコンテンツを待ちます
browser-eval.js '
  new Promise(resolve => {
    const check = () => {
      if (document.querySelector(".loaded")) resolve(true);
      else setTimeout(check, 100);
    };
    check();
  })
'

# フォームデータを抽出します
browser-eval.js 'JSON.stringify(Object.fromEntries(new FormData(document.querySelector("form"))))'

タイミング付きのスクリーンショット

# ナビゲートして、スクリーンショットを撮影する前に待ちます
browser-nav.js http://localhost:5172/slow-page
sleep 5  # アニメーション/ロードを待ちます
browser-screenshot.js

検証のためのコンテンツ抽出

# ページタイトルを取得します
PAGE_TITLE=$(browser-eval.js 'document.title')
echo "現在のページ: $PAGE_TITLE"

# 読み取り可能なコンテンツを抽出します
browser-content.js > page_content.md

# 特定のテキストを確認します
browser-eval.js 'document.body.textContent.includes("Welcome to Dashboard")'

よくある間違い

間違い 問題 解決策
ナビゲーション後のスリープがない ロード中のページのスクリーンショット nav の後に sleep 2-5 を追加
ハードコードされたセレクター UI が変更されると壊れる 選択に browser-pick.js を使用
Chrome のセットアップがない "Connection refused" エラー 最初に browser-start.js を実行
間違った localhost ポート ナビゲーションが失敗する アプリケーションが正しいポートで実行されていることを確認
スクリーンショットのタイミング コンテンツがロードされる前にキャプチャ ページロードまたは特定の要素を待つ
状態が保持されない コマンド間でログインが失われる デフォルトを使用

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Browser Testing with Screenshots

Overview

Automate Chrome browser testing with visual verification using browser-tools. Connect to Chrome DevTools Protocol for navigation, interaction, and screenshot capture to confirm application functionality.

Prerequisites

REQUIRED: Install agent-tools from https://github.com/badlogic/agent-tools

# Clone and install agent-tools
git clone https://github.com/badlogic/agent-tools.git
cd agent-tools
# Follow installation instructions in the repository
# Ensure all executables (browser-start.js, browser-nav.js, etc.) are in your PATH

Verify installation:

# Check that browser tools are available
which browser-start.js
which browser-nav.js
which browser-screenshot.js

All browser-* commands referenced in this skill come from the agent-tools repository and must be properly installed and accessible in your system PATH.

When to Use

Use this skill when:

  • Testing web application UI flows
  • Verifying visual changes or layouts
  • Automating repetitive browser interactions
  • Documenting application behavior with screenshots
  • Testing localhost applications during development
  • Need to interact with elements that require human-like selection

Don't use for:

  • API testing (use direct HTTP calls)
  • Headless testing where visuals don't matter
  • Simple page content validation (use curl/wget)

Quick Reference

Task Command Purpose
Start browser browser-start.js Launch Chrome with debugging
Navigate browser-nav.js http://localhost:5172/dashboard Go to specific URL
Take screenshot browser-screenshot.js Capture current viewport
Pick elements browser-pick.js "Select the login button" Interactive element selection
Run JavaScript browser-eval.js 'document.title' Execute code in page context
Extract content browser-content.js Get readable page content
View cookies browser-cookies.js List session cookies

Setup and Basic Workflow

1. Start Chrome with Remote Debugging

# Launch Chrome with debugging enabled (preserves user profile)
browser-start.js

# Or start fresh (no cookies, clean state)
browser-start.js --fresh

Expected Result: Chrome opens on port 9222 with DevTools Protocol enabled

2. Navigate to Application

# Go to your application starting point
browser-nav.js http://localhost:5172/dashboard

Verify: Browser navigates to dashboard page

3. Capture Baseline Screenshot

# Take initial screenshot to confirm page loaded
browser-screenshot.js

Output: Returns path to screenshot file (e.g., screenshot_20231203_141532.png)

Testing Workflow with Screenshots

Complete Test Scenario Example

#!/bin/bash
# Test login and dashboard functionality

echo "🚀 Starting browser test..."

# 1. Launch browser
browser-start.js --fresh

# 2. Navigate to login page
browser-nav.js http://localhost:5172/login
sleep 2

# 3. Take screenshot of login page
LOGIN_SHOT=$(browser-screenshot.js)
echo "📸 Login page: $LOGIN_SHOT"

# 4. Fill login form (interactive element picking)
browser-pick.js "Click the username field"
browser-eval.js 'document.activeElement.value = "testuser"'

browser-pick.js "Click the password field"
browser-eval.js 'document.activeElement.value = "password123"'

# 5. Screenshot filled form
FORM_SHOT=$(browser-screenshot.js)
echo "📸 Filled form: $FORM_SHOT"

# 6. Submit form
browser-pick.js "Click the login button"
sleep 3

# 7. Verify dashboard loaded
browser-nav.js http://localhost:5172/dashboard
DASHBOARD_SHOT=$(browser-screenshot.js)
echo "📸 Dashboard: $DASHBOARD_SHOT"

# 8. Verify specific dashboard elements
browser-pick.js "Select the navigation menu"
browser-eval.js 'console.log("Navigation found:", !!document.querySelector(".nav"))'

echo "✅ Test complete. Screenshots saved."

Element Interaction Pattern

# Interactive element selection (best for dynamic content)
browser-pick.js "Select the submit button"
# User clicks element in browser → returns CSS selector

# Use returned selector for automation
SELECTOR=$(browser-pick.js "Select the submit button" | grep "selector:")
browser-eval.js "document.querySelector('$SELECTOR').click()"

# Take screenshot to verify action
browser-screenshot.js

Advanced Usage

JavaScript Evaluation for Complex Interactions

# Check if element exists before interaction
browser-eval.js 'document.querySelector("#login-form") !== null'

# Wait for dynamic content
browser-eval.js '
  new Promise(resolve => {
    const check = () => {
      if (document.querySelector(".loaded")) resolve(true);
      else setTimeout(check, 100);
    };
    check();
  })
'

# Extract form data
browser-eval.js 'JSON.stringify(Object.fromEntries(new FormData(document.querySelector("form"))))'

Screenshot with Timing

# Navigate and wait before screenshot
browser-nav.js http://localhost:5172/slow-page
sleep 5  # Wait for animations/loading
browser-screenshot.js

Content Extraction for Verification

# Get page title
PAGE_TITLE=$(browser-eval.js 'document.title')
echo "Current page: $PAGE_TITLE"

# Extract readable content
browser-content.js > page_content.md

# Check for specific text
browser-eval.js 'document.body.textContent.includes("Welcome to Dashboard")'

Common Mistakes

Mistake Problem Solution
No sleep after navigation Screenshots of loading page Add sleep 2-5 after nav
Hardcoded selectors Breaks when UI changes Use browser-pick.js for selection
Missing Chrome setup "Connection refused" errors Run browser-start.js first
Wrong localhost port Navigation fails Verify application is running on correct port
Screenshot timing Captures before content loads Wait for page load or specific elements
Not preserving state Login lost between commands Use default profile, not --fresh

Error Handling

# Check if Chrome is running
if ! browser-eval.js 'true' 2>/dev/null; then
  echo "❌ Chrome not connected. Running browser-start.js..."
  browser-start.js
fi

# Verify navigation succeeded
if browser-eval.js 'location.href.includes("dashboard")'; then
  echo "✅ Navigation successful"
else
  echo "❌ Navigation failed"
  exit 1
fi

File Output Patterns

  • Screenshots: screenshot_YYYYMMDD_HHMMSS.png in current directory
  • Content: Markdown format via stdout from browser-content.js
  • Selectors: CSS selectors from browser-pick.js interaction
  • JavaScript results: JSON or string values from browser-eval.js

Integration with Testing Frameworks

# Create test evidence directory
mkdir -p test-results/$(date +%Y%m%d_%H%M%S)
cd test-results/$(date +%Y%m%d_%H%M%S)

# Run tests with organized screenshots
browser-start.js
for page in login dashboard profile; do
  browser-nav.js "http://localhost:5172/$page"
  sleep 2
  screenshot=$(browser-screenshot.js)
  mv "$screenshot" "${page}_page.png"
  echo "✅ $page page tested"
done

Real-World Impact

Benefits:

  • Visual verification: Screenshots provide immediate feedback on UI state
  • Interactive debugging: Element picker works with dynamic/complex selectors
  • State preservation: Maintains login sessions between commands
  • Evidence collection: Automated screenshot capture for test documentation
  • Development workflow: Quick verification of localhost changes

Results:

  • Faster UI testing iteration (visual confirmation vs manual checking)
  • Reliable element selection (human picks, automation uses)
  • Test documentation with visual proof
  • Catches visual regressions immediately

Key principle: Combine automated navigation with human element selection for robust, maintainable browser testing.