agentsclimarketplace

Webapp testing

Skill wachawo/claude-skills/skills/webapp-testing

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

Install
npx -y skills add wachawo/claude-skills --skill webapp-testing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

3.8 KB, 834 tokens by cl100k_base, as published. Nobody here has run it

Web Application Testing

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

Available helper scripts:

  • scripts/with_server.py — manages the server lifecycle (supports multiple servers)

Always run scripts with --help first to see usage. Do NOT read the source until you have tried running the script and discovered that a custom solution is absolutely necessary. These scripts can be very large and would otherwise pollute the context window. They are designed to be invoked directly as black-box scripts, not absorbed into context.

Decision tree: choosing an 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 launch 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 the 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 the 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 the discovered selectors

Common pitfall

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

Best practices

  • Use bundled scripts as a black box — To accomplish a task, consider whether one of the scripts in scripts/ can help. These scripts reliably handle common complex workflows without polluting the context window. Use --help to see usage, then invoke directly.
  • Use sync_playwright() for synchronous scripts
  • Always close the browser when finished
  • 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 input fields on a page
    • static_html_automation.py — Using a file:// URL for local HTML
    • console_logging.py — Capturing console logs during automation

What ships with it: 4 files

7.0 KB alongside SKILL.md, 4 of them executable

scripts/

Keep looking

Skills are one crate of 326,758. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.