Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Performs manual hands-on testing of a web application using playwright-cli. Spawns the dev server if needed, navigates to pages, performs browser actions, captures screenshots, checks outcomes, and produces a structured test report. Use when the user wants to visually verify a web feature, perform exploratory testing, or validate UI behavior.
.claude/skills/ktnyt-hands-on-test/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 99% | 0% |
Perform manual browser-based testing of a web application and produce a structured test report with screenshots and console output.
Generate a timestamp-based output directory for this test run:
bashTEST_OUTPUT_DIR="$CLAUDE_PROJECT_DIR/test-output/$(date +%Y%m%d%H%M)" mkdir -p "$TEST_OUTPUT_DIR"
All screenshots and the report for this run will be saved under this directory.
bash# Check if something is listening on the expected port lsof -i :3000 -sTCP:LISTEN # or curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
Detect the project's dev server command from project files (compose.yml, package.json, Makefile, etc.) and start it in the background.
bash# Example: Docker Compose project docker compose up -d # Example: Node.js project # npm run dev &
Wait for the server to become ready:
bash# Poll until the server responds for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 | grep -q "200" && break sleep 1 done
bashplaywright-cli open http://localhost:3000
Or navigate to a specific page to test:
bashplaywright-cli open http://localhost:3000/path/to/test
bashplaywright-cli snapshot
Use the snapshot output to identify element refs (e.g., e1, e5, e12) for subsequent interactions.
Interact with the page based on the test scenario. Common actions:
bash# Click elements playwright-cli click e3 # Fill form fields playwright-cli fill e5 "test input" # Type text (simulates keystrokes) playwright-cli type "search query" # Press keys playwright-cli press Enter # Select dropdown options playwright-cli select e9 "option-value" # Check/uncheck checkboxes playwright-cli check e12 playwright-cli uncheck e12 # Hover playwright-cli hover e4 # Navigate playwright-cli goto http://localhost:3000/other-page
After each significant action, take a snapshot to verify the page state:
bashplaywright-cli snapshot
Save screenshots to $TEST_OUTPUT_DIR/ with descriptive filenames:
bash# Full page screenshot playwright-cli screenshot --filename=$TEST_OUTPUT_DIR/<test-name>-<step>.png # Screenshot of a specific element playwright-cli screenshot e5 --filename=$TEST_OUTPUT_DIR/<test-name>-<element>.png
Naming convention: <test-name>-<step-number>-<description>.png
Examples:
login-01-initial.pnglogin-02-filled-form.pnglogin-03-after-submit.pngdashboard-01-loaded.pngbashplaywright-cli console
Check for errors, warnings, or relevant log output.
bashplaywright-cli network
After performing actions and capturing state:
bashplaywright-cli close
Write a structured test report to $TEST_OUTPUT_DIR/REPORT.md:
markdown# Hands-On Test Report **Date**: YYYY-MM-DD HH:MM **Tester**: <agent-name> **Target**: <URL tested> ## Test Scenario <Brief description of what was being tested> ## Steps Performed | # | Action | Target | Details | |---|--------|--------|---------| | 1 | Navigate | http://localhost:3000/page | Initial page load | | 2 | Fill | e5 (Email field) | Entered "user@example.com" | | 3 | Click | e8 (Submit button) | Submitted form | ## Screenshots | Step | Screenshot | Description | |------|-----------|-------------| | 1 |  | Page after initial load | | 2 |  | Form with data entered | | 3 |  | Result after submission | ## Console Output
<relevant console messages, warnings, or errors>
## Result
**Status**: PASS / FAIL
<Explanation of whether the outcome matched expectations.
If FAIL, describe the discrepancy between expected and actual behavior.>bash# Phase 1: Setup TEST_OUTPUT_DIR="$CLAUDE_PROJECT_DIR/test-output/$(date +%Y%m%d%H%M)" mkdir -p "$TEST_OUTPUT_DIR" curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 # If not running: docker compose up -d # Wait for ready for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 | grep -q "200" && break sleep 1 done # Phase 2: Test playwright-cli open http://localhost:3000/login playwright-cli snapshot playwright-cli screenshot --filename=$TEST_OUTPUT_DIR/login-01-initial.png playwright-cli fill e5 "user@example.com" playwright-cli fill e8 "password123" playwright-cli screenshot --filename=$TEST_OUTPUT_DIR/login-02-filled.png playwright-cli click e10 playwright-cli snapshot playwright-cli screenshot --filename=$TEST_OUTPUT_DIR/login-03-result.png playwright-cli console # Phase 3: Verify # Read screenshots to visually verify # Check snapshot for expected DOM state # Review console for errors # Phase 4: Cleanup playwright-cli close # Phase 5: Write report to $TEST_OUTPUT_DIR/REPORT.md
playwright-cli resize 1280 720 for consistent screenshot dimensionsplaywright-cli run-code "async page => { await page.waitForLoadState('networkidle'); }" before capturingOther measured skills in the registry, with their headline benchmark lift.