qa-skills 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Visual Analysis Guide for UI Screenshots
|
|
2
|
+
|
|
3
|
+
Guide for analyzing UI screenshots to identify elements, infer semantics, and derive test scenarios. Use when processing images for qa-testcase-from-ui.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Element Identification Techniques
|
|
8
|
+
|
|
9
|
+
### 1. Shape and Layout Heuristics
|
|
10
|
+
|
|
11
|
+
| Visual Pattern | Likely Element | Confidence |
|
|
12
|
+
|----------------|----------------|------------|
|
|
13
|
+
| Rounded rectangle with placeholder text | Text input | High |
|
|
14
|
+
| Small square with checkmark | Checkbox | High |
|
|
15
|
+
| Circle with dot | Radio button | High |
|
|
16
|
+
| Rectangle with dropdown arrow | Select/dropdown | High |
|
|
17
|
+
| Rounded rectangle, filled, with label | Button | High |
|
|
18
|
+
| Grid of rows and columns | Table | High |
|
|
19
|
+
| Overlay with centered content | Modal/dialog | High |
|
|
20
|
+
| Horizontal row of links with separators | Navigation bar | Medium |
|
|
21
|
+
| Vertical list with indentation | Tree or nested menu | Medium |
|
|
22
|
+
|
|
23
|
+
### 2. Label and Context Clues
|
|
24
|
+
|
|
25
|
+
- **"Email", "Password", "Username"** → Form fields with implied validation
|
|
26
|
+
- **"Submit", "Save", "Cancel"** → Button actions
|
|
27
|
+
- **"Sign In", "Log in"** → Auth flow entry
|
|
28
|
+
- **"Search"** → Search input or button
|
|
29
|
+
- **"Add", "+", "New"** → Create action
|
|
30
|
+
- **"Edit", "Delete", trash icon** → CRUD actions
|
|
31
|
+
- **"Settings", gear icon** → Configuration/settings
|
|
32
|
+
- **"Help", "?"** → Help or documentation
|
|
33
|
+
|
|
34
|
+
### 3. Position Conventions
|
|
35
|
+
|
|
36
|
+
- **Top of viewport:** Logo, primary nav, search
|
|
37
|
+
- **Center:** Main content, forms, modals
|
|
38
|
+
- **Bottom:** Submit buttons, footer links
|
|
39
|
+
- **Right edge:** Sidebar, secondary actions
|
|
40
|
+
- **Floating:** Notifications, tooltips
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Semantic Mapping Rules
|
|
45
|
+
|
|
46
|
+
### From Visual to Action
|
|
47
|
+
|
|
48
|
+
1. **Input-like shapes** → User can type or select
|
|
49
|
+
2. **Button-like shapes** → User can click to trigger action
|
|
50
|
+
3. **Links (underlined or distinct color)** → Navigation
|
|
51
|
+
4. **Overlays** → Modal flow (open → interact → close)
|
|
52
|
+
5. **Tables** → Data display + possible sort/filter/pagination
|
|
53
|
+
6. **Tabs** → Switch between views/panels
|
|
54
|
+
|
|
55
|
+
### Inferring Validation
|
|
56
|
+
|
|
57
|
+
- **Required indicator** (asterisk, "Required") → Empty submit should show error
|
|
58
|
+
- **Format hints** (e.g., "DD/MM/YYYY") → Invalid format should be rejected
|
|
59
|
+
- **Character counter** → Max length validation
|
|
60
|
+
- **Password strength meter** → Password rules apply
|
|
61
|
+
|
|
62
|
+
### Inferring State
|
|
63
|
+
|
|
64
|
+
- **Disabled** (grayed out, reduced opacity) → Not clickable
|
|
65
|
+
- **Loading** (spinner, skeleton) → Async operation in progress
|
|
66
|
+
- **Error** (red border, error icon) → Validation failed
|
|
67
|
+
- **Success** (green check, success message) → Operation completed
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Common UI Patterns
|
|
72
|
+
|
|
73
|
+
### Login / Auth Screens
|
|
74
|
+
|
|
75
|
+
- Email + Password inputs
|
|
76
|
+
- "Sign In" / "Log in" button
|
|
77
|
+
- "Forgot password?" link
|
|
78
|
+
- "Create account" / "Register" link
|
|
79
|
+
- Social login buttons (Google, etc.)
|
|
80
|
+
|
|
81
|
+
**Test focus:** Valid/invalid credentials, empty fields, forgot password flow.
|
|
82
|
+
|
|
83
|
+
### Dashboard / List Views
|
|
84
|
+
|
|
85
|
+
- Table or card grid
|
|
86
|
+
- Search/filter bar
|
|
87
|
+
- "Add" or "Create" button
|
|
88
|
+
- Row/card actions (edit, delete)
|
|
89
|
+
- Pagination or infinite scroll
|
|
90
|
+
|
|
91
|
+
**Test focus:** CRUD, search, filter, sort, pagination.
|
|
92
|
+
|
|
93
|
+
### Form Pages (Create/Edit)
|
|
94
|
+
|
|
95
|
+
- Multiple form fields
|
|
96
|
+
- Required indicators
|
|
97
|
+
- Submit and Cancel buttons
|
|
98
|
+
- Possible "Save draft" or "Reset"
|
|
99
|
+
|
|
100
|
+
**Test focus:** Validation, submission, cancel, reset.
|
|
101
|
+
|
|
102
|
+
### Settings / Configuration
|
|
103
|
+
|
|
104
|
+
- Tabs or sidebar sections
|
|
105
|
+
- Toggles, checkboxes, inputs
|
|
106
|
+
- "Save" or "Apply" button
|
|
107
|
+
- Possible "Reset to default"
|
|
108
|
+
|
|
109
|
+
**Test focus:** Toggle states, save, reset, section navigation.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Edge Cases to Consider
|
|
114
|
+
|
|
115
|
+
| Scenario | When to Include |
|
|
116
|
+
|----------|-----------------|
|
|
117
|
+
| Empty input submit | Form with required fields |
|
|
118
|
+
| Invalid format | Email, date, phone inputs |
|
|
119
|
+
| Max length exceeded | Inputs with character limits |
|
|
120
|
+
| Modal ESC/backdrop | Any modal/dialog |
|
|
121
|
+
| No results | Search, filter, or list views |
|
|
122
|
+
| Loading state | Any async action (submit, fetch) |
|
|
123
|
+
| Disabled state | Buttons that depend on form validity |
|
|
124
|
+
| Responsive collapse | Nav, sidebar, tables on small screens |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Coordinate and Reference Conventions
|
|
129
|
+
|
|
130
|
+
When describing element location for test cases:
|
|
131
|
+
|
|
132
|
+
1. **Prefer semantic description** over coordinates: "Email input, top of form" vs "x:120, y:200"
|
|
133
|
+
2. **Use relative terms:** "Center of modal", "First row of table", "Primary CTA button"
|
|
134
|
+
3. **Include labels:** "Button labeled 'Submit'", "Input with placeholder 'Search'"
|
|
135
|
+
4. **Note ambiguity:** "Possible dropdown (chevron visible)" when uncertain
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Limitations
|
|
140
|
+
|
|
141
|
+
- **Static images** do not reveal dynamic behavior (e.g., API errors, real-time validation)
|
|
142
|
+
- **Design vs implementation** — Figma/mockups may differ from built UI
|
|
143
|
+
- **Overlapping elements** — Hard to distinguish without interaction
|
|
144
|
+
- **Custom components** — May not match standard patterns; use conservative labels
|
|
145
|
+
|
|
146
|
+
When in doubt, flag elements for manual verification and suggest live capture for implementation-level tests.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Test Case
|
|
2
|
+
|
|
3
|
+
## [TC-{ID}] {Title}
|
|
4
|
+
|
|
5
|
+
**Module:** {module name}
|
|
6
|
+
**Priority:** {P1 | P2 | P3 | P4}
|
|
7
|
+
**Type:** {Functional | Regression | Smoke | Integration | E2E | Other}
|
|
8
|
+
|
|
9
|
+
## Preconditions
|
|
10
|
+
{Prerequisites, data state, environment setup}
|
|
11
|
+
|
|
12
|
+
## Test Steps
|
|
13
|
+
|
|
14
|
+
| # | Action | Expected Result |
|
|
15
|
+
|---|--------|-----------------|
|
|
16
|
+
| 1 | {action} | {expected} |
|
|
17
|
+
| 2 | {action} | {expected} |
|
|
18
|
+
| 3 | {action} | {expected} |
|
|
19
|
+
|
|
20
|
+
## Postconditions
|
|
21
|
+
{Cleanup, state after test}
|
|
22
|
+
|
|
23
|
+
## Test Data
|
|
24
|
+
{Input values, test accounts, sample data}
|
|
25
|
+
|
|
26
|
+
## Traceability
|
|
27
|
+
- **Requirement ID:** [REQ-{ID}]
|
|
28
|
+
- **Spec Reference:** {section or link}
|
|
29
|
+
|
|
30
|
+
## Automation Status
|
|
31
|
+
{Manual | Automated | Planned | N/A}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-visual-regression-writer
|
|
3
|
+
description: Generate visual regression tests using Playwright screenshots, Percy, and BackstopJS for screenshot comparison, layout drift detection, and baseline management.
|
|
4
|
+
output_dir: tests/visual
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QA Visual Regression Writer
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Write visual regression tests to detect unintended UI changes. Transform test cases and visual checkpoints into executable visual tests using Playwright built-in screenshots, Percy (cloud-based), or BackstopJS (Docker-based).
|
|
12
|
+
|
|
13
|
+
## Trigger Phrases
|
|
14
|
+
|
|
15
|
+
- "Write visual regression tests for [page/component]"
|
|
16
|
+
- "Generate screenshot comparison tests"
|
|
17
|
+
- "Create visual tests with Playwright toHaveScreenshot"
|
|
18
|
+
- "Add Percy visual tests for [flow]"
|
|
19
|
+
- "BackstopJS visual regression for [viewports]"
|
|
20
|
+
- "Visual tests for layout drift detection"
|
|
21
|
+
- "Screenshot baseline tests for [feature]"
|
|
22
|
+
- "Mask dynamic content in visual tests"
|
|
23
|
+
- "Visual regression with viewport variations"
|
|
24
|
+
|
|
25
|
+
## Tools
|
|
26
|
+
|
|
27
|
+
| Tool | Approach | Best For |
|
|
28
|
+
|------|----------|----------|
|
|
29
|
+
| **Playwright** | Built-in `toHaveScreenshot()` | Local baselines, CI, no extra services |
|
|
30
|
+
| **Percy** | Cloud-based, BrowserStack integration | Cross-browser, team review, CI integration |
|
|
31
|
+
| **BackstopJS** | Docker, configurable viewports | Multi-viewport, config-driven scenarios |
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
1. **Read test cases** — From qa-testcase-from-docs, qa-testcase-from-ui, or manual specs
|
|
36
|
+
2. **Define visual checkpoints** — Identify pages/elements to capture
|
|
37
|
+
3. **Set baselines** — Initial capture; store reference images
|
|
38
|
+
4. **Generate visual tests** — Produce test scripts with assertions
|
|
39
|
+
5. **Configure thresholds** — maxDiffPixels, maxDiffPixelRatio, or tool-specific settings
|
|
40
|
+
|
|
41
|
+
## Key Patterns
|
|
42
|
+
|
|
43
|
+
- **Full page screenshots** — `expect(page).toHaveScreenshot()`
|
|
44
|
+
- **Element screenshots** — `expect(locator).toHaveScreenshot()`
|
|
45
|
+
- **Viewport variations** — Desktop, tablet, mobile (1280x720, 768x1024, 375x667)
|
|
46
|
+
- **Dynamic content masking** — Mask timestamps, avatars, ads, animations
|
|
47
|
+
- **Animation disabling** — `page.addStyleTag` or `prefers-reduced-motion` for stable captures
|
|
48
|
+
- **Threshold configuration** — Tune sensitivity to avoid false positives
|
|
49
|
+
|
|
50
|
+
See `references/patterns.md` for screenshot strategies, masking, viewports, thresholds.
|
|
51
|
+
|
|
52
|
+
## Baseline Management
|
|
53
|
+
|
|
54
|
+
| Phase | Action |
|
|
55
|
+
|-------|--------|
|
|
56
|
+
| **Initial capture** | Run tests with `--update-snapshots` (Playwright) or `backstop approve` |
|
|
57
|
+
| **Update workflow** | Review diffs → approve intentional changes → commit baselines |
|
|
58
|
+
| **Review process** | Percy: dashboard review; BackstopJS: HTML report; Playwright: diff artifacts |
|
|
59
|
+
|
|
60
|
+
See `references/best-practices.md` for baseline management and CI integration.
|
|
61
|
+
|
|
62
|
+
## Playwright Integration
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// Full page
|
|
66
|
+
await expect(page).toHaveScreenshot('homepage.png');
|
|
67
|
+
|
|
68
|
+
// Element
|
|
69
|
+
await expect(page.getByTestId('header')).toHaveScreenshot('header.png');
|
|
70
|
+
|
|
71
|
+
// With options
|
|
72
|
+
await expect(page).toHaveScreenshot('dashboard.png', {
|
|
73
|
+
mask: [page.locator('.timestamp'), page.locator('.avatar')],
|
|
74
|
+
maxDiffPixels: 100,
|
|
75
|
+
maxDiffPixelRatio: 0.01,
|
|
76
|
+
fullPage: true,
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- **expect(page).toHaveScreenshot(name)** — Full page or viewport
|
|
81
|
+
- **expect(locator).toHaveScreenshot(name)** — Element-only
|
|
82
|
+
- **maxDiffPixels / maxDiffPixelRatio** — Tolerance for minor rendering differences
|
|
83
|
+
- **mask** — Hide dynamic regions from comparison
|
|
84
|
+
|
|
85
|
+
See `references/config.md` for Playwright screenshot config.
|
|
86
|
+
|
|
87
|
+
## Percy Integration
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import percySnapshot from '@percy/playwright';
|
|
91
|
+
|
|
92
|
+
await percySnapshot(page, 'Homepage');
|
|
93
|
+
await percySnapshot(page, 'Dashboard', { widths: [1280, 768, 375] });
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- **percySnapshot(page, name)** — Capture and upload to Percy
|
|
97
|
+
- **Percy CLI** — `npx percy exec -- npx playwright test`
|
|
98
|
+
- **BrowserStack Percy** — Cloud review, cross-browser, parallel execution
|
|
99
|
+
|
|
100
|
+
See `references/config.md` for Percy setup.
|
|
101
|
+
|
|
102
|
+
## BackstopJS Integration
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
// backstop.json
|
|
106
|
+
{
|
|
107
|
+
"scenarios": [
|
|
108
|
+
{
|
|
109
|
+
"label": "Homepage",
|
|
110
|
+
"url": "http://localhost:3000",
|
|
111
|
+
"viewports": [{ "width": 1280, "height": 720 }]
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- **backstop.json** — Scenarios, viewports, selectors, delay
|
|
118
|
+
- **backstop test** — Run comparisons
|
|
119
|
+
- **backstop approve** — Update baselines
|
|
120
|
+
|
|
121
|
+
See `references/config.md` for BackstopJS configuration.
|
|
122
|
+
|
|
123
|
+
## Output
|
|
124
|
+
|
|
125
|
+
- **Visual test scripts** — TypeScript/JavaScript with screenshot assertions
|
|
126
|
+
- **Baseline images** — Stored in `test-results/`, `backstop_data/`, or Percy cloud
|
|
127
|
+
- **Comparison reports** — HTML diff reports, Percy dashboard, Playwright artifacts
|
|
128
|
+
|
|
129
|
+
## Scope
|
|
130
|
+
|
|
131
|
+
**Can do (autonomous):**
|
|
132
|
+
- Generate visual regression tests from test case specs
|
|
133
|
+
- Use Playwright toHaveScreenshot, Percy, or BackstopJS
|
|
134
|
+
- Apply masking for dynamic content (timestamps, avatars, ads)
|
|
135
|
+
- Configure viewport variations (desktop/tablet/mobile)
|
|
136
|
+
- Set thresholds (maxDiffPixels, maxDiffPixelRatio)
|
|
137
|
+
- Disable animations for stable captures
|
|
138
|
+
- Create backstop.json scenarios
|
|
139
|
+
|
|
140
|
+
**Cannot do (requires confirmation):**
|
|
141
|
+
- Add Percy/BackstopJS dependencies without approval
|
|
142
|
+
- Configure Percy project token (user must provide)
|
|
143
|
+
- Override existing baseline images without approval
|
|
144
|
+
|
|
145
|
+
**Will not do (out of scope):**
|
|
146
|
+
- Execute tests (user runs `npx playwright test`, `backstop test`)
|
|
147
|
+
- Modify production UI code
|
|
148
|
+
- Set up Percy/BrowserStack accounts
|
|
149
|
+
|
|
150
|
+
## References
|
|
151
|
+
|
|
152
|
+
- `references/patterns.md` — Screenshot strategies, masking, viewports, thresholds
|
|
153
|
+
- `references/config.md` — Playwright, Percy, BackstopJS configuration
|
|
154
|
+
- `references/best-practices.md` — Baseline management, CI integration, dynamic content
|
|
155
|
+
|
|
156
|
+
## Quality Checklist
|
|
157
|
+
|
|
158
|
+
- [ ] Dynamic content masked (timestamps, avatars, ads)
|
|
159
|
+
- [ ] Animations disabled or reduced for stable captures
|
|
160
|
+
- [ ] Viewport variations defined where needed
|
|
161
|
+
- [ ] Thresholds configured to avoid false positives
|
|
162
|
+
- [ ] Baselines stored in version control (Playwright/BackstopJS)
|
|
163
|
+
- [ ] Traceability to test case IDs where applicable
|
|
164
|
+
- [ ] No hardcoded secrets (Percy token via env)
|
|
165
|
+
|
|
166
|
+
## Troubleshooting
|
|
167
|
+
|
|
168
|
+
| Symptom | Likely Cause | Fix |
|
|
169
|
+
|---------|--------------|-----|
|
|
170
|
+
| Flaky visual diffs | Animations, timestamps, fonts | Mask dynamic regions; disable animations |
|
|
171
|
+
| Too many false positives | Threshold too strict | Increase maxDiffPixels or maxDiffPixelRatio |
|
|
172
|
+
| Baseline mismatch | Different OS/fonts/DPI | Run baselines in CI; use consistent environment |
|
|
173
|
+
| Percy upload fails | Missing token, network | Set PERCY_TOKEN; check Percy dashboard |
|
|
174
|
+
| BackstopJS no match | Wrong reference path | Run `backstop approve` to create baselines |
|
|
175
|
+
| Element screenshot empty | Element not visible | Ensure element in viewport; add wait |
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Visual Testing Best Practices
|
|
2
|
+
|
|
3
|
+
Baseline management, CI integration, and dynamic content handling for visual regression testing.
|
|
4
|
+
|
|
5
|
+
## Baseline Management
|
|
6
|
+
|
|
7
|
+
### Initial Capture
|
|
8
|
+
|
|
9
|
+
1. **Ensure stable state** — Disable animations, wait for network idle
|
|
10
|
+
2. **Run with update flag** — `--update-snapshots` (Playwright), `backstop approve` (BackstopJS)
|
|
11
|
+
3. **Commit baselines** — Store reference images in version control (Playwright, BackstopJS)
|
|
12
|
+
4. **Percy** — First run creates baselines automatically
|
|
13
|
+
|
|
14
|
+
### Update Workflow
|
|
15
|
+
|
|
16
|
+
| Tool | Update Command | When to Use |
|
|
17
|
+
|------|----------------|-------------|
|
|
18
|
+
| Playwright | `npx playwright test --update-snapshots` | Intentional UI change |
|
|
19
|
+
| BackstopJS | `backstop approve` | Intentional UI change |
|
|
20
|
+
| Percy | Approve in dashboard | After reviewing diff |
|
|
21
|
+
|
|
22
|
+
### Review Process
|
|
23
|
+
|
|
24
|
+
1. **Run tests** — Detect visual changes
|
|
25
|
+
2. **Review diffs** — Playwright: `test-results/`, BackstopJS: `backstop_data/html_report/`
|
|
26
|
+
3. **Decide** — Intentional → approve; Bug → fix code
|
|
27
|
+
4. **Update** — Only approve when change is correct
|
|
28
|
+
|
|
29
|
+
### Baseline Hygiene
|
|
30
|
+
|
|
31
|
+
- **One baseline per viewport** — Don't mix viewports
|
|
32
|
+
- **Meaningful names** — `homepage-desktop.png` not `screenshot1.png`
|
|
33
|
+
- **Avoid bloating** — Capture only critical pages/elements
|
|
34
|
+
- **Branch strategy** — Baselines on main; feature branches compare against main
|
|
35
|
+
|
|
36
|
+
## CI Integration
|
|
37
|
+
|
|
38
|
+
### Playwright in CI
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
# GitHub Actions
|
|
42
|
+
- name: Run visual tests
|
|
43
|
+
run: npx playwright test visual/
|
|
44
|
+
env:
|
|
45
|
+
CI: true
|
|
46
|
+
|
|
47
|
+
- name: Update snapshots (on main, when approved)
|
|
48
|
+
if: github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch'
|
|
49
|
+
run: npx playwright test visual/ --update-snapshots
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Percy in CI
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
- name: Percy snapshots
|
|
56
|
+
run: percy exec -- npx playwright test
|
|
57
|
+
env:
|
|
58
|
+
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
|
|
59
|
+
PERCY_BRANCH: ${{ github.ref_name }}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### BackstopJS in CI
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
- name: Backstop test
|
|
66
|
+
run: npx backstop test
|
|
67
|
+
- name: Upload report
|
|
68
|
+
uses: actions/upload-artifact@v4
|
|
69
|
+
with:
|
|
70
|
+
name: backstop-report
|
|
71
|
+
path: backstop_data/html_report
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Fail on Diff
|
|
75
|
+
|
|
76
|
+
- **Playwright:** Fails by default when diff exceeds threshold
|
|
77
|
+
- **Percy:** Fails when unapproved diffs exist (configurable)
|
|
78
|
+
- **BackstopJS:** Fails when `misMatchThreshold` exceeded
|
|
79
|
+
|
|
80
|
+
## Dynamic Content Handling
|
|
81
|
+
|
|
82
|
+
### Strategy Hierarchy
|
|
83
|
+
|
|
84
|
+
1. **Mask** — Hide dynamic regions (timestamps, avatars)
|
|
85
|
+
2. **Stub** — Replace with static data (API mocking)
|
|
86
|
+
3. **Wait** — Ensure content loaded before capture
|
|
87
|
+
4. **Ignore** — Increase threshold if unavoidable
|
|
88
|
+
|
|
89
|
+
### API Mocking for Consistency
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
test('dashboard visual', async ({ page }) => {
|
|
93
|
+
await page.route('**/api/user', (route) =>
|
|
94
|
+
route.fulfill({
|
|
95
|
+
status: 200,
|
|
96
|
+
body: JSON.stringify({ name: 'Test User', avatar: '/static/avatar.png' }),
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
await page.goto('/dashboard');
|
|
100
|
+
await expect(page).toHaveScreenshot('dashboard.png');
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Deterministic Data
|
|
105
|
+
|
|
106
|
+
- Use fixed dates in test data
|
|
107
|
+
- Seed database with known state
|
|
108
|
+
- Mock external services (maps, analytics)
|
|
109
|
+
|
|
110
|
+
### Font and Rendering Consistency
|
|
111
|
+
|
|
112
|
+
- **Same OS in CI** — Use Linux in CI if baselines from Linux
|
|
113
|
+
- **System fonts** — Or bundle fonts to avoid OS differences
|
|
114
|
+
- **Threshold** — Use `maxDiffPixelRatio` for subpixel tolerance
|
|
115
|
+
|
|
116
|
+
## Test Organization
|
|
117
|
+
|
|
118
|
+
### Structure
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
visual/
|
|
122
|
+
homepage.spec.ts
|
|
123
|
+
login.spec.ts
|
|
124
|
+
__snapshots__/
|
|
125
|
+
homepage.spec.ts-snapshots/
|
|
126
|
+
homepage-chromium.png
|
|
127
|
+
homepage-mobile-chromium.png
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Naming Conventions
|
|
131
|
+
|
|
132
|
+
- **Page:** `{page-name}-{viewport}.png`
|
|
133
|
+
- **Element:** `{element}-{state}.png` (e.g., `modal-open.png`)
|
|
134
|
+
- **Scenario:** Descriptive; avoid numbers
|
|
135
|
+
|
|
136
|
+
### Scope
|
|
137
|
+
|
|
138
|
+
- **Critical paths** — Login, checkout, key flows
|
|
139
|
+
- **High-traffic pages** — Homepage, product pages
|
|
140
|
+
- **Layout-sensitive** — Responsive breakpoints
|
|
141
|
+
- **Avoid** — Low-value pages, rarely changed UI
|
|
142
|
+
|
|
143
|
+
## Performance
|
|
144
|
+
|
|
145
|
+
- **Parallelize** — Playwright and Percy support parallel runs
|
|
146
|
+
- **Limit viewports** — Test 2–3 key breakpoints, not every device
|
|
147
|
+
- **Lazy capture** — Only capture when test reaches checkpoint
|
|
148
|
+
- **Cache baselines** — CI cache `__snapshots__` / `backstop_data` when appropriate
|
|
149
|
+
|
|
150
|
+
## Security
|
|
151
|
+
|
|
152
|
+
- **No secrets in screenshots** — Mask tokens, passwords, PII
|
|
153
|
+
- **Percy token** — Store in CI secrets, never commit
|
|
154
|
+
- **Test URLs** — Use staging/test envs, not production with real data
|