upskill-event-manager/wordpress-dev/SELECTORS.md
bengizmo 1bdb4f7de8 docs: Add comprehensive testing resilience documentation and scripts
- 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>
2025-05-21 20:48:10 -03:00

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