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.
Files changed (262) hide show
  1. package/README.md +168 -0
  2. package/bin/cli.js +42 -0
  3. package/dist/agents/registry.d.ts +5 -0
  4. package/dist/agents/registry.d.ts.map +1 -0
  5. package/dist/agents/registry.js +101 -0
  6. package/dist/agents/registry.js.map +1 -0
  7. package/dist/agents/types.d.ts +9 -0
  8. package/dist/agents/types.d.ts.map +1 -0
  9. package/dist/agents/types.js +2 -0
  10. package/dist/agents/types.js.map +1 -0
  11. package/dist/dependencies.d.ts +21 -0
  12. package/dist/dependencies.d.ts.map +1 -0
  13. package/dist/dependencies.js +125 -0
  14. package/dist/dependencies.js.map +1 -0
  15. package/dist/installer.d.ts +25 -0
  16. package/dist/installer.d.ts.map +1 -0
  17. package/dist/installer.js +437 -0
  18. package/dist/installer.js.map +1 -0
  19. package/dist/scaffold.d.ts +27 -0
  20. package/dist/scaffold.d.ts.map +1 -0
  21. package/dist/scaffold.js +182 -0
  22. package/dist/scaffold.js.map +1 -0
  23. package/package.json +40 -0
  24. package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
  28. package/skills/qa-api-contract-curator/SKILL.md +104 -0
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
  31. package/skills/qa-browser-data-collector/SKILL.md +132 -0
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
  34. package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
  38. package/skills/qa-changelog-analyzer/SKILL.md +134 -0
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
  41. package/skills/qa-clickup-integration/SKILL.md +166 -0
  42. package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
  43. package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
  44. package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
  46. package/skills/qa-codeceptjs-writer/references/config.md +255 -0
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
  48. package/skills/qa-coverage-analyzer/SKILL.md +166 -0
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
  51. package/skills/qa-coverage-analyzer/references/tools.md +204 -0
  52. package/skills/qa-cypress-writer/SKILL.md +134 -0
  53. package/skills/qa-cypress-writer/references/assertions.md +121 -0
  54. package/skills/qa-cypress-writer/references/best-practices.md +82 -0
  55. package/skills/qa-cypress-writer/references/config.md +121 -0
  56. package/skills/qa-cypress-writer/references/patterns.md +170 -0
  57. package/skills/qa-data-factory/SKILL.md +126 -0
  58. package/skills/qa-data-factory/references/factory-patterns.md +164 -0
  59. package/skills/qa-data-factory/references/faker-guide.md +131 -0
  60. package/skills/qa-diagram-generator/SKILL.md +125 -0
  61. package/skills/qa-diagram-generator/references/c4-model.md +53 -0
  62. package/skills/qa-diagram-generator/references/charts.md +58 -0
  63. package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
  64. package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
  65. package/skills/qa-diagram-generator/references/flowchart.md +92 -0
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
  67. package/skills/qa-diagram-generator/references/gantt.md +49 -0
  68. package/skills/qa-diagram-generator/references/journey.md +50 -0
  69. package/skills/qa-diagram-generator/references/mindmap.md +75 -0
  70. package/skills/qa-diagram-generator/references/sequence.md +69 -0
  71. package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
  72. package/skills/qa-discovery-interview/SKILL.md +182 -0
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
  75. package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
  77. package/skills/qa-environment-checker/SKILL.md +142 -0
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
  79. package/skills/qa-environment-checker/references/health-checks.md +209 -0
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
  81. package/skills/qa-flaky-detector/SKILL.md +153 -0
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
  84. package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
  88. package/skills/qa-httpx-writer/SKILL.md +138 -0
  89. package/skills/qa-httpx-writer/references/assertions.md +195 -0
  90. package/skills/qa-httpx-writer/references/best-practices.md +140 -0
  91. package/skills/qa-httpx-writer/references/config.md +212 -0
  92. package/skills/qa-httpx-writer/references/patterns.md +262 -0
  93. package/skills/qa-jest-writer/SKILL.md +131 -0
  94. package/skills/qa-jest-writer/references/assertions.md +125 -0
  95. package/skills/qa-jest-writer/references/best-practices.md +136 -0
  96. package/skills/qa-jest-writer/references/config.md +134 -0
  97. package/skills/qa-jest-writer/references/patterns.md +172 -0
  98. package/skills/qa-jira-integration/SKILL.md +135 -0
  99. package/skills/qa-jira-integration/references/api-patterns.md +143 -0
  100. package/skills/qa-jira-integration/references/field-mapping.md +79 -0
  101. package/skills/qa-jira-integration/references/xray-integration.md +85 -0
  102. package/skills/qa-jmeter-writer/SKILL.md +171 -0
  103. package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
  104. package/skills/qa-jmeter-writer/references/config.md +204 -0
  105. package/skills/qa-jmeter-writer/references/patterns.md +242 -0
  106. package/skills/qa-junit5-writer/SKILL.md +157 -0
  107. package/skills/qa-junit5-writer/references/assertions.md +118 -0
  108. package/skills/qa-junit5-writer/references/config.md +97 -0
  109. package/skills/qa-junit5-writer/references/patterns.md +162 -0
  110. package/skills/qa-k6-writer/SKILL.md +155 -0
  111. package/skills/qa-k6-writer/references/best-practices.md +236 -0
  112. package/skills/qa-k6-writer/references/config.md +219 -0
  113. package/skills/qa-k6-writer/references/patterns.md +304 -0
  114. package/skills/qa-linear-integration/SKILL.md +137 -0
  115. package/skills/qa-linear-integration/references/api-patterns.md +249 -0
  116. package/skills/qa-linear-integration/references/field-mapping.md +121 -0
  117. package/skills/qa-locust-writer/SKILL.md +151 -0
  118. package/skills/qa-locust-writer/references/best-practices.md +126 -0
  119. package/skills/qa-locust-writer/references/config.md +170 -0
  120. package/skills/qa-locust-writer/references/patterns.md +235 -0
  121. package/skills/qa-manual-test-designer/SKILL.md +145 -0
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
  123. package/skills/qa-manual-test-designer/references/personas.md +146 -0
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
  126. package/skills/qa-mobile-test-writer/SKILL.md +144 -0
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
  128. package/skills/qa-mobile-test-writer/references/config.md +309 -0
  129. package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
  130. package/skills/qa-nfr-analyst/SKILL.md +177 -0
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
  136. package/skills/qa-orchestrator/SKILL.md +132 -0
  137. package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
  140. package/skills/qa-pact-writer/SKILL.md +133 -0
  141. package/skills/qa-pact-writer/references/best-practices.md +100 -0
  142. package/skills/qa-pact-writer/references/config.md +135 -0
  143. package/skills/qa-pact-writer/references/patterns.md +161 -0
  144. package/skills/qa-plan-creator/SKILL.md +139 -0
  145. package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
  146. package/skills/qa-plan-creator/references/migration-plan.md +44 -0
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
  148. package/skills/qa-plan-creator/references/performance-plan.md +44 -0
  149. package/skills/qa-plan-creator/references/regression-plan.md +45 -0
  150. package/skills/qa-plan-creator/references/release-plan.md +45 -0
  151. package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
  152. package/skills/qa-plan-creator/references/test-plan.md +59 -0
  153. package/skills/qa-plan-creator/references/uat-plan.md +43 -0
  154. package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
  158. package/skills/qa-playwright-py-writer/SKILL.md +156 -0
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
  160. package/skills/qa-playwright-py-writer/references/config.md +195 -0
  161. package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
  162. package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
  165. package/skills/qa-playwright-ts-writer/references/config.md +144 -0
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
  167. package/skills/qa-pytest-writer/SKILL.md +145 -0
  168. package/skills/qa-pytest-writer/references/assertions.md +149 -0
  169. package/skills/qa-pytest-writer/references/best-practices.md +97 -0
  170. package/skills/qa-pytest-writer/references/config.md +176 -0
  171. package/skills/qa-pytest-writer/references/patterns.md +251 -0
  172. package/skills/qa-qase-integration/SKILL.md +149 -0
  173. package/skills/qa-qase-integration/references/api-reference.md +354 -0
  174. package/skills/qa-qase-integration/references/ci-integration.md +196 -0
  175. package/skills/qa-qase-integration/references/field-mapping.md +157 -0
  176. package/skills/qa-requirements-generator/SKILL.md +152 -0
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
  179. package/skills/qa-rest-assured-writer/SKILL.md +137 -0
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
  181. package/skills/qa-rest-assured-writer/references/config.md +124 -0
  182. package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
  183. package/skills/qa-risk-analyzer/SKILL.md +158 -0
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
  186. package/skills/qa-robot-framework-writer/SKILL.md +147 -0
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
  188. package/skills/qa-robot-framework-writer/references/config.md +204 -0
  189. package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
  190. package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
  191. package/skills/qa-security-test-writer/SKILL.md +123 -0
  192. package/skills/qa-security-test-writer/references/best-practices.md +155 -0
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
  194. package/skills/qa-security-test-writer/references/zap-config.md +258 -0
  195. package/skills/qa-selenium-java-writer/SKILL.md +143 -0
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
  197. package/skills/qa-selenium-java-writer/references/config.md +143 -0
  198. package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
  199. package/skills/qa-selenium-py-writer/SKILL.md +150 -0
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
  201. package/skills/qa-selenium-py-writer/references/config.md +224 -0
  202. package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
  203. package/skills/qa-shortcut-integration/SKILL.md +143 -0
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
  206. package/skills/qa-spec-auditor/SKILL.md +162 -0
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
  209. package/skills/qa-spec-writer/SKILL.md +143 -0
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
  211. package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
  212. package/skills/qa-spring-test-writer/SKILL.md +170 -0
  213. package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
  214. package/skills/qa-spring-test-writer/references/config.md +179 -0
  215. package/skills/qa-spring-test-writer/references/patterns.md +235 -0
  216. package/skills/qa-supertest-writer/SKILL.md +150 -0
  217. package/skills/qa-supertest-writer/references/assertions.md +192 -0
  218. package/skills/qa-supertest-writer/references/best-practices.md +102 -0
  219. package/skills/qa-supertest-writer/references/config.md +166 -0
  220. package/skills/qa-supertest-writer/references/patterns.md +242 -0
  221. package/skills/qa-task-creator/SKILL.md +142 -0
  222. package/skills/qa-task-creator/references/linking-patterns.md +127 -0
  223. package/skills/qa-task-creator/references/task-types.md +169 -0
  224. package/skills/qa-task-creator/templates/task-template.md +24 -0
  225. package/skills/qa-test-doc-compiler/SKILL.md +114 -0
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
  228. package/skills/qa-test-healer/SKILL.md +101 -0
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
  230. package/skills/qa-test-healer/references/fix-strategies.md +177 -0
  231. package/skills/qa-test-reporter/SKILL.md +130 -0
  232. package/skills/qa-test-reporter/references/best-practices.md +162 -0
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
  234. package/skills/qa-test-reporter/references/report-formats.md +287 -0
  235. package/skills/qa-test-reviewer/SKILL.md +142 -0
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
  237. package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
  238. package/skills/qa-test-strategy/SKILL.md +133 -0
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
  240. package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
  241. package/skills/qa-test-strategy/references/testing-types.md +143 -0
  242. package/skills/qa-testcase-from-docs/SKILL.md +161 -0
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
  246. package/skills/qa-testcase-from-ui/SKILL.md +109 -0
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
  250. package/skills/qa-visual-regression-writer/SKILL.md +175 -0
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
  252. package/skills/qa-visual-regression-writer/references/config.md +220 -0
  253. package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
  254. package/skills/qa-vitest-writer/SKILL.md +141 -0
  255. package/skills/qa-vitest-writer/references/assertions.md +105 -0
  256. package/skills/qa-vitest-writer/references/best-practices.md +62 -0
  257. package/skills/qa-vitest-writer/references/config.md +127 -0
  258. package/skills/qa-vitest-writer/references/patterns.md +141 -0
  259. package/skills/qa-webdriverio-writer/SKILL.md +145 -0
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
  261. package/skills/qa-webdriverio-writer/references/config.md +240 -0
  262. package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
