skills/webapp-testing/SKILL.md
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.
npx skillsauth add opsmachine/om-agency webapp-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This is a toolkit, not a workflow skill. It provides helper scripts and examples for E2E testing with Playwright.
Used by: TDD workflow skills (plan-tests, write-failing-test, implement-to-pass)
Primary reference: See shared/e2e-patterns.md for complete E2E testing patterns and guidance.
Helper Scripts:
scripts/with_server.py - Manages dev server lifecycle (supports multiple servers)Examples:
examples/element_discovery.py - Discovering elements on a pageexamples/static_html_automation.py - Testing static HTML filesexamples/console_logging.py - Capturing browser console logsAlways run scripts with --help first. DO NOT read the source unless absolutely necessary. These scripts are designed as black-box utilities.
For complete E2E testing guidance: See shared/e2e-patterns.md
For project-specific patterns: See .claude/primitives/testing-conventions.md
During TDD workflow:
For ad-hoc browser automation:
Manages dev server startup/shutdown for E2E tests. Run --help for full usage:
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()
Working code samples for common E2E scenarios:
examples/element_discovery.py - Discovering buttons, links, and inputs on a pageexamples/static_html_automation.py - Using file:// URLs for local HTMLexamples/console_logging.py - Capturing console logs during automationUse these as starting points for E2E tests.
This toolkit is referenced by:
with_server.py and patterns)You don't need to invoke this skill directly during TDD. The workflow skills use it automatically.
Complete E2E patterns: shared/e2e-patterns.md
Project-specific patterns: .claude/primitives/testing-conventions.md
Test planning guidance: shared/test-planning.md
testing
Write failing tests for all planned acceptance criteria from the test plan. Use after /plan-tests, before implementation. Invoke with '/write-failing-test path/to/spec.md' or 'write failing test', 'red phase', 'start TDD'.
data-ai
Workflow manager that orchestrates the entire skill system. Runs automatically before any implementation work. Reads state from artifacts, determines the next skill, spawns sub-agents for execution, and manages human gates. Invoke with '/workflow-router' or it runs automatically per CLAUDE.md.
development
Supabase security best practices and patterns. Use when working with Supabase projects, creating tables, writing RLS policies, edge functions, or reviewing Supabase code. Invoke with '/supabase-security' or when asked about Supabase security.
testing
Review a spec document for completeness before approval. Use after interview, before implementation, or when asked to 'review spec', 'check spec', or 'is this spec ready'. Read-only analysis that flags gaps.