Catalog
anthropics/webapp-testing

anthropics

webapp-testing

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

globalComplete terms in LICENSE.txt
0installs0uses~945
v1.0Saved Apr 5, 2026

Web Application Testing

To test local web applications, write native Python Playwright scripts.

Helper Scripts Available:

  • scripts/with_server.py - Manages server lifecycle (supports multiple servers)

Always run scripts with --help first to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.

Decision Tree: Choosing Your Approach

User task → Is it static HTML?
    ├─ Yes → Read HTML file directly to identify selectors
    │         ├─ Success → Write Playwright script using selectors
    │         └─ Fails/Incomplete → Treat as dynamic (below)
    │
    └─ No (dynamic webapp) → Is the server already running?
        ├─ No → Run: python scripts/with_server.py --help
        │        Then use the helper + write simplified Playwright script
        │
        └─ Yes → Reconnaissance-then-action:
            1. Navigate and wait for networkidle
            2. Take screenshot or inspect DOM
            3. Identify selectors from rendered state
            4. Execute actions with discovered selectors

Example: Using with_server.py

To start a server, run --help first, then use the helper:

Single server:

python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py

Multiple servers (e.g., backend + frontend):

python scripts/with_server.py \
  --server "cd backend && python server.py" --port 3000 \
  --server "cd frontend && npm run dev" --port 5173 \
  -- python your_automation.py

To create an automation script, include only Playwright logic (servers are managed automatically):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode
    page = browser.new_page()
    page.goto('http://localhost:5173') # Server already running and ready
    page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute
    # ... your automation logic
    browser.close()

Reconnaissance-Then-Action Pattern

  1. Inspect rendered DOM:

    page.screenshot(path='/tmp/inspect.png', full_page=True)
    content = page.content()
    page.locator('button').all()
    
  2. Identify selectors from inspection results

  3. Execute actions using discovered selectors

Common Pitfall

Don't inspect the DOM before waiting for networkidle on dynamic apps ✅ Do wait for page.wait_for_load_state('networkidle') before inspection

Best Practices

  • Use bundled scripts as black boxes - To accomplish a task, consider whether one of the scripts available in scripts/ can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use --help to see usage, then invoke directly.
  • Use sync_playwright() for synchronous scripts
  • Always close the browser when done
  • Use descriptive selectors: text=, role=, CSS selectors, or IDs
  • Add appropriate waits: page.wait_for_selector() or page.wait_for_timeout()

Reference Files

  • examples/ - Examples showing common patterns:
    • element_discovery.py - Discovering buttons, links, and inputs on a page
    • static_html_automation.py - Using file:// URLs for local HTML
    • console_logging.py - Capturing console logs during automation
Files5
5 files · 18.1 KB

Select a file to preview

Overall Score

83/100

Grade

B

Good

Safety

82

Quality

85

Clarity

84

Completeness

78

Summary

A Playwright-based web application testing toolkit that guides agents in writing Python scripts to interact with and test local web applications. It provides a decision tree for choosing between static HTML and dynamic webapp testing approaches, helper scripts for server lifecycle management, and example patterns for common testing tasks like element discovery, console logging, and form automation.

Detected Capabilities

Launch and manage Chromium browser instances via PlaywrightStart and monitor multiple local servers with port readiness detectionNavigate to URLs and wait for network idle stateCapture full-page screenshots and inspect rendered DOMExtract page content, console logs, and element metadataInteract with page elements (click, fill, submit)Write output files (screenshots, logs) to filesystemExecute Python subprocess commands with shell=True

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

test web appplaywright automationui testingbrowser automationcapture screenshotverify functionalitydebug frontendelement discovery

Risk Signals

WARNING

subprocess.Popen with shell=True in with_server.py

scripts/with_server.py:95-98
WARNING

Arbitrary command execution through --server argument

scripts/with_server.py:68-74
INFO

Output file writes to /mnt/user-data/outputs (external project directory)

examples/console_logging.py:30, examples/static_html_automation.py:25,28
INFO

File traversal via file:// URLs to arbitrary local HTML files

examples/static_html_automation.py:6-7
INFO

Typo in SKILL.md: 'abslutely' should be 'absolutely'

SKILL.md:12

Referenced Domains

External domains referenced in skill content, detected by static analysis.

localhostwww.apache.org

Use Cases

  • Test dynamic web applications with Playwright by automating browser interactions
  • Verify frontend functionality and UI behavior against running local servers
  • Capture browser screenshots and console logs for debugging
  • Discover and interact with page elements using selectors and text matching
  • Manage multiple coordinated servers (backend + frontend) during testing

Quality Notes

  • Strong decision tree structure clearly guides agent toward appropriate testing approach (static vs. dynamic)
  • Excellent emphasis on critical best practice: wait for networkidle before DOM inspection to avoid race conditions
  • Helper script design promotes safe encapsulation—agents told to use scripts as black boxes rather than ingesting large code into context
  • Well-documented examples cover three common patterns: element discovery, static HTML, and console logging
  • Clear warning about common pitfall (inspecting DOM before networkidle) with checkmark/X formatting for visual clarity
  • Comprehensive usage documentation in with_server.py docstring covers both single and multi-server scenarios
  • Minor: with_server.py lacks explicit error handling guidance for common failures (server crashes, port conflicts, timeout)
  • Minor: Examples use hardcoded localhost ports (5173, 3000) without explaining how to customize for different projects
  • Minor: No guidance on dealing with authentication, CORS, or other common testing complexities
  • File paths in examples (/tmp/inspect.png, /mnt/user-data/outputs) are platform-specific; could benefit from cross-platform guidance
Model: claude-haiku-4-5-20251001Analyzed: Apr 5, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Add anthropics/webapp-testing to your library

Command Palette

Search for a command to run...