Generated banner for Webapp Testing
Generated logo for Webapp Testing

Webapp Testing

AnthropicOfficialPublished by Anthropic

  • Skill
  • Tool integration
  • Software development
  • Apache-2.0
  • Low risk
  • Has scripts

From the author

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.
— the description by Anthropic

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to testing local web applications using Python and Playwright. It emphasizes a reconnaissance-then-action pattern for dynamic web apps and includes helper scripts to manage server lifecycles, ensuring that automation scripts remain clean and focused on testing logic rather than infrastructure management.

What it does

  • Manages local server lifecycles for single or multi-service web applications
  • Provides patterns for inspecting rendered DOM and identifying UI selectors
  • Supports automated interaction with web elements using Playwright
  • Enables capturing screenshots and browser logs for debugging purposes
  • Offers a decision tree for choosing between static and dynamic testing approaches

When to use it

  • When you need to automate functional testing for a local web application
  • When you need to verify UI behavior or state in a browser environment
  • When managing complex local development environments during automated test runs
  • When you need to debug frontend issues by inspecting rendered DOM or console logs

Advantages

  • Reduces context window pollution by treating complex server management as a black box
  • Ensures reliable testing of dynamic apps through explicit network state waiting
  • Provides a consistent workflow for both static and dynamic web content
  • Includes ready-to-use examples for common tasks like element discovery and logging

Usage examples

“Start my local frontend server on port 5173 and run my test script.”
The agent uses the helper script to launch the server and execute the specified automation script, ensuring the server is ready before the test begins.
“How do I inspect the buttons on my local web page?”
The agent provides a snippet using page.locator('button').all() after ensuring the page has reached a networkidle state.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/anthropics/webapp-testing/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip webapp-testing.zip -d .agents/skills

Documentation by Anthropic

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

Files

ATTRIBUTION.md

Attribution

This folder is an unmodified copy of the Agent Skill "webapp-testing", distributed by AutoGineer (https://autogineer.com/agent-skills).

The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.

Files added by AutoGineer

  • ATTRIBUTION.md: this file, written by AutoGineer

Requirements and compatibility

Written for: Claude Code, Claude apps

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python, Needs Node.js

Security

What our scanner noticed· Low risk

  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Anthropic
Publisher
Anthropic (Official)
Source
anthropics/skills · skills/webapp-testing · commit 2c5958e
Licence
Apache License 2.0 (redistribution allowed)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Anthropic or Anthropic.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download webapp-testing.zip