--- 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 `` — 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.