Generated banner for Webapp Testing
Generated logo for Webapp Testing

Webapp Testing

JetBrainsOfficialCreated by AnthropicDistributed by JetBrains

  • 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

The webapp-testing skill provides a structured approach to testing local web applications using Playwright. It includes helper scripts for managing server lifecycles, ensuring that backend and frontend services are ready before automation begins. The skill emphasizes a reconnaissance-then-action pattern, encouraging users to inspect the rendered DOM and identify selectors only after ensuring the page has reached a stable state. It is designed to be used as a black-box integration, keeping automation scripts clean and focused on Playwright logic.

What it does

  • Manages local server lifecycles for single or multi-service applications
  • Provides patterns for inspecting rendered DOM and identifying UI selectors
  • Supports automated browser interactions including navigation and element manipulation
  • Facilitates debugging through screenshot capture and console log retrieval
  • Offers templates for static HTML and dynamic web application testing

When to use it

  • When you need to verify frontend functionality of a local web application
  • When you need to automate interactions with a dynamic web UI
  • When you need to debug UI behavior or capture visual states of a web app
  • When you need to coordinate the startup of multiple local services for testing

Advantages

  • Reduces context window clutter by treating complex server management as black-box scripts
  • Ensures reliable testing by enforcing wait states like networkidle
  • Provides a clear decision tree for choosing between static and dynamic testing approaches
  • Standardizes the reconnaissance-then-action workflow for UI automation

Usage examples

“Start my local frontend server on port 5173 and run my automation script.”
The agent uses the provided helper script to launch the server, waits for it to be ready, and then executes the specified Playwright automation script.
“How do I inspect the buttons on my local web page?”
The agent provides a snippet to navigate to the page, wait for networkidle, and use page.locator('button').all() to list available elements.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/jetbrains/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

Requirements and compatibility

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

Created by
Anthropic
Publisher
JetBrains (Official)
Distributed by
JetBrains
Source
JetBrains/skills · webapp-testing · commit 3f53782
Licence
Apache License 2.0 (redistribution allowed)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

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

Download ZIP

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