- Added DEPLOYMENT-RESILIENCE.md with strategies for resilient testing - Created TROUBLESHOOTING.md with solutions to common issues - Added SELECTORS.md as a centralized selector database - Created auto-recovery.sh script for automated test failure recovery - Enhanced overall testing framework resilience 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
121 lines
No EOL
5.5 KiB
Markdown
121 lines
No EOL
5.5 KiB
Markdown
# UI Selector Management System
|
|
|
|
This document provides a centralized database of UI selectors used in the HVAC Community Events plugin tests. Use this as a reference when updating selectors or debugging UI interactions.
|
|
|
|
## Selector Principles
|
|
|
|
1. **Prefer attribute selectors** over ID selectors:
|
|
- Better: `input[name="log"]`
|
|
- Avoid: `#user_login`
|
|
|
|
2. **Use multiple selector strategies** with fallbacks:
|
|
- Better: `input[name="log"], input[type="text"][id="user_login"], input.username`
|
|
- Avoid: `#user_login`
|
|
|
|
3. **Keep selectors as specific as possible** but not too brittle:
|
|
- Better: `form#hvac_community_loginform input[name="log"]`
|
|
- Avoid: `form > div > input:first-child`
|
|
|
|
4. **Update this document** when changing selectors in code
|
|
|
|
## Critical Page Selectors
|
|
|
|
### Login Page
|
|
|
|
| Element | Current Selector | Alternative Selectors | Notes |
|
|
|---------|-----------------|----------------------|-------|
|
|
| Username field | `input[name="log"]` | `#user_login`, `.input[autocomplete="username"]` | Primary login input field |
|
|
| Password field | `input[name="pwd"]` | `#user_pass`, `input[type="password"]` | Password input field |
|
|
| Submit button | `input[type="submit"]` | `#wp-submit`, `.button.button-primary` | Login form submission button |
|
|
| Remember me | `input[name="rememberme"]` | `#rememberme` | Remember login checkbox |
|
|
| Error message | `.login-error, .login_error, #login_error` | `div:contains("Invalid username")` | Login error container |
|
|
| Login form | `form#hvac_community_loginform` | `form[name="hvac_community_loginform"]` | Main login form |
|
|
|
|
Last verified: 2025-05-21
|
|
|
|
### Dashboard Page
|
|
|
|
| Element | Current Selector | Alternative Selectors | Notes |
|
|
|---------|-----------------|----------------------|-------|
|
|
| Events table | `.hvac-events-table` | `table.events-table` | Table containing event listings |
|
|
| Event row | `.event-row` | `tr.event` | Individual event row |
|
|
| Event name | `.event-name a` | `.event-title a` | Event title with link |
|
|
| Event date | `.event-date` | `.event-time` | Date/time of event |
|
|
| Event status | `.event-status` | `.status-badge` | Event status indicator |
|
|
| Filter tabs | `.filter-tabs a` | `.nav-tab` | Filter tabs for event status |
|
|
| Create button | `.create-event-button` | `a:contains("Create Event")` | Button to create new event |
|
|
| Stats section | `.dashboard-stats` | `.statistics` | Statistics summary section |
|
|
|
|
Last verified: 2025-05-21
|
|
|
|
### Certificate Page
|
|
|
|
| Element | Current Selector | Alternative Selectors | Notes |
|
|
|---------|-----------------|----------------------|-------|
|
|
| Certificate table | `.certificate-table` | `table.certificates` | Table of certificates |
|
|
| Certificate row | `.certificate-row` | `tr.certificate` | Individual certificate row |
|
|
| Event filter | `select[name="event_filter"]` | `#event-filter` | Event dropdown filter |
|
|
| Attendee filter | `input[name="attendee_search"]` | `#attendee-search` | Attendee search input |
|
|
| Generate button | `.generate-certificates` | `button:contains("Generate")` | Certificate generation button |
|
|
| Email button | `.email-certificate` | `button:contains("Email")` | Email certificate button |
|
|
| Download button | `.download-certificate` | `a:contains("Download")` | Download certificate link |
|
|
| Revoke button | `.revoke-certificate` | `button:contains("Revoke")` | Revoke certificate button |
|
|
|
|
Last verified: 2025-05-21
|
|
|
|
### Event Creation Page
|
|
|
|
| Element | Current Selector | Alternative Selectors | Notes |
|
|
|---------|-----------------|----------------------|-------|
|
|
| Title field | `input[name="post_title"]` | `#post_title` | Event title input |
|
|
| Description | `.wp-editor-area` | `textarea[name="post_content"]` | Event description editor |
|
|
| Event date | `input[name="event_date"]` | `.event-date-field` | Event date picker |
|
|
| Event time | `input[name="event_time"]` | `.event-time-field` | Event time picker |
|
|
| Venue field | `select[name="venue_id"]` | `#venue_id` | Venue selection dropdown |
|
|
| Organizer | `select[name="organizer_id"]` | `#organizer_id` | Organizer selection dropdown |
|
|
| Submit button | `input[name="community-event"]` | `button[type="submit"]` | Submit event button |
|
|
|
|
Last verified: 2025-05-21
|
|
|
|
## Selector Versioning
|
|
|
|
Each time selectors are updated, add a new entry to track changes:
|
|
|
|
### Version History
|
|
|
|
#### 2025-05-21: Login Page Selector Update
|
|
- Updated username field selector from `#user_login` to `input[name="log"]`
|
|
- Updated password field selector from `#user_pass` to `input[name="pwd"]`
|
|
- Added multiple error message selectors for better error detection
|
|
- Added form ID selector for more reliable form detection
|
|
|
|
#### 2025-05-01: Initial Selector Documentation
|
|
- Created initial documentation of selectors
|
|
- Centralized selector references for easier maintenance
|
|
|
|
## Selector Verification Process
|
|
|
|
1. Run the selector verification script regularly:
|
|
```bash
|
|
./bin/verify-selectors.sh
|
|
```
|
|
|
|
2. Update selectors in this document and code when changes are detected
|
|
|
|
3. Create debug scripts for new pages or critical components:
|
|
```bash
|
|
# Create a debug script for a new page
|
|
./bin/create-debug-script.sh --page="profile"
|
|
```
|
|
|
|
4. Document selector changes in version history above
|
|
|
|
## Best Practices for Selector Maintenance
|
|
|
|
1. **Test selector changes** thoroughly before committing
|
|
2. **Update this document** when changing selectors in code
|
|
3. **Use descriptive selector names** in page objects
|
|
4. **Add comments** explaining complex selectors
|
|
5. **Consider theme changes** that might affect selectors
|
|
6. **Prefer attribute selectors** that are less likely to change
|
|
7. **Use data attributes** for critical test elements when possible |