Skip to content
chrome-devtools-mcp logo

Chrome DevTools MCP - UI Testing Skill

chrome-devtools-mcp

Testing UI and automating browsers via Chrome DevTools MCP. Use when taking screenshots, checking console errors, testing UI interactions, or verifying visual changes.

SKILL.md

Full skill instructions

Chrome DevTools MCP - UI Testing Skill

Auto-activation Triggers

English

  • "test UI", "test the UI", "UI test"
  • "open browser", "launch browser"
  • "take screenshot", "capture screenshot"
  • "check console errors", "any console errors"
  • "test in browser", "verify in browser"

中文

  • "測試 UI"、"UI 測試"、"測試畫面"
  • "開瀏覽器"、"啟動瀏覽器"
  • "截圖"、"擷取畫面"
  • "檢查錯誤"、"有沒有錯誤"、"console 錯誤"
  • "瀏覽器測試"、"在瀏覽器驗證"

Auto-trigger Scenarios

  • User completed a feature and needs visual verification
  • User asks to verify a UI change
  • User wants to debug a visual issue

Prerequisites

Ensure Chrome DevTools MCP is configured in Claude Code:

claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest

Or with options:

# Headless mode (no UI)
claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --headless

# Isolated session (clean browser state)
claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --isolated

Available MCP Tools (26 total)

Navigation & Pages

ToolDescription
mcp__chrome-devtools__new_pageOpen new page with URL
mcp__chrome-devtools__navigate_pageNavigate to URL, back, forward, reload
mcp__chrome-devtools__list_pagesList all open pages
mcp__chrome-devtools__select_pageSelect page by index
mcp__chrome-devtools__close_pageClose page by index
mcp__chrome-devtools__wait_forWait for text to appear

Input & Interaction

ToolDescription
mcp__chrome-devtools__clickClick element by uid
mcp__chrome-devtools__fillFill input/​textarea/​select
mcp__chrome-devtools__fill_formFill multiple form elements
mcp__chrome-devtools__hoverHover over element
mcp__chrome-devtools__dragDrag element to another
mcp__chrome-devtools__press_keyPress key or combination
mcp__chrome-devtools__handle_dialogAccept/​dismiss browser dialogs
mcp__chrome-devtools__upload_fileUpload file through input

Debugging & Inspection

ToolDescription
mcp__chrome-devtools__take_snapshotGet page A11y tree with UIDs
mcp__chrome-devtools__take_screenshotCapture page/​element screenshot
mcp__chrome-devtools__evaluate_scriptRun JavaScript in page
mcp__chrome-devtools__list_console_messagesList console messages
mcp__chrome-devtools__get_console_messageGet specific console message

Network

ToolDescription
mcp__chrome-devtools__list_network_requestsList network requests
mcp__chrome-devtools__get_network_requestGet request details

Performance

ToolDescription
mcp__chrome-devtools__performance_start_traceStart performance trace
mcp__chrome-devtools__performance_stop_traceStop trace recording
mcp__chrome-devtools__performance_analyze_insightAnalyze performance insights

Emulation

ToolDescription
mcp__chrome-devtools__emulateEmulate network/​CPU throttling
mcp__chrome-devtools__resize_pageResize viewport

Common UI Testing Patterns

1. Basic Page Verification

1. take_snapshot → Get page structure with element UIDs
2. take_screenshot → Visual verification
3. list_console_messages → Check for errors

2. Form Testing Flow

1. new_page → Open target URL
2. take_snapshot → Get form element UIDs
3. fill_form → Fill all form fields
4. click → Submit button
5. wait_for → Wait for success message
6. take_screenshot → Capture result

3. Interactive Component Testing

1. take_snapshot → Get element UIDs
2. click → Trigger component action
3. take_snapshot → Verify state change
4. list_console_messages → Check for errors

4. Responsive Design Testing

1. resize_page → Set mobile viewport (375x667)
2. take_screenshot → Mobile view
3. resize_page → Set tablet viewport (768x1024)
4. take_screenshot → Tablet view
5. resize_page → Set desktop viewport (1920x1080)
6. take_screenshot → Desktop view

