playwright-form-validation
Playwright Form Validation Tester
Automates comprehensive form validation testing by systematically submitting invalid data, capturing validation messages, and generating detailed test reports.
Quick Start
Test a login form's validation:
# User asks: "Test the validation on the login form at example.com/login"
# Skill will:
# 1. Navigate to form
# 2. Test empty email field
# 3. Test invalid email format
# 4. Test empty password field
# 5. Test valid submission
# 6. Generate report with screenshots
Output: Validation report showing all error messages, missing validations, and screenshots of each error state.
Table of Contents
- When to Use This Skill
- What This Skill Does
- Instructions
- Supporting Files
- Expected Outcomes
- Integration Points
- Expected Benefits
- Success Metrics
- Requirements
- Red Flags to Avoid
- Notes
When to Use This Skill
Explicit Triggers
- "Test form validation on [URL]"
- "Check validation errors for this form"
- "Test invalid inputs on the signup form"
- "Verify error messages are displayed"
- "Run validation tests on [form]"
Implicit Triggers
- QA testing workflows requiring form validation checks
- Accessibility audits checking error message clarity
- Security testing for input sanitization
- Regression testing after form changes
- Documentation of validation behavior
Debugging Triggers
- "Why isn't this form showing validation errors?"
- "Are all required fields validated?"
- "What validation messages does this form show?"
- "Check if email validation is working"
What This Skill Does
This skill performs systematic form validation testing:
- Field Discovery - Identifies all form fields and their types
- Empty Value Testing - Submits form with each field empty
- Invalid Format Testing - Tests common invalid patterns (email, phone, etc.)
- Boundary Testing - Tests min/max lengths and values
- Valid Submission - Verifies successful submission with valid data
- Error Capture - Screenshots and catalogs all validation messages
- Report Generation - Creates comprehensive validation report
Instructions
Overview
The validation testing workflow has 7 main steps:
- Navigate to form and capture initial state
- Identify all form fields and their constraints
- Test empty field validation for required fields
- Test invalid format validation (email, phone, etc.)
- Test boundary values (min/max lengths and values)
- Test valid submission to verify success path
- Generate comprehensive validation report
Quick Workflow Example
// 1. Navigate and snapshot
await browser_navigate({ url: "https://example.com/login" });
await browser_snapshot({ filename: "initial.md" });
// 2. Test empty email
await browser_fill_form({
fields: [{ name: "Email", type: "textbox", ref: "ref_1", value: "" }]
});
await browser_click({ element: "Submit", ref: "ref_submit" });
await browser_take_screenshot({ filename: "empty-email.png" });
// 3. Test invalid email format
await browser_navigate({ url: "https://example.com/login" }); // Reset
await browser_fill_form({
fields: [{ name: "Email", type: "textbox", ref: "ref_1", value: "invalid" }]
});
await browser_click({ element: "Submit", ref: "ref_submit" });
await browser_take_screenshot({ filename: "invalid-email.png" });
// 4. Test valid submission
await browser_navigate({ url: "https://example.com/login" });
await browser_fill_form({
fields: [
{ name: "Email", type: "textbox", ref: "ref_1", value: "test@example.com" },
{ name: "Password", type: "textbox", ref: "ref_2", value: "ValidPass123!" }
]
});
await browser_click({ element: "Submit", ref: "ref_submit" });
await browser_take_screenshot({ filename: "success.png" });
// 5. Generate report using template
Key Testing Patterns
Empty Fields - Test each required field with empty value
Invalid Formats - Test email (invalid), phone (abc), URL (not-url)
Boundaries - Test min/max length ("short", "a".repeat(101))
Cross-Field - Test password mismatch, invalid date ranges
Valid Data - Verify success path works
Detailed Workflow
For complete step-by-step instructions with all code examples, see:
references/detailed-workflow.md- Full workflow with code samplesreferences/validation-patterns.md- Field type testing patternsexamples/examples.md- Complete form testing examples
Supporting Files
- references/validation-patterns.md - Common validation patterns and test cases for different field types
- examples/examples.md - Complete validation test examples for common forms (login, signup, checkout)
- templates/validation-report-template.md - Markdown template for validation reports
- scripts/parse_validation_errors.py - Helper to extract validation messages from snapshots
Expected Outcomes
Successful Validation Test
✅ Form Validation Test Complete
Form: Login Form (https://example.com/login)
Fields tested: 2 (email, password)
Validations found: 4
Missing validations: 0
Results by field:
Email Field:
✅ Empty value - "Email is required"
✅ Invalid format - "Please enter a valid email address"
Password Field:
✅ Empty value - "Password is required"
✅ Too short - "Password must be at least 8 characters"
Valid submission: ✅ Success (redirected to dashboard)
Screenshots saved: 5
Report: .claude/artifacts/2025-12-20/validation-report-login-form.md
Validation Issues Found
⚠️ Form Validation Issues Detected
Form: Signup Form (https://example.com/signup)
Fields tested: 5
Validations found: 3
Missing validations: 2
Issues:
❌ Phone field - No validation for invalid format
Tested: "abc123", "12-34" → No error message shown
❌ Age field - No validation for negative values
Tested: "-5" → Submission accepted
Recommendations:
1. Add phone number format validation
2. Add min value constraint to age field
3. Consider adding password strength indicator
Report: .claude/artifacts/2025-12-20/validation-report-signup-form.md
Integration Points
With Quality Gates
- Run validation tests as part of QA workflow
- Include in pre-release testing checklist
- Automate regression testing for form changes
With Accessibility Testing
- Verify error messages are clear and descriptive
- Check that errors are associated with fields (aria-describedby)
- Validate screen reader compatibility
With Security Testing
- Verify input sanitization on client side
- Check for XSS vulnerabilities in error messages
- Test SQL injection patterns in text fields
With Documentation
- Auto-generate validation documentation from reports
- Create field reference guides with validation rules
- Document error message copy for style guides
Expected Benefits
| Metric | Before | After | Improvement |
|---|---|---|---|
| Time to test form | 30 min (manual) | 2 min (automated) | 93% reduction |
| Test coverage | 40% (spot checks) | 100% (systematic) | 2.5x increase |
| Bugs found | 2-3 (missed edge cases) | 8-10 (comprehensive) | 3x increase |
| Documentation | None → Screenshots + report | Manual notes → Auto-generated | Consistent |
| Regression testing | Rarely done | Automated | Reliable |
Success Metrics
A validation test is successful when:
✅ All form fields identified and cataloged ✅ Empty value validation tested for required fields ✅ Invalid format validation tested for typed fields (email, phone, etc.) ✅ Boundary values tested for constrained fields (min/max) ✅ Valid submission verified with success confirmation ✅ All validation messages captured and documented ✅ Screenshots saved for each error state ✅ Validation report generated with findings ✅ Missing validations identified and reported ✅ Recommendations provided for improvements
Requirements
Browser Automation:
- Playwright MCP server configured
- Browser installed via
mcp__playwright__browser_install - Active browser session
Tools:
mcp__playwright__browser_navigate- Navigate to form URLmcp__playwright__browser_snapshot- Capture form structure and errorsmcp__playwright__browser_fill_form- Fill field valuesmcp__playwright__browser_click- Submit formmcp__playwright__browser_wait_for- Wait for validation to appearmcp__playwright__browser_take_screenshot- Capture error statesWrite- Generate validation reportRead- Parse snapshots for validation messages
Knowledge:
- Common validation patterns (email, phone, URL, etc.)
- HTML form field types and attributes
- Validation message extraction from snapshots
- Markdown report formatting
Environment:
.claude/artifacts/{YYYY-MM-DD}/directory for reports- Write permissions for screenshots
Red Flags to Avoid
Common mistakes when testing form validation:
- Not waiting for validation - Click submit and immediately capture without waiting for messages
- Testing only one field - Missing comprehensive coverage of all fields
- Ignoring field types - Using same invalid pattern for all fields
- Not testing boundaries - Missing min/max length and value constraints
- Skipping valid submission - Not verifying success path works
- Missing screenshots - Not capturing visual proof of error states
- Incomplete report - Not documenting all findings systematically
- Not clearing previous values - Leaving field values from previous tests
- Ignoring client-side vs server-side - Not distinguishing validation types
- Not checking accessibility - Missing aria-invalid, aria-describedby attributes
Notes
Best Practices:
- Test systematically - One field at a time, one validation at a time
- Clear between tests - Reset form to clean state before each test
- Wait appropriately - Give validation time to appear (1-2 seconds)
- Capture everything - Screenshot + snapshot for each error state
- Document clearly - Use descriptive filenames and report sections
Validation Types to Test:
- Required field - Empty value submission
- Format validation - Email, phone, URL, date patterns
- Length constraints - Min/max character limits
- Value constraints - Min/max numeric values
- Pattern matching - Regex validation (password strength, username format)
- Cross-field validation - Password confirmation, date ranges
- Custom business rules - Age restrictions, allowed domains
Common Validation Messages:
- "This field is required"
- "Please enter a valid email address"
- "Password must be at least 8 characters"
- "Please enter a valid phone number"
- "Value must be between X and Y"
Report Organization:
- Save all artifacts to dated directory:
.claude/artifacts/{YYYY-MM-DD}/ - Use consistent naming:
validation-{testname}-{fieldname}.png - Include all screenshots in report with relative paths
- Provide actionable recommendations, not just findings
Progressive Disclosure:
- For simple forms (2-3 fields), include full results inline
- For complex forms (10+ fields), reference detailed results in report file
- Always provide summary statistics up front
- Link to screenshots rather than embedding them in conversation