How to Test Forms in Mobile and Web Apps (Complete Guide)
Forms are where users enter data and where input validation either saves them or blocks them. Good forms are fast, forgiving, and accessible. Bad forms leak data, misvalidate, and drive abandonment. T
Forms are where users enter data and where input validation either saves them or blocks them. Good forms are fast, forgiving, and accessible. Bad forms leak data, misvalidate, and drive abandonment. This guide covers the test matrix for any form, from 1-field sign-up to 30-field onboarding.
Why forms fail
- Validation happens server-side only (slow, bad UX)
- Errors shown after submission, user must hunt for the bad field
- Required fields not labeled as required
- Phone / postcode / SSN format not locale-aware
- Keyboard does not match field type
- No resumable state (force-close → start over)
- Copy-paste does not work (password managers break)
- Submit button spammable (duplicate submissions)
What to test — baseline
- All fields render and accept input
- Labels associate with inputs (accessibility)
- Required fields marked visibly and programmatically (
requiredattribute, accessibilityLabel includes "required") - Keyboard matches field (numeric for phone, email for email, password for secrets)
- Auto-fill works (autocomplete attributes, iOS key chain, Android auto-fill)
- Placeholder is not used as label (disappears on focus)
Validation
- Inline validation on blur or after short delay
- Error message specific to the failure ("Email must contain @", not "Invalid")
- Error linked to the field programmatically (aria-describedby)
- Errors announced by screen reader on submit
- Server-side validation backs up client-side (never trust client)
- Field format validation per locale (US vs UK postcode, phone prefix, etc.)
Submission
- Submit button disabled until form is valid (optional but user-friendly)
- Submit button disables after first tap (no duplicate submission)
- Loading state visible during submit
- Success state clear — navigation, confirmation, or inline success message
- Failure state preserves field values (user does not retype email)
Specific field types
- Accepts
name+tag@example.com,unicode@domain.com, all RFC-5321 valid formats - Rejects
no-at.com, empty string, whitespace - Case-insensitive on the domain part
Phone
- Accepts international format (+country code)
- Strips non-digits on validate
- Locale-aware default country
- Rejects obviously invalid (too short, all zeros)
Password
- Minimum length enforced (12+ in 2026)
- Complexity requirements clear up-front, not surprise-on-submit
- Show/hide password toggle present
- Paste enabled (disabled paste breaks password managers)
- Password strength indicator present for signup
- No max-length trimming (truncated passwords = broken accounts)
Date
- Date picker for date fields, not free text
- Date format matches locale
- Min/max range enforced (no future birth dates)
Address
- Auto-fill from saved addresses (platform-level)
- ZIP/postcode validation against country
- State/province populated based on country
File upload
- Type restrictions enforced (only accept what you accept)
- Size limit enforced client + server
- Upload progress visible
- Cancel works mid-upload
Accessibility
- Tab order logical (top-to-bottom, left-to-right)
- Focus visible throughout
- Error summary at top for long forms (screen reader reaches it first)
- Form labels at 200% zoom not truncated
- Touch targets ≥ 48dp on mobile
- Dynamic type respected
Edge cases
- Force-close mid-form — state preserved (draft autosave)
- Device rotation — state preserved
- Network drop on submit — queued or retry with clear messaging
- Very long text (10k chars) in text fields — either accepted or limit clearly stated
- Special characters (emoji, unicode) preserved through to server
- Simultaneous edits from two devices — last-write-wins or conflict UI
How SUSA tests forms
SUSA's flow detector auto-identifies forms (≥2 input fields with submit) and drives them with persona-appropriate data:
adversarial: invalid input, injection attempts, boundary valueselderly: careful, checks touch target sizes and readabilityaccessibility_user: TalkBack / VoiceOver narration, keyboard navimpatient: rapid input, missing-field tolerance
Flow verdicts (PASS / FAIL) capture whether the form submission succeeded and led to expected state change.
susatest-agent test myapp.apk --persona adversarial --steps 100
Common production bugs
- Email validation rejects valid emails (rejects
+sign in local part) - Password truncated silently at 50 chars, login fails later
- Phone format breaks for international numbers (US-only validator)
- Submit double-fires on slow network, duplicate records
- Required fields not announced to screen readers
Forms are the highest-interaction surface in most apps. Test them per persona, automate the boundary cases, manual-check the accessibility.
Test Your App Autonomously
Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.
Try SUSA Free