form-testing — Claude Code skill: browser form checks
This skill fills and submits every form in your app three ways: empty, invalid, valid. Useful before a release.
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a claude-codeWhat form-testing does
The skill drives Cursor's built-in browser through the app's forms: login and signup, settings and profile, search bars, feedback, checkout, modals with inputs. It finds them with browser_snapshot, looking for form elements or groups of input, select and textarea.
Each form gets three passes. First an empty submit, where validation errors should show up instead of a server error. Then bad data: notanemail in email, a in password, abc in a number field, 12345 in phone, not-a-url in a URL field. Finally realistic data through browser_fill or browser_fill_form, followed by a check of the success state, browser_console_messages and failed calls in browser_network_requests.
Edge cases come next: clicking submit twice, pasting a string over 1000 characters, typing <script>alert('xss')</script> into a field, and tabbing through to see where focus lands. The run ends with a per-form report marked PASS or FAIL, and the agent fixes what broke. One thing to know: the workflow assumes Cursor's browser, so on Claude or Codex the skill hands your agent the instructions without the tool itself. Worth checking how you plan to run it.
What it helps with
- submit every form empty and see which ones fail
- catch client-side validation gaps before they hit the server
- confirm a redirect or toast appears after a successful submit
- spot failed API calls triggered by form submission
- check that HTML in input fields gets escaped
Example prompts for the agent
- test every form in the app with Cursor's browser
- check the login form with an empty submit and a bad email
- run the settings form with valid data and check the console for errors
How to install form-testing
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a claude-code2Manually: put the files in place
~/.claude/skills/form-testing/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/form-testing/
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a codex2Manually: put the files in place
.agents/skills/form-testing/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a cursor2Manually: put the files in place
.cursor/skills/form-testing/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install spencerpauly/awesome-cursor-skills form-testing2Manually: put the files in place
.github/skills/form-testing/SKILL.md1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a gemini-cli2Platform CLI
gemini skills install https://github.com/spencerpauly/awesome-cursor-skills --path resources/form-testingManually: put the files in place
.devin/skills/form-testing/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about form-testing
How do I install form-testing in Claude?
Run npx skills add spencerpauly/awesome-cursor-skills --skill form-testing -a claude-code. The skill lands at ~/.claude/skills/form-testing/SKILL.md.
What does form-testing do?
It locates every form through browser_snapshot and runs three passes on each: empty submit, invalid data, valid data. It also checks double submission, long input, XSS and tab order.
What tools does the skill need?
It relies on Cursor's built-in browser and its browser_snapshot, browser_fill, browser_press, browser_console_messages and browser_network_requests commands.
Source text
SKILL.md · CC0-1.0
---
name: form-testing
description: Use Cursor's browser to fill and submit every form in the app with valid and invalid data, verifying validation, error states, and success flows.
user-invocable: true
---
# Form Testing
Systematically test every form in the app using Cursor's built-in browser.
## Workflow
### 1. Find All Forms
Use `browser_snapshot` to get the accessibility tree. Look for `form` elements, or groups of `input`, `select`, `textarea` elements.
Navigate through the app's main pages to discover all forms:
- Login / signup pages
- Settings / profile pages
- Search bars
- Contact / feedback forms
- Checkout flows
- Modals with inputs
### 2. Test Each Form
For each form, run three test passes:
**Pass 1: Empty submission**
- Submit the form with all fields empty
- Verify validation errors appear for required fields
- Check that no server error occurs (should be client-side validation)
**Pass 2: Invalid data**
- Email fields: enter `notanemail`
- Password fields: enter `a` (too short)
- Number fields: enter `abc`
- Phone fields: enter `12345`
- URL fields: enter `not-a-url`
- Check that appropriate error messages appear
**Pass 3: Valid data**
- Fill every field with realistic test data using `browser_fill` or `browser_fill_form`
- Submit the form
- Verify success state (redirect, toast, confirmation message)
- Check `browser_console_messages` for errors
- Check `browser_network_requests` for failed API calls
### 3. Check Edge Cases
- **Double submission**: Click submit twice quickly — should be prevented
- **Long input**: Paste a very long string (1000+ chars) — should be truncated or rejected
- **Special characters**: Enter `<script>alert('xss')</script>` — should be escaped
- **Tab order**: Use `browser_press` with Tab to verify focus moves logically through fields
### 4. Report
```
Form Test Results:
Login form (/login):
Empty submit: PASS — shows "Email required", "Password required"
Invalid email: PASS — shows "Invalid email"
Valid submit: PASS — redirects to /dashboard
XSS check: PASS — input escaped
Settings form (/settings):
Empty submit: FAIL — submits without validation, returns 500
Valid submit: PASS — shows "Settings saved" toast
```
Fix any failures found.
© spencerpauly · CC0-1.0 · spencerpauly/awesome-cursor-skills