qa-skills 3.0.0 → 3.1.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 +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
@@ -1,47 +0,0 @@
1
- # Exploratory Testing Session Charter
2
-
3
- **Charter:** {mission statement}
4
- **Date:** {YYYY-MM-DD}
5
- **Tester:** {name}
6
- **Time-box:** {e.g., 90 minutes}
7
-
8
- ---
9
-
10
- ## Mission
11
-
12
- {What are we trying to learn or validate?}
13
-
14
- ---
15
-
16
- ## Areas to Explore
17
-
18
- 1. {area 1}
19
- 2. {area 2}
20
- 3. {area 3}
21
-
22
- ---
23
-
24
- ## Setup
25
-
26
- - **Build/URL:** {version or URL}
27
- - **Test data:** {credentials, test accounts}
28
- - **Tools:** {browser, proxy, recorder}
29
-
30
- ---
31
-
32
- ## Session Notes
33
-
34
- | Time | Action | Observation | Issue? |
35
- |------|--------|-------------|--------|
36
- | {HH:MM} | {what you did} | {what you saw} | ☐ Yes ☐ No |
37
- | {HH:MM} | | | |
38
- | {HH:MM} | | | |
39
-
40
- ---
41
-
42
- ## Debrief
43
-
44
- - **Bugs found:** {count and brief list}
45
- - **Coverage:** {areas covered vs. missed}
46
- - **Questions / follow-ups:** {open items}
47
- - **Next charter:** {suggested focus}
@@ -1,31 +0,0 @@
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}
@@ -1,144 +0,0 @@
1
- ---
2
- name: qa-mobile-test-writer
3
- description: Generate mobile tests using Appium, WebdriverIO Mobile, and Flutter Driver for iOS and Android native, hybrid, Flutter, and mobile web applications.
4
- output_dir: tests/mobile
5
- ---
6
-
7
- # QA Mobile Test Writer
8
-
9
- ## Purpose
10
-
11
- Write mobile tests for iOS, Android, hybrid, Flutter, and mobile web applications. Transform structured test cases into executable mobile test scripts using Appium (cross-platform native + hybrid), WebdriverIO Mobile (@wdio/appium-service), and Flutter Driver / integration_test for Flutter apps.
12
-
13
- ## Trigger Phrases
14
-
15
- - "Write mobile tests for [iOS/Android/Flutter]"
16
- - "Generate Appium tests from test cases"
17
- - "Create mobile E2E tests for [app]"
18
- - "Add Flutter integration tests"
19
- - "Appium tests for native/hybrid app"
20
- - "Mobile web tests on device"
21
- - "WebdriverIO mobile tests with Appium"
22
- - "Touch actions, gestures, app lifecycle tests"
23
- - "Configure device farm (BrowserStack, Sauce Labs)"
24
- - "Mobile test capabilities and emulator setup"
25
-
26
- ## Workflow
27
-
28
- 1. **Read test cases** — From qa-testcase-from-docs, qa-manual-test-designer, qa-testcase-from-ui
29
- 2. **Determine platform/framework** — iOS vs Android, native vs hybrid vs Flutter vs mobile web
30
- 3. **Generate test files** — Create test scripts with appropriate framework (Appium, WDIO, Flutter)
31
- 4. **Configure capabilities** — platformName, automationName, app path, device/emulator
32
- 5. **Set up device/emulator** — Local emulator, simulator, or device farm config
33
-
34
- ## Frameworks
35
-
36
- | Framework | Use Case | Drivers |
37
- |-----------|----------|---------|
38
- | **Appium** | Native, hybrid, mobile web | XCUITest (iOS), UiAutomator2 (Android), Espresso (Android) |
39
- | **WebdriverIO Mobile** | WDIO + Appium; TypeScript | @wdio/appium-service, same drivers |
40
- | **Flutter Driver** | Flutter apps only | Flutter driver, integration_test |
41
-
42
- ## Platform Coverage
43
-
44
- | Platform | Driver | Automation |
45
- |----------|--------|------------|
46
- | **iOS** | XCUITest | Native, hybrid, Safari (mobile web) |
47
- | **Android** | UiAutomator2 | Native, hybrid, Chrome (mobile web) |
48
- | **Flutter** | Flutter Driver | Flutter widgets, integration_test |
49
- | **Mobile Web** | Browser on device | Chrome (Android), Safari (iOS) |
50
-
51
- ## Key Patterns
52
-
53
- - **Desired capabilities:** platformName, automationName, app (path or URL), deviceName, udid, noReset, fullReset
54
- - **Touch actions:** tap, swipe, scroll, long press, multi-touch
55
- - **Element location:** accessibility id, xpath, class name, resource-id (Android), name (iOS)
56
- - **Gestures:** W3C Actions API, TouchAction, MultiTouchAction
57
- - **App lifecycle:** install, launch, close, reset, background/foreground
58
-
59
- See `references/patterns.md` for native apps, hybrid apps, gestures, app lifecycle, deep links.
60
-
61
- ## Flutter Integration
62
-
63
- - **flutter_test** — Unit and widget tests
64
- - **integration_test** — E2E on device/emulator
65
- - **Finders:** find.byKey, find.text, find.byType, find.bySemanticsLabel
66
- - **Pumping:** pumpWidget, pumpAndSettle
67
- - **Golden tests** — Screenshot comparison for visual regression
68
-
69
- ## WebdriverIO Mobile
70
-
71
- - **@wdio/appium-service** — Appium server management
72
- - **Mobile-specific selectors** — accessibility id, -android uiautomator, -ios predicate string
73
- - **Touch actions** — element.touchAction(), browser.touchAction()
74
- - **Mobile commands** — getContext, switchContext (for hybrid)
75
-
76
- ## Device Farms
77
-
78
- | Service | Use Case |
79
- |---------|----------|
80
- | **BrowserStack** | Real devices, parallel execution |
81
- | **Sauce Labs** | Real devices, emulators, Appium cloud |
82
- | **AWS Device Farm** | AWS-integrated device testing |
83
- | **Local** | Emulators, simulators, USB devices |
84
-
85
- See `references/config.md` for Appium setup, capabilities, device farms, emulators.
86
-
87
- ## Output
88
-
89
- - Mobile test scripts (Appium, WDIO, Flutter)
90
- - Capability configuration files
91
- - CI integration snippets (GitHub Actions, Jenkins, etc.)
92
- - Device/emulator setup instructions
93
-
94
- ## Scope
95
-
96
- **Can do (autonomous):**
97
- - Generate Appium, WebdriverIO Mobile, Flutter Driver tests from test cases
98
- - Configure desired capabilities for iOS/Android
99
- - Use touch actions, gestures, app lifecycle patterns
100
- - Set up capability configs for BrowserStack, Sauce Labs, AWS Device Farm
101
- - Generate Flutter integration_test with finders and pumping
102
- - Apply accessibility id, resource-id, xpath for element location
103
- - Delegate to qa-test-healer when tests fail (selector/assertion fixes)
104
-
105
- **Cannot do (requires confirmation):**
106
- - Change production app code or add test IDs
107
- - Add dependencies not in package.json / pubspec.yaml
108
- - Override project Appium/WDIO config without approval
109
- - Install or configure emulators/simulators on user machine
110
-
111
- **Will not do (out of scope):**
112
- - Execute tests (user runs `npx wdio`, `appium`, `flutter test integration_test`)
113
- - Write unit/widget tests (use qa-jest-writer, qa-pytest-writer)
114
- - Modify CI/CD pipelines
115
- - Provision or manage device farm accounts
116
-
117
- ## References
118
-
119
- - `references/patterns.md` — Native apps, hybrid apps, gestures, app lifecycle, deep links
120
- - `references/config.md` — Appium setup, capabilities, device farms, emulators
121
- - `references/best-practices.md` — Test stability, device matrix, accessibility IDs, CI with emulators
122
-
123
- ## Quality Checklist
124
-
125
- - [ ] Accessibility id / resource-id preferred over xpath where possible
126
- - [ ] Touch actions used for mobile (tap, swipe, scroll) vs generic click
127
- - [ ] App lifecycle handled (install, launch, reset) per test needs
128
- - [ ] Capabilities match target platform (iOS XCUITest, Android UiAutomator2)
129
- - [ ] Tests independent (no shared state, order-independent)
130
- - [ ] No hardcoded secrets (use env vars for device farm credentials)
131
- - [ ] Traceability to test case IDs where applicable
132
- - [ ] Flutter: find.byKey used for stable element location when available
133
-
134
- ## Troubleshooting
135
-
136
- | Symptom | Likely Cause | Fix |
137
- |---------|--------------|-----|
138
- | Element not found | Wrong locator strategy, timing | Use accessibility id; add explicit wait; check context (native vs webview) |
139
- | Session not created | Capability mismatch, wrong driver | Verify platformName, automationName, app path; check Appium server version |
140
- | Hybrid app: element in webview | Wrong context | Use getContext/switchContext to webview; use CSS/XPath in webview |
141
- | Flaky on emulator | Timing, animations | Use pumpAndSettle (Flutter); add explicit waits; disable animations |
142
- | Device farm timeout | Slow device, network | Increase timeout; use faster device; check app size |
143
- | Gesture fails | Unsupported action | Use W3C Actions API; fallback to TouchAction |
144
- | App not installing | Invalid path, signing | Verify app path; check .ipa/.apk signing for real devices |
@@ -1,214 +0,0 @@
1
- # Mobile Testing Best Practices
2
-
3
- ## Test Stability
4
-
5
- ### Prefer Accessibility IDs
6
-
7
- ```javascript
8
- // Good — stable, semantic
9
- await $('~login-button').click();
10
- await $('~email-input').setValue('user@test.com');
11
-
12
- // Avoid — brittle
13
- await $('//android.widget.Button[@index="2"]').click();
14
- await $('.android.widget.EditText').setValue('user@test.com');
15
- ```
16
-
17
- **Recommendation:** Add `accessibilityIdentifier` (iOS) and `contentDescription` / `testID` (Android/React Native) to key UI elements. Use these for automation.
18
-
19
- ### Explicit Waits
20
-
21
- ```javascript
22
- // Good — wait for condition
23
- await $('~welcome-message').waitForDisplayed({ timeout: 10000 });
24
- await $('~submit-btn').waitForClickable();
25
-
26
- // Bad — arbitrary delay
27
- await driver.pause(3000);
28
- ```
29
-
30
- ### Handle Animations
31
-
32
- - **Flutter:** Use `pumpAndSettle()` to wait for animations to finish
33
- - **Appium:** Add short waits after navigation; use `waitForDisplayed` before interaction
34
- - **Tip:** Disable animations on emulators for faster, more stable runs:
35
- - Android: Settings → Developer options → Window/Transition/Animator scale → Off
36
- - iOS: Settings → Accessibility → Motion → Reduce Motion
37
-
38
- ### Avoid Order Dependencies
39
-
40
- - Each test should run in isolation
41
- - Use `beforeEach` to reset app state or use `fullReset` when needed
42
- - Prefer API/data setup over UI-based setup when possible
43
-
44
- ---
45
-
46
- ## Device Matrix
47
-
48
- ### Prioritize Key Combinations
49
-
50
- | Priority | Android | iOS |
51
- |----------|---------|-----|
52
- | High | Latest (API 34) | Latest (17) |
53
- | Medium | L-1 (API 33) | N-1 (16) |
54
- | Low | Older (API 30) | Older (15) |
55
-
56
- ### Screen Sizes
57
-
58
- - **Phone:** Small (320pt), Medium (375pt), Large (414pt)
59
- - **Tablet:** 768pt, 1024pt (if app supports)
60
- - **Orientation:** Portrait and landscape for critical flows
61
-
62
- ### Strategy
63
-
64
- - **Smoke:** 1–2 devices (latest Android + iOS)
65
- - **Regression:** 4–6 devices covering OS versions and screen sizes
66
- - **Full matrix:** Device farm with parallel execution
67
-
68
- ---
69
-
70
- ## Accessibility IDs
71
-
72
- ### iOS (Swift/SwiftUI)
73
-
74
- ```swift
75
- Button("Login") { ... }
76
- .accessibilityIdentifier("login-button")
77
-
78
- TextField("Email", text: $email)
79
- .accessibilityIdentifier("email-input")
80
- ```
81
-
82
- ### Android (Kotlin/XML)
83
-
84
- ```xml
85
- <Button
86
- android:id="@+id/login_button"
87
- android:contentDescription="Login" />
88
- ```
89
-
90
- ```kotlin
91
- // Or programmatically
92
- view.accessibilityDelegate = object : AccessibilityDelegate() {
93
- // Use contentDescription for screen readers and automation
94
- }
95
- ```
96
-
97
- ### React Native
98
-
99
- ```jsx
100
- <Button testID="login-button" title="Login" />
101
- <TextInput testID="email-input" />
102
- ```
103
-
104
- ### Flutter
105
-
106
- ```dart
107
- ElevatedButton(
108
- key: Key('login-button'),
109
- onPressed: () {},
110
- child: Text('Login'),
111
- )
112
- ```
113
-
114
- ---
115
-
116
- ## CI with Emulators
117
-
118
- ### Caching
119
-
120
- - Cache Android SDK and emulator images
121
- - Cache iOS simulators (Xcode)
122
- - Cache npm/pip dependencies
123
-
124
- ### Parallelization
125
-
126
- ```yaml
127
- # Run Android and iOS in parallel
128
- jobs:
129
- android:
130
- runs-on: ubuntu-latest
131
- steps:
132
- - run: npx wdio run wdio.android.conf.ts
133
- ios:
134
- runs-on: macos-latest
135
- steps:
136
- - run: npx wdio run wdio.ios.conf.ts
137
- ```
138
-
139
- ### Sharding
140
-
141
- ```bash
142
- # Split specs across workers
143
- npx wdio run wdio.conf.ts --shard=1/4
144
- npx wdio run wdio.conf.ts --shard=2/4
145
- # ...
146
- ```
147
-
148
- ### Artifacts on Failure
149
-
150
- - Screenshots on failure
151
- - Appium logs
152
- - Video recording (device farms often provide this)
153
-
154
- ```javascript
155
- afterTest: async function (test, context, result) {
156
- if (result.error) {
157
- const screenshot = await browser.takeScreenshot();
158
- // Write to file, upload to artifact storage
159
- }
160
- },
161
- ```
162
-
163
- ---
164
-
165
- ## Hybrid App Considerations
166
-
167
- - **Context switching:** Always verify current context before interacting
168
- - **Webview load:** Wait for webview context to appear and page to load
169
- - **Selectors in webview:** Use web selectors (CSS, XPath) after switching to webview
170
- - **Performance:** Webview interactions can be slower; increase timeouts if needed
171
-
172
- ---
173
-
174
- ## Flutter-Specific
175
-
176
- ### Use Keys for Stability
177
-
178
- ```dart
179
- // In app
180
- ElevatedButton(key: Key('submit'), ...)
181
-
182
- // In test
183
- await tester.tap(find.byKey(Key('submit')));
184
- ```
185
-
186
- ### pumpAndSettle for Animations
187
-
188
- ```dart
189
- await tester.pumpAndSettle(); // Waits for all animations
190
- ```
191
-
192
- ### Golden Tests
193
-
194
- - Store golden images in version control
195
- - Review visual diffs in PRs
196
- - Use `flutter test --update-goldens` to update when UI intentionally changes
197
-
198
- ---
199
-
200
- ## Security
201
-
202
- - Never hardcode device farm credentials
203
- - Use `process.env` or CI secrets
204
- - Store app paths in config; avoid committing .apk/.ipa to repo
205
- - Use signed builds for real device testing
206
-
207
- ---
208
-
209
- ## Performance
210
-
211
- - Use `noReset: true` when possible to avoid reinstall between tests
212
- - Run tests in parallel on device farms
213
- - Minimize unnecessary app restarts
214
- - Consider splitting long flows into smaller, focused tests