All skills
anthropics avatar

/webapp-testing

@ef74077 official
by Anthropicanthropics/skills179k stars
21,193

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.

Use this Skill: https://skilld.dev/gh/anthropics/skills/webapp-testing

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ55 tokens always: the name and description. β‰ˆ907 when used: this file.

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

Source: SKILL.md on GitHub

3 warnings17d5 checks Β· Risk SAFE
  • Gen Agent Trust Hub17d

    This skill includes some security considerations such as command execution capabilities and interaction with external web content. While these warrant review, they are used within the skill's intended functionality for local web application testing and server management. See detailed analysis for context.

  • Socket17d

    1 alert: gptAnomaly

  • Snyk17d

    Risk: MEDIUM Β· 1 issue

  • Runlayer7mo

    3/6 files flagged

  • ZeroLeaks5mo

    Score: 93/100 Β· 2 sections analyzed

Signed by skilld at ef74077. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 10 months ago

README badge

README badge for anthropics/skills/webapp-testing

Writes Python Playwright scripts to test local web applications, verify frontend functionality, and capture screenshots or browser logs. Includes a helper script for managing server lifecycle during testing, supporting both static HTML and dynamic webapps with single or multiple backend services.

Generated from the current SKILL.md.

Does this skill support headless browser testing?
Yes. The skill uses Playwright with Chromium launched in headless mode by default, suitable for CI/CD and automated testing environments.
Can I test a webapp with both backend and frontend servers running?
Yes. The with_server.py helper script supports starting multiple servers (e.g., backend on port 3000, frontend on port 5173) before running your Playwright automation.
What should I do before inspecting the DOM on a dynamic app?
Always call page.wait_for_load_state('networkidle') first to ensure JavaScript has executed and the DOM is fully rendered. Inspecting before this wait will miss dynamic content.
Can I capture screenshots and logs during testing?
Yes. The skill includes helpers for taking full-page screenshots and capturing browser console logs via Playwright's page and console APIs.
Do I need to read the helper scripts to use them?
No. The skill recommends running scripts with --help first and using them as black boxes rather than reading the source code, which can be large and pollute context.

Generated from the current SKILL.md. These answers refresh after source changes.