qa-screenshot-management
Screenshot capture, organization, and comparison for QA testing. Use when taking screenshots during test execution to ensure proper naming, organization, and traceability back to test cases.
$ Instalar
git clone https://github.com/jpoutrin/product-forge /tmp/product-forge && cp -r /tmp/product-forge/plugins/product-design/skills/qa-screenshot-management ~/.claude/skills/product-forge// tip: Run this command in your terminal to install the skill
name: qa-screenshot-management description: Screenshot capture, organization, and comparison for QA testing. Use when taking screenshots during test execution to ensure proper naming, organization, and traceability back to test cases.
QA Screenshot Management Skill
Standardize screenshot capture and organization during QA testing.
Directory Structure
qa-tests/
├── draft/ # QA test documents by status
├── active/
├── executed/
├── archived/
└── screenshots/
├── {test-id}/ # e.g., QA-20250105-001
│ ├── 01-initial-state.png # Numbered sequence
│ ├── 02-form-filled.png
│ ├── 03-success-state.png
│ └── elements/ # Extracted UI elements
│ ├── login-button.png
│ ├── email-field.png
│ └── password-field.png
├── baseline/ # Reference screenshots for comparison
│ └── {feature}/
│ └── {state}.png
└── failures/ # Failed test evidence
└── {date}/
└── {test-id}-{timestamp}.png
Key: Screenshots are stored in qa-tests/screenshots/{test-id}/ where {test-id} matches the QA test document name (e.g., QA-20250105-001).
Naming Convention
Format
{sequence}-{state-description}.{png|jpeg}
Sequence Numbers
01-through99-for ordered steps- Preserves execution order in file listings
State Descriptions
Use descriptive, kebab-case names:
| State | Example Filename |
|---|---|
| Initial page load | 01-initial-state.png |
| After form fill | 02-form-filled.png |
| Validation error | 03-validation-error.png |
| Success message | 04-success-message.png |
| Modal open | 05-modal-open.png |
| Dropdown expanded | 06-dropdown-expanded.png |
Bad vs Good Names
| Bad | Good |
|---|---|
screenshot1.png | 01-login-page-loaded.png |
test.png | 02-credentials-entered.png |
error.png | 03-invalid-password-error.png |
final.png | 04-dashboard-after-login.png |
When to Capture Screenshots
Always Capture
- Initial State - Before any test actions
- After Critical Actions - Form submissions, navigation
- Error States - Any validation or system errors
- Success States - Confirmation messages, completed flows
- Final State - End of test case
Conditional Capture
- Unexpected behavior (document with timestamp)
- Performance issues (loading spinners, delays)
- UI anomalies (layout issues, missing elements)
Screenshot Metadata
Include metadata in test documentation:
### Screenshots
| # | Filename | Description | Step |
|---|----------|-------------|------|
| 1 | 01-initial-state.png | Login page before input | TC-001 Step 1 |
| 2 | 02-credentials-entered.png | Form with test credentials | TC-001 Step 2 |
| 3 | 03-dashboard-loaded.png | Dashboard after successful login | TC-001 Step 3 |
Playwright Screenshot Commands
Basic Capture
// Full viewport
await page.screenshot({ path: 'screenshots/01-initial-state.png' });
// Full page (scrollable)
await page.screenshot({
path: 'screenshots/02-full-page.png',
fullPage: true
});
Element Screenshot
// Specific element only
const element = page.locator('.error-message');
await element.screenshot({ path: 'screenshots/03-error-detail.png' });
With Timestamp
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
await page.screenshot({
path: `screenshots/failure-${timestamp}.png`
});
Visual Comparison Strategy
Baseline Management
-
Create Baseline
- Capture reference screenshots on approved build
- Store in
screenshots/baseline/{feature}/ - Version control baselines
-
Compare During Testing
- Capture current state
- Compare against baseline
- Document differences
Acceptable Differences
| Type | Action |
|---|---|
| Dynamic content (dates, times) | Mask or ignore region |
| User-specific data | Use consistent test data |
| Animations | Wait for stable state |
| Random elements (ads) | Exclude from comparison |
Failure Documentation
When a test fails, capture:
screenshots/failures/2025-01-05/
├── QA-20250105-001-TC-002-1704456789.png # Actual state
├── QA-20250105-001-TC-002-expected.png # Expected (if applicable)
└── QA-20250105-001-TC-002-diff.png # Visual diff (if generated)
Failure Screenshot Checklist
- Capture full page showing context
- Capture specific element with issue
- Note browser console errors
- Record timestamp
- Link to test case and step
Cross-Browser Screenshots
Organize by browser when testing multiple browsers:
screenshots/{test-id}/
├── chrome/
│ ├── 01-initial-state.png
│ └── 02-final-state.png
├── firefox/
│ └── ...
└── safari/
└── ...
Responsive Screenshots
Capture at standard breakpoints:
| Device | Width | Suffix |
|---|---|---|
| Mobile | 375px | -mobile |
| Tablet | 768px | -tablet |
| Desktop | 1280px | -desktop |
| Wide | 1920px | -wide |
Example:
01-homepage-mobile.png
01-homepage-tablet.png
01-homepage-desktop.png
Screenshot Cleanup
Retention Policy
| Category | Retention |
|---|---|
| Passing tests | Delete after test run |
| Failing tests | Keep until issue resolved |
| Baselines | Keep in version control |
| Regression evidence | Keep 30 days minimum |
Cleanup Command
# Remove screenshots older than 30 days from failures
find qa-tests/screenshots/failures -mtime +30 -delete
Integration with Test Reports
Reference screenshots in test execution logs:
## Test Execution Log
| Date | Tester | Result | Evidence |
|------|--------|--------|----------|
| 2025-01-05 | Jane | FAIL | [Screenshots](./screenshots/QA-20250105-001/) |
Accessibility Screenshot Guidelines
When documenting accessibility issues:
-
Highlight Problem Area
- Use browser dev tools to highlight element
- Capture with focus indicator visible
-
Include Context
- Show surrounding elements
- Capture screen reader output if relevant
-
Document Fix Verification
- Before screenshot
- After screenshot
- Side-by-side comparison
Repository
