Webapp Testing
JetBrainsOfficialCreated by AnthropicDistributed by JetBrains
- Skill
- Tool integration
- Software development
- Apache-2.0
- Low risk
- Has scripts
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
Download the skill as a ZIP:
https://autogineer.com/agent-skills/jetbrains/webapp-testing/downloadUnzip 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 selectorsExample: 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.pyMultiple 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.pyTo 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
Inspect rendered DOM:
page.screenshot(path='/tmp/inspect.png', full_page=True) content = page.content() page.locator('button').all()Identify selectors from inspection results
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--helpto see usage, then invoke directly.Use
sync_playwright()for synchronous scriptsAlways close the browser when done
Use descriptive selectors:
text=,role=, CSS selectors, or IDsAdd appropriate waits:
page.wait_for_selector()orpage.wait_for_timeout()
Reference Files
examples/ - Examples showing common patterns:
element_discovery.py- Discovering buttons, links, and inputs on a pagestatic_html_automation.py- Using file:// URLs for local HTMLconsole_logging.py- Capturing console logs during automation
Files
- ATTRIBUTION.mdAdded by AutoGineer918 B
- LICENSE.txt11.1 KiB
- SKILL.md4.0 KiB
- examples/console_logging.pyScript1.0 KiB
- examples/element_discovery.pyScript1.4 KiB
- examples/static_html_automation.pyScript953 B
- scripts/with_server.pyScript3.6 KiB
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