Testing E2E Frontend
Quick Start
When invoked by an analyst, immediately parse their request and show configuration:
╔══════════════════════════════════════════════╗
║ Test Configuration ║
╠══════════════════════════════════════════════╣
║ Page...........: <extracted page name> ║
║ Scope..........: <FRONTEND|BACKEND|BOTH> ║
║ Credentials....: <email> ║
║ Features.......: <list> ║
║ Notes..........: <text or "—"> ║
╚══════════════════════════════════════════════╝
Then execute the fixed methodology steps A through H.
Workflow
Progress:
- A: Authentication
- B: Page mapping (routes + endpoints)
- C: Navigation [Frontend only]
- D: Version/Module selectors
- E: Initial load verification
- F: Functional tests (CRUD)
- G: Version switching regression [Frontend only]
- H: Secondary validations
Extract from natural language input:
- Page (required): "test page X", "testar tela X" → X
- Scope (default: BOTH):
- "apenas frontend" → FRONTEND
- "apenas backend" → BACKEND
- omitted/both → BOTH
- Credentials (default: teste@vp6.com.br/teste2026):
- "com usuário <email> e senha <senha>"
- Features (default: initial load, add, edit, delete, save main form, version switching)
- Notes: any additional text
A - Authentication [All Scopes]
Frontend/Both:
- Navigate to http://localhost:3000
- Login with parsed credentials
- Wait for redirect
- Verify Redux user state populated
Backend-only:
- POST to auth endpoint with credentials
- Save token for subsequent requests
B - Page Mapping [All Scopes]
- Find route in
config/routes.ts - Open component file (
@/pages/...) - Extract endpoints from dispatch calls
- Map CRUD operations and HTTP methods
C - Navigation [Frontend Only]
- Navigate via sidebar menu (don't type URL directly)
- Verify URL matches route path
- Wait for BrandedLoading overlay to disappear
D - Required Selectors [All Scopes]
Critical order: VERSION → MODULE
Frontend/Both:
- Select version in DropdownVersao
- Select module in DropDownModule (if applicable)
- Verify Redux state updated
Backend-only:
- GET enterprises, versions, modules
- Save IDs for subsequent requests
E - Initial Load Verification [All Scopes]
Frontend/Both:
- Monitor Network tab for all GETs
- Verify Redux state populated
- Check DOM form/table populated correctly
Backend-only:
- Execute all mapped endpoints
- Validate response shapes (paginated vs array)
- Check performance (>3s = flag)
F - Functional Tests [All Scopes]
Frontend/Both:
- Add: Click "+ Adicionar", fill form, save
- Edit: Click EditOutlined, modify fields, save
- Delete: Click DeleteOutlined, confirm Popconfirm
- Save Main Form: Modify main form, click header Save
Backend-only:
- CREATE: POST with valid payload
- READ: GET created resource
- UPDATE: PUT/PATCH modifications
- DELETE: DELETE and verify removal
G - Version Switching [Frontend Only]
- Switch to different version
- Verify continuous loading overlay (no flicker)
- Confirm data repopulated for new version
H - Secondary Validations
- Test filters, pagination, sorting
- Try additional buttons (Import, Export, etc.)
Report Format
Markdownundefined
- Scope: <FRONTEND|BACKEND|BOTH>
- Credentials: <email>
- URL: <path>
- Component: <@/pages/...>
- Endpoints mapped: <method> <url> ...
- Steps completed: <X of Y>
- Bugs found: <N>
[✓/✗/—] Authentication
[✓/✗/—] Route mapping
[✓/✗/—] Navigation to page [F]
[✓/✗/—] Version selection
[✓/✗/—] Module selection (if applicable)
[✓/✗/—] Initial load — Network OK
[✓/✗/—] Initial load — Redux populated [F]
[✓/✗/—] Initial load — DOM populated [F]
[✓/✗/—] CRUD/Add — trigger
[✓/✗/—] CRUD/Add — persistence confirmed
[✓/✗/—] CRUD/Edit — trigger
[✓/✗/—] CRUD/Edit — persistence confirmed
[✓/✗/—] CRUD/Delete — trigger (Popconfirm in [F])
[✓/✗/—] CRUD/Delete — persistence confirmed
[✓/✗/—] Save main form (if applicable)
[✓/✗/—] Version switching no flicker [F]
[HIGH/MEDIUM/LOW] <short title>
- Step: <X.Y>
- Expected: <behavior>
- Observed: <behavior>
- Evidence: <HTTP status, console error, redux state...>
# Best Practices
- **Never skip login** even if session exists - token may be expired
- **Follow exact order**: LOGIN → MAP → NAVIGATE → VERSION → MODULE → LOAD → CRUD
- **Don't click randomly** - each click has validation purpose
- **Inspect DOM carefully** - antd wraps inputs in multiple containers
- **Always use different versions** when testing version switching
- **Stop on initial GET failures** (status >= 400) - report as blocker
# Common Pitfalls
- **Don't break the fixed methodology order** - skipping steps invalidates tests
- **Don't assume fields exist** without DOM inspection
- **Don't continue after initial load failures** - fix blockers first
- **Don't report bugs without 2+ reproductions** (except 500 errors)
- **Don't forget to select enterprise** if page requires `chosenEnterprise`
# Environment
- Frontend: http://localhost:3000
- Backend: http://localhost:8000
- Stack: umi.js + React + antd
- State: Redux via dva
- Loading: BrandedLoading overlay
- Test credentials: teste@vp6.com.br / teste2026