| name | qa-web |
| description | QA test skill for web applications using agent-browser. Tests forms, navigation, responsive layouts, state persistence via cookies/localStorage, and visual regression. The web counterpart to agent-device — together they cover native + web testing. Invoke when user says "test the web app", "test localhost", "QA the website", "test the form", "verify responsive layout", "run web tests", "test browser", or any task requiring automated web application testing.
|
| allowed-tools | Bash(agent-browser:*) Bash(node:*) Bash(curl:*) Read |
qa-web
Web application QA testing using agent-browser. The web counterpart to agent-device — together they provide full coverage for apps with both native and web versions.
When to Use
| Scenario | Tool |
|---|
| Test native iOS/Android app | agent-device + CDP |
| Test web app / localhost | agent-browser (this skill) |
| Test React Native Web | agent-browser (this skill) |
| Test responsive layouts | agent-browser (this skill) |
| Test forms and navigation | agent-browser (this skill) |
Core Workflow
Every web test follows the same pattern as native tests:
- Navigate:
agent-browser open <url>
- Snapshot:
agent-browser snapshot -i (get element refs)
- Interact: Use refs to click, fill, select
- Re-snapshot: After navigation/DOM changes, get fresh refs
- Assert: Verify URL, text, element state
agent-browser open http://localhost:3000/login
agent-browser snapshot -i
agent-browser fill @e1 "user@example.com"
agent-browser fill @e2 "password123"
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser snapshot -i
Configuration
Set web-specific values in qa.config.sh:
export WEB_BASE_URL="http://localhost:3000"
export WEB_SESSION="qa"
export WEB_VIEWPORT_WIDTH=1280
export WEB_VIEWPORT_HEIGHT=720
Usage
Run example web test
bash .pi/skills/qa-automation/qa-web/run.sh
Run with headed browser (see what's happening)
export WEB_HEADED=true
bash .pi/skills/qa-automation/qa-web/flows/example-web-test.sh
Helper Library — web-helpers.sh
Source this in your web test scripts for consistent patterns:
source .pi/skills/qa-automation/qa-web/lib/web-helpers.sh
Available Functions
| Function | Purpose |
|---|
web_open "url" | Navigate to URL |
web_snapshot | Get interactive element refs |
web_click "ref_or_selector" | Click element |
web_fill "ref" "text" | Fill input field |
web_select "ref" "value" | Select dropdown option |
web_wait "selector_or_ms" | Wait for element/time |
web_screenshot "name" | Screenshot with naming convention |
web_get_text "ref" | Get element text |
web_get_url | Get current URL |
web_get_title | Get page title |
web_is_visible "ref" | Check element visibility |
web_assert_url "pattern" | Assert URL matches pattern |
web_assert_title "text" | Assert page title |
web_assert_text "text" | Assert text visible on page |
web_scroll "direction" [px] | Scroll page |
web_save_state "file" | Save cookies/storage |
web_load_state "file" | Restore saved state |
Test Patterns
Form Testing
source web-helpers.sh
web_open "$WEB_BASE_URL/signup"
web_snapshot
web_fill @e1 "Jane Doe"
web_fill @e2 "jane@example.com"
web_fill @e3 "password123"
web_select @e4 "California"
web_click @e5
web_wait --load networkidle
web_assert_url "**/dashboard"
web_assert_text "Welcome, Jane"
web_screenshot "signup-success"
Navigation Testing
web_open "$WEB_BASE_URL"
web_snapshot
web_click @e3
web_assert_url "**/about"
web_screenshot "about-page"
agent-browser back
web_assert_url "**/"
Responsive Testing
agent-browser set viewport 1440 900
web_open "$WEB_BASE_URL"
web_screenshot "desktop-home"
agent-browser set viewport 768 1024
web_screenshot "tablet-home"
agent-browser set viewport 375 812
web_screenshot "mobile-home"
State Persistence (Cookies/Storage)
web_open "$WEB_BASE_URL/login"
web_fill @e1 "user@example.com"
web_fill @e2 "password"
web_click @e3
web_wait --load networkidle
web_save_state "/tmp/qa-auth-state.json"
web_load_state "/tmp/qa-auth-state.json"
web_open "$WEB_BASE_URL/dashboard"
web_assert_text "Welcome"
Accessibility Testing
web_open "$WEB_BASE_URL"
agent-browser snapshot
agent-browser screenshot --full /tmp/qa-full-page.png
File Structure
qa-web/
├── SKILL.md # This file
├── lib/
│ └── web-helpers.sh # Web test helper functions
├── flows/
│ └── example-web-test.sh # Example test
└── run.sh # Runner
Integration with Native Tests
For apps with both native and web versions, use both tools in the same test run:
bash .pi/skills/qa-automation/qa-scroll/run.sh
bash .pi/skills/qa-automation/qa-web/run.sh
Troubleshooting
| Problem | Solution |
|---|
| "agent-browser: command not found" | Install: npm install -g agent-browser |
| Browser launches but page is blank | Check URL and dev server: curl $WEB_BASE_URL |
| Refs invalidated after click | Always re-snapshot after navigation/DOM changes |
| Can't access localhost | agent-browser runs locally — it CAN access localhost (unlike web_remote) |
| Headed mode not showing | Set export WEB_HEADED=true before running |