5. Performance Audit

1. performance_start_trace → Begin recording
2. navigate_page → Load page
3. performance_stop_trace → End recording
4. performance_analyze_insight → Get CWV scores

6. Network Request Verification

1. navigate_page → Load page
2. list_network_requests → See all requests
3. get_network_request → Check specific API response

Workflow: Post-Feature UI Verification

When you complete a feature that requires UI testing:

Step 1: Start Browser

Use: mcp__chrome-devtools__new_page
URL: http://localhost:{PORT}/​path-to-feature

Common ports:
- Next.js: 3000 or custom (this project: 1408)
- Vite: 5173
- Angular: 4200

Step 2: Take Snapshot (ALWAYS do this first)

Use: mcp__chrome-devtools__take_snapshot
This returns element UIDs needed for interactions

Step 3: Interact with Elements

Use element UIDs from snapshot to:
- click buttons
- fill forms
- hover for tooltips

Step 4: Verify Results

- take_screenshot for visual verification
- list_console_messages for error checking
- take_snapshot for DOM state verification

Error Handling

Navigation Timeout

If navigate_page times out:

  1. Check if dev server is running
  2. Use new_page instead of navigate_page
  3. Increase timeout: timeout: 30000

Element Not Found

If click/​fill fails:

  1. Re-run take_snapshot to get latest UIDs
  2. Verify element is within viewport
  3. Use wait_for to wait for element to appear

Page Not Loading

If page fails to load:

  1. Verify URL is correct
  2. Check dev server logs
  3. Try navigate_page with type: "reload"

Tips

  1. Always take_snapshot first - You need element UIDs before interacting
  2. Prefer snapshot over screenshot - Faster and provides actionable data
  3. Check console after interactions - Catch runtime errors early
  4. Use wait_for after navigation - Ensure page is loaded before interacting
  5. Filter network requests - Use resourceTypes to focus on API calls
  6. Re-snapshot after interactions - UIDs may change after DOM updates

Quick Reference

# Open dev server and test
mcp__chrome-devtools__new_page → http://localhost:{PORT}

# Get page structure
mcp__chrome-devtools__take_snapshot

# Interact (use UID from snapshot)
mcp__chrome-devtools__click → uid: "abc123"
mcp__chrome-devtools__fill → uid: "input1", value: "test"

# Verify
mcp__chrome-devtools__take_screenshot
mcp__chrome-devtools__list_console_messages → types: ["error", "warn"]

Complete Example: Testing a Login Form

Complete login form testing workflow:

Step 1: Open login page
────────────────────
mcp__chrome-devtools__new_page
  url: "http://localhost:3000/​login"

Step 2: Get page structure
────────────────────
mcp__chrome-devtools__take_snapshot

Output:
  uid=1_10 textbox "Email"
  uid=1_15 textbox "Password"
  uid=1_20 button "Sign In"

Step 3: Fill form
────────────────────
mcp__chrome-devtools__fill_form
  elements: [
    { uid: "1_10", value: "[email protected]" },
    { uid: "1_15", value: "password123" }
  ]

Step 4: Click login
────────────────────
mcp__chrome-devtools__click
  uid: "1_20"

Step 5: Wait for result
────────────────────
mcp__chrome-devtools__wait_for
  text: "Welcome"
  timeout: 5000

Step 6: Verify
────────────────────
mcp__chrome-devtools__take_screenshot  → Verify UI is correct
mcp__chrome-devtools__list_console_messages → Check for errors
  types: ["error", "warn"]

Step 7: Check API requests (optional)
────────────────────
mcp__chrome-devtools__list_network_requests
  resourceTypes: ["fetch", "xhr"]

Responsive Testing Example

Test responsive design across breakpoints:

# Mobile (iPhone SE)
mcp__chrome-devtools__resize_page → width: 375, height: 667
mcp__chrome-devtools__take_screenshot

# Tablet (iPad)
mcp__chrome-devtools__resize_page → width: 768, height: 1024
mcp__chrome-devtools__take_screenshot

# Desktop
mcp__chrome-devtools__resize_page → width: 1920, height: 1080
mcp__chrome-devtools__take_screenshot