@@ -0,0 +1,349 @@
1
+ # axe-core Integration Patterns
2
+
3
+ Integration patterns for axe-core with Playwright, Cypress, and Jest. Use with qa-accessibility-test-writer when generating accessibility tests.
4
+
5
+ ---
6
+
7
+ ## Playwright + @axe-core/playwright
8
+
9
+ ### Installation
10
+
11
+ ```bash
12
+ npm install -D @axe-core/playwright
13
+ ```
14
+
15
+ ### Basic Usage
16
+
17
+ ```typescript
18
+ import { test, expect } from '@playwright/test';
19
+ import AxeBuilder from '@axe-core/playwright';
20
+
21
+ test('page has no accessibility violations', async ({ page }) => {
22
+ await page.goto('/');
23
+ const results = await new AxeBuilder({ page }).analyze();
24
+
25
+ expect(results.violations).toEqual([]);
26
+ });
27
+ ```
28
+
29
+ ### With WCAG Tags
30
+
31
+ ```typescript
32
+ test('meets WCAG 2.2 AA', async ({ page }) => {
33
+ await page.goto('/dashboard');
34
+ const results = await new AxeBuilder({ page })
35
+ .withTags(['wcag2a', 'wcag2aa'])
36
+ .analyze();
37
+
38
+ expect(results.violations).toEqual([]);
39
+ });
40
+ ```
41
+
42
+ ### Scoped to Selector
43
+
44
+ ```typescript
45
+ test('main content is accessible', async ({ page }) => {
46
+ await page.goto('/');
47
+ const results = await new AxeBuilder({ page })
48
+ .include('main')
49
+ .exclude('.ad-banner')
50
+ .analyze();
51
+
52
+ expect(results.violations).toEqual([]);
53
+ });
54
+ ```
55
+
56
+ ### Disable Specific Rules
57
+
58
+ ```typescript
59
+ test('page accessible excluding color-contrast', async ({ page }) => {
60
+ await page.goto('/');
61
+ const results = await new AxeBuilder({ page })
62
+ .disableRules(['color-contrast'])
63
+ .analyze();
64
+
65
+ expect(results.violations).toEqual([]);
66
+ });
67
+ ```
68
+
69
+ ### Shadow DOM
70
+
71
+ ```typescript
72
+ test('component with shadow DOM', async ({ page }) => {
73
+ await page.goto('/web-components');
74
+ const results = await new AxeBuilder({ page })
75
+ .include(['#app', ['#shadow-host', '#shadow-root']])
76
+ .analyze();
77
+
78
+ expect(results.violations).toEqual([]);
79
+ });
80
+ ```
81
+
82
+ ### Assert with toPassAxe (if available)
83
+
84
+ ```typescript
85
+ import { expect } from '@playwright/test';
86
+ import { toPassAxe } from 'axe-playwright';
87
+
88
+ test.extend({ toPassAxe })('page passes axe', async ({ page, toPassAxe }) => {
89
+ await page.goto('/');
90
+ await expect(page).toPassAxe();
91
+ });
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Cypress + cypress-axe
97
+
98
+ ### Installation
99
+
100
+ ```bash
101
+ npm install -D cypress-axe axe-core
102
+ ```
103
+
104
+ ### Configuration (cypress/support/e2e.ts)
105
+
106
+ ```typescript
107
+ import 'cypress-axe';
108
+ ```
109
+
110
+ ### Basic Usage
111
+
112
+ ```typescript
113
+ describe('Accessibility', () => {
114
+ beforeEach(() => {
115
+ cy.visit('/');
116
+ cy.injectAxe();
117
+ });
118
+
119
+ it('has no violations', () => {
120
+ cy.checkA11y();
121
+ });
122
+
123
+ it('main content has no violations', () => {
124
+ cy.checkA11y('main');
125
+ });
126
+ });
127
+ ```
128
+
129
+ ### With WCAG Tags
130
+
131
+ ```typescript
132
+ it('meets WCAG 2.2 AA', () => {
133
+ cy.checkA11y(null, {
134
+ runOnly: {
135
+ type: 'tag',
136
+ values: ['wcag2a', 'wcag2aa'],
137
+ },
138
+ });
139
+ });
140
+ ```
141
+
142
+ ### With Specific Rules
143
+
144
+ ```typescript
145
+ it('checks critical rules only', () => {
146
+ cy.checkA11y(null, {
147
+ runOnly: {
148
+ type: 'rule',
149
+ values: ['color-contrast', 'label', 'button-name', 'image-alt'],
150
+ },
151
+ });
152
+ });
153
+ ```
154
+
155
+ ### Exclude Elements
156
+
157
+ ```typescript
158
+ it('excludes third-party widget', () => {
159
+ cy.checkA11y(null, {
160
+ exclude: [['.third-party-widget']],
161
+ });
162
+ });
163
+ ```
164
+
165
+ ### Custom Violation Callback
166
+
167
+ ```typescript
168
+ it('logs violations', () => {
169
+ cy.checkA11y(null, null, (violations) => {
170
+ violations.forEach((v) => {
171
+ cy.task('log', `${v.id}: ${v.help}`);
172
+ });
173
+ });
174
+ });
175
+ ```
176
+
177
+ ### Wait for Dynamic Content
178
+
179
+ ```typescript
180
+ it('checks after content loads', () => {
181
+ cy.get('[data-cy="dynamic-content"]').should('be.visible');
182
+ cy.injectAxe();
183
+ cy.checkA11y();
184
+ });
185
+ ```
186
+
187
+ ---
188
+
189
+ ## Jest + jest-axe
190
+
191
+ ### Installation
192
+
193
+ ```bash
194
+ npm install -D jest-axe @testing-library/react @testing-library/dom
195
+ ```
196
+
197
+ ### Basic Usage (React Testing Library)
198
+
199
+ ```typescript
200
+ import { render, screen } from '@testing-library/react';
201
+ import { axe, toHaveNoViolations } from 'jest-axe';
202
+ import { Button } from './Button';
203
+
204
+ expect.extend(toHaveNoViolations);
205
+
206
+ test('Button has no accessibility violations', async () => {
207
+ const { container } = render(<Button>Click me</Button>);
208
+ const results = await axe(container);
209
+ expect(results).toHaveNoViolations();
210
+ });
211
+ ```
212
+
213
+ ### With Options
214
+
215
+ ```typescript
216
+ test('Button meets WCAG AA', async () => {
217
+ const { container } = render(<Button>Click me</Button>);
218
+ const results = await axe(container, {
219
+ runOnly: {
220
+ type: 'tag',
221
+ values: ['wcag2a', 'wcag2aa'],
222
+ },
223
+ });
224
+ expect(results).toHaveNoViolations();
225
+ });
226
+ ```
227
+
228
+ ### Scoped to Element
229
+
230
+ ```typescript
231
+ test('form is accessible', async () => {
232
+ const { container } = render(<SignupForm />);
233
+ const form = container.querySelector('form');
234
+ const results = await axe(form!);
235
+ expect(results).toHaveNoViolations();
236
+ });
237
+ ```
238
+
239
+ ### Disable Rules
240
+
241
+ ```typescript
242
+ test('component without color-contrast check', async () => {
243
+ const { container } = render(<Chart />);
244
+ const results = await axe(container, {
245
+ rules: { 'color-contrast': { enabled: false } },
246
+ });
247
+ expect(results).toHaveNoViolations();
248
+ });
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Pa11y (CLI + Node API)
254
+
255
+ ### CLI
256
+
257
+ ```bash
258
+ npm install -g pa11y
259
+
260
+ pa11y https://example.com
261
+ pa11y https://example.com --standard WCAG2AA
262
+ pa11y https://example.com --include-notices --include-warnings
263
+ ```
264
+
265
+ ### Node API
266
+
267
+ ```typescript
268
+ import pa11y from 'pa11y';
269
+
270
+ const results = await pa11y('https://example.com', {
271
+ standard: 'WCAG2AA',
272
+ includeWarnings: true,
273
+ runners: ['axe'],
274
+ });
275
+
276
+ console.log(results.issues);
277
+ ```
278
+
279
+ ### With Puppeteer (for SPAs)
280
+
281
+ ```typescript
282
+ import pa11y from 'pa11y';
283
+ import puppeteer from 'puppeteer';
284
+
285
+ const browser = await puppeteer.launch();
286
+ const page = await browser.newPage();
287
+ await page.goto('https://example.com', { waitUntil: 'networkidle0' });
288
+
289
+ const results = await pa11y(await page.content(), {
290
+ standard: 'WCAG2AA',
291
+ page,
292
+ });
293
+
294
+ await browser.close();
295
+ ```
296
+
297
+ ---
298
+
299
+ ## Lighthouse (Chrome DevTools Protocol)
300
+
301
+ ### Playwright Integration
302
+
303
+ ```typescript
304
+ import { test } from '@playwright/test';
305
+ import { playAudit } from 'playwright-lighthouse';
306
+
307
+ test('Lighthouse accessibility score', async ({ page }) => {
308
+ await page.goto('/');
309
+ await playAudit({
310
+ page,
311
+ thresholds: {
312
+ performance: 80,
313
+ accessibility: 90,
314
+ 'best-practices': 80,
315
+ seo: 80,
316
+ },
317
+ port: 9222,
318
+ });
319
+ });
320
+ ```
321
+
322
+ ### Lighthouse CLI
323
+
324
+ ```bash
325
+ npx lighthouse https://example.com --only-categories=accessibility --output=json
326
+ ```
327
+
328
+ ---
329
+
330
+ ## Rule Tags Reference
331
+
332
+ | Tag | Description |
333
+ |-----|-------------|
334
+ | `wcag2a` | WCAG 2.2 Level A |
335
+ | `wcag2aa` | WCAG 2.2 Level AA |
336
+ | `wcag2aaa` | WCAG 2.2 Level AAA |
337
+ | `best-practice` | Best practice recommendations |
338
+ | `ACT` | W3C ACT rules |
339
+ | `section508` | Section 508 |
340
+
341
+ ---
342
+
343
+ ## References
344
+
345
+ - [axe-core GitHub](https://github.com/dequelabs/axe-core)
346
+ - [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/playwright)
347
+ - [cypress-axe](https://github.com/component-driven/cypress-axe)
348
+ - [jest-axe](https://github.com/nickcolley/jest-axe)
349
+ - [Pa11y](https://pa11y.org/)
@@ -0,0 +1,184 @@
1
+ # Accessibility Testing Best Practices
2
+
3
+ Best practices for automated and manual accessibility testing. Use with qa-accessibility-test-writer when generating tests and planning audits.
4
+
5
+ ---
6
+
7
+ ## Automated vs Manual Testing
8
+
9
+ ### What Automation Covers
10
+
11
+ | Category | Automated | Manual |
12
+ |----------|-----------|--------|
13
+ | Color contrast | ✓ | ✓ (verify in context) |
14
+ | Alt text presence | ✓ | ✓ (verify accuracy) |
15
+ | ARIA validity | ✓ | ✓ (verify semantics) |
16
+ | Keyboard operability | Partial | ✓ |
17
+ | Focus order | Partial | ✓ |
18
+ | Screen reader experience | ✗ | ✓ |
19
+ | Cognitive load | ✗ | ✓ |
20
+ | Motion sensitivity | ✗ | ✓ |
21
+
22
+ ### Recommended Mix
23
+
24
+ 1. **Automated first** — axe-core, Pa11y, Lighthouse on every build
25
+ 2. **Manual keyboard** — Tab through critical flows (login, checkout, forms)
26
+ 3. **Manual screen reader** — NVDA/JAWS (Windows), VoiceOver (macOS/iOS), TalkBack (Android)
27
+ 4. **Manual spot checks** — Color contrast in context, zoom to 200%, reduced motion
28
+
29
+ ---
30
+
31
+ ## Screen Reader Testing
32
+
33
+ ### Tools
34
+
35
+ | Platform | Screen Reader | Notes |
36
+ |----------|---------------|-------|
37
+ | Windows | NVDA (free) | Most common for testing |
38
+ | Windows | JAWS | Commercial; often required for compliance |
39
+ | macOS | VoiceOver | Built-in; Cmd+F5 |
40
+ | iOS | VoiceOver | Built-in; triple-click Home/Side |
41
+ | Android | TalkBack | Built-in |
42
+
43
+ ### Key Scenarios
44
+
45
+ 1. **Landmarks** — Can user jump between main, nav, footer?
46
+ 2. **Headings** — Can user navigate by heading level?
47
+ 3. **Forms** — Are labels announced? Are errors announced?
48
+ 4. **Dynamic content** — Are live regions (`aria-live`) announced?
49
+ 5. **Custom widgets** — Do dialogs, tabs, accordions have correct roles and states?
50
+
51
+ ### Testing Workflow
52
+
53
+ ```
54
+ 1. Unplug mouse; use keyboard only
55
+ 2. Turn on screen reader
56
+ 3. Navigate page from top (headings, landmarks, links)
57
+ 4. Complete critical user flow (e.g., add to cart, checkout)
58
+ 5. Note: missing labels, wrong order, unannounced updates
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Keyboard Testing
64
+
65
+ ### Essential Keys
66
+
67
+ | Key | Purpose |
68
+ |-----|---------|
69
+ | Tab | Move forward through focusable elements |
70
+ | Shift+Tab | Move backward |
71
+ | Enter | Activate links, buttons |
72
+ | Space | Toggle checkboxes, activate buttons |
73
+ | Arrow keys | Navigate within components (tabs, menus, sliders) |
74
+ | Escape | Close modals, cancel |
75
+
76
+ ### Checklist
77
+
78
+ - [ ] All interactive elements reachable via Tab
79
+ - [ ] No keyboard traps (can always Tab out)
80
+ - [ ] Focus order matches visual order
81
+ - [ ] Focus indicator visible (outline or equivalent)
82
+ - [ ] Skip link works and targets main content
83
+ - [ ] Modals trap focus and return focus on close
84
+ - [ ] Dropdowns/menus operable with Arrow keys
85
+
86
+ ### Common Failures
87
+
88
+ | Issue | Fix |
89
+ |-------|-----|
90
+ | Custom div not focusable | Add `tabindex="0"` and keyboard handlers |
91
+ | Focus lost after modal close | Store focused element; restore on close |
92
+ | No visible focus | Add `:focus-visible` styles |
93
+ | Wrong tab order | Use `tabindex` sparingly; fix DOM order |
94
+
95
+ ---
96
+
97
+ ## Color Contrast
98
+
99
+ ### Requirements (WCAG 2.2)
100
+
101
+ | Level | Normal Text | Large Text |
102
+ |-------|-------------|------------|
103
+ | AA | 4.5:1 | 3:1 |
104
+ | AAA | 7:1 | 4.5:1 |
105
+
106
+ Large text = 18pt+ or 14pt+ bold.
107
+
108
+ ### Tools
109
+
110
+ - **axe-core** — Automated contrast checks
111
+ - **WebAIM Contrast Checker** — Manual verification
112
+ - **Chrome DevTools** — Inspect element → Accessibility panel
113
+
114
+ ### Edge Cases
115
+
116
+ - **Logos** — Exempt; no contrast requirement
117
+ - **Disabled elements** — No contrast requirement
118
+ - **Placeholder text** — Should meet 4.5:1 or have visible label
119
+ - **Focus indicators** — 3:1 against adjacent colors
120
+
121
+ ---
122
+
123
+ ## Form Accessibility
124
+
125
+ ### Labels
126
+
127
+ - Every input has a visible `<label>` or `aria-label`
128
+ - Labels describe purpose; placeholders are supplementary
129
+ - Error messages linked via `aria-describedby` or `aria-errormessage`
130
+
131
+ ### Error Handling
132
+
133
+ - Errors identified in text (not color alone)
134
+ - `aria-invalid="true"` on invalid fields
135
+ - `role="alert"` or `aria-live="assertive"` for error announcements
136
+ - Suggestions provided (3.3.3 Error Suggestion)
137
+
138
+ ### Autocomplete
139
+
140
+ - Use `autocomplete` attribute for common fields (name, email, address)
141
+
142
+ ---
143
+
144
+ ## Testing in CI/CD
145
+
146
+ ### Playwright Example
147
+
148
+ ```yaml
149
+ # .github/workflows/a11y.yml
150
+ - name: Run accessibility tests
151
+ run: npx playwright test tests/accessibility/
152
+ ```
153
+
154
+ ### Thresholds
155
+
156
+ - **Zero violations** for WCAG 2.2 A/AA in critical paths
157
+ - **Lighthouse accessibility score** ≥ 90 for key pages
158
+ - **Allow known exceptions** via axe `disableRules` with documented rationale
159
+
160
+ ### Reporting
161
+
162
+ - Store JSON/HTML reports as artifacts
163
+ - Fail build on new violations
164
+ - Track trends over time (e.g., Lighthouse CI)
165
+
166
+ ---
167
+
168
+ ## When to Escalate
169
+
170
+ | Situation | Action |
171
+ |-----------|--------|
172
+ | axe reports "needs review" | Manual verification; document decision |
173
+ | Design conflicts with WCAG | Discuss with design; propose alternatives |
174
+ | Third-party widget fails | Contact vendor; document as known limitation |
175
+ | AAA required | Plan manual testing; automation covers subset |
176
+
177
+ ---
178
+
179
+ ## References
180
+
181
+ - [WCAG 2.2 Understanding](https://www.w3.org/WAI/WCAG22/Understanding/)
182
+ - [WebAIM Screen Reader User Survey](https://webaim.org/projects/screenreadersurvey9/)
183
+ - [Inclusive Design Principles](https://inclusivedesignprinciples.org/)
184
+ - [A11y Project Checklist](https://www.a11yproject.com/checklist/)