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,240 @@
1
+ # WebdriverIO Configuration
2
+
3
+ ## wdio.conf.ts
4
+
5
+ ```typescript
6
+ import type { Options } from '@wdio/types';
7
+
8
+ export const config: Options.Testrunner = {
9
+ runner: 'local',
10
+ path: '/',
11
+ port: 4723,
12
+
13
+ specs: ['./test/specs/**/*.ts'],
14
+ exclude: [],
15
+
16
+ maxInstances: 5,
17
+ capabilities: [
18
+ {
19
+ browserName: 'chrome',
20
+ 'goog:chromeOptions': {
21
+ args: ['--headless', '--disable-gpu', '--no-sandbox'],
22
+ },
23
+ },
24
+ ],
25
+
26
+ logLevel: 'info',
27
+ bail: 0,
28
+ baseUrl: 'https://example.com',
29
+ waitforTimeout: 10000,
30
+ connectionRetryTimeout: 120000,
31
+ connectionRetryCount: 3,
32
+
33
+ framework: 'mocha',
34
+ mochaOpts: {
35
+ ui: 'bdd',
36
+ timeout: 60000,
37
+ },
38
+
39
+ reporters: [
40
+ 'spec',
41
+ ['allure', { outputDir: 'allure-results' }],
42
+ ],
43
+
44
+ services: ['chromedriver'],
45
+
46
+ before: async function () {
47
+ // Global setup
48
+ },
49
+ after: async function () {
50
+ // Global teardown
51
+ },
52
+ beforeTest: async function (test) {
53
+ // Per-test setup
54
+ },
55
+ afterTest: async function (test, context, result) {
56
+ // Per-test teardown
57
+ },
58
+ };
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Capabilities
64
+
65
+ ### Multi-Browser
66
+
67
+ ```typescript
68
+ capabilities: [
69
+ { browserName: 'chrome' },
70
+ { browserName: 'firefox' },
71
+ { browserName: 'safari' },
72
+ { browserName: 'MicrosoftEdge' },
73
+ ],
74
+ ```
75
+
76
+ ### Chrome Options
77
+
78
+ ```typescript
79
+ capabilities: [{
80
+ browserName: 'chrome',
81
+ 'goog:chromeOptions': {
82
+ args: ['--headless', '--disable-gpu', '--window-size=1920,1080'],
83
+ prefs: { 'intl.accept_languages': 'en-US' },
84
+ },
85
+ }],
86
+ ```
87
+
88
+ ### Firefox Options
89
+
90
+ ```typescript
91
+ capabilities: [{
92
+ browserName: 'firefox',
93
+ 'moz:firefoxOptions': {
94
+ args: ['-headless'],
95
+ prefs: { 'dom.ipc.processCount': 8 },
96
+ },
97
+ }],
98
+ ```
99
+
100
+ ### Mobile Web (Appium)
101
+
102
+ ```typescript
103
+ capabilities: [{
104
+ platformName: 'Android',
105
+ 'appium:deviceName': 'emulator-5554',
106
+ 'appium:automationName': 'UiAutomator2',
107
+ browserName: 'Chrome',
108
+ }],
109
+ ```
110
+
111
+ ---
112
+
113
+ ## Services
114
+
115
+ ### chromedriver
116
+
117
+ ```typescript
118
+ services: ['chromedriver'],
119
+ ```
120
+
121
+ ### Appium Service
122
+
123
+ ```typescript
124
+ services: [
125
+ ['appium', {
126
+ args: { address: 'localhost', port: 4723 },
127
+ logPath: './logs/',
128
+ }],
129
+ ],
130
+ ```
131
+
132
+ ### Selenium Standalone
133
+
134
+ ```typescript
135
+ services: ['selenium-standalone'],
136
+ ```
137
+
138
+ ---
139
+
140
+ ## Framework Options
141
+
142
+ ### Mocha
143
+
144
+ ```typescript
145
+ framework: 'mocha',
146
+ mochaOpts: {
147
+ ui: 'bdd',
148
+ timeout: 60000,
149
+ },
150
+ ```
151
+
152
+ ### Jasmine
153
+
154
+ ```typescript
155
+ framework: 'jasmine',
156
+ jasmineOpts: {
157
+ defaultTimeoutInterval: 60000,
158
+ expectationResultHandler: (passed, assertion) => {},
159
+ },
160
+ ```
161
+
162
+ ### Cucumber
163
+
164
+ ```typescript
165
+ framework: 'cucumber',
166
+ cucumberOpts: {
167
+ require: ['./test/step-definitions/**/*.ts'],
168
+ timeout: 60000,
169
+ },
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Reporters
175
+
176
+ | Reporter | Purpose |
177
+ |----------|---------|
178
+ | `spec` | Console output with pass/fail |
179
+ | `dot` | Minimal dots for progress |
180
+ | `allure` | Allure report (requires @wdio/allure-reporter) |
181
+ | `junit` | JUnit XML for CI |
182
+ | `json` | JSON output |
183
+ | `html` | HTML report (requires @wdio/html-reporter) |
184
+
185
+ ```typescript
186
+ reporters: [
187
+ 'spec',
188
+ ['allure', { outputDir: 'allure-results', disableWebdriverStepsReporting: true }],
189
+ ['junit', { outputDir: './reports/junit' }],
190
+ ],
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Key Options
196
+
197
+ | Option | Description | Default |
198
+ |--------|-------------|---------|
199
+ | `baseUrl` | Base URL for relative `browser.url()` | — |
200
+ | `waitforTimeout` | Default wait timeout (ms) | 10000 |
201
+ | `connectionRetryTimeout` | Selenium connection timeout | 120000 |
202
+ | `connectionRetryCount` | Connection retries | 3 |
203
+ | `maxInstances` | Max parallel instances | 5 |
204
+ | `bail` | Stop on first failure (0 = never) | 0 |
205
+ | `logLevel` | trace, debug, info, warn, error | info |
206
+
207
+ ---
208
+
209
+ ## TypeScript Support
210
+
211
+ ```typescript
212
+ // tsconfig.json
213
+ {
214
+ "compilerOptions": {
215
+ "types": ["node", "@wdio/globals/types", "@wdio/mocha-framework"],
216
+ "moduleResolution": "node",
217
+ "esModuleInterop": true,
218
+ "strict": true
219
+ },
220
+ "include": ["test/**/*.ts", "wdio.conf.ts"]
221
+ }
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Environment-Specific Config
227
+
228
+ ```typescript
229
+ const env = process.env.TEST_ENV || 'local';
230
+ const configs = {
231
+ local: { baseUrl: 'http://localhost:3000' },
232
+ staging: { baseUrl: 'https://staging.example.com' },
233
+ prod: { baseUrl: 'https://example.com' },
234
+ };
235
+
236
+ export const config: Options.Testrunner = {
237
+ ...baseConfig,
238
+ ...configs[env],
239
+ };
240
+ ```
@@ -0,0 +1,269 @@
1
+ # WebdriverIO Patterns
2
+
3
+ ## Selectors
4
+
5
+ ### $() and $$() Element Queries
6
+
7
+ ```typescript
8
+ // Single element — returns Element
9
+ const submitBtn = await $('button[type="submit"]');
10
+ await submitBtn.click();
11
+
12
+ // Multiple elements — returns ElementArray
13
+ const items = await $$('.list-item');
14
+ expect(items).toHaveLength(5);
15
+ await items[0].click();
16
+ ```
17
+
18
+ ### Selector Strategies
19
+
20
+ | Strategy | Syntax | Use Case |
21
+ |----------|--------|----------|
22
+ | CSS | `$('button.primary')` | Simple, stable selectors |
23
+ | XPath | `$('//button[text()="Submit"]')` | Text-based, complex hierarchy |
24
+ | ID | `$('#login-form')` | Unique IDs |
25
+ | Data attribute | `$('[data-testid="submit-btn"]')` | Test-specific, stable |
26
+ | Link text | `$('=Sign In')` | Exact link text |
27
+ | Partial link | `$('*=Sign')` | Partial link text |
28
+
29
+ ### Chained Selectors
30
+
31
+ ```typescript
32
+ // Parent → child
33
+ const form = await $('form.login');
34
+ const emailInput = await form.$('input[name="email"]');
35
+ await emailInput.setValue('user@example.com');
36
+
37
+ // Shadow DOM
38
+ const host = await $('my-component');
39
+ const inner = await host.$('>>> .inner-element');
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Waits
45
+
46
+ ### Built-in Wait Strategies
47
+
48
+ ```typescript
49
+ // waitForDisplayed — element visible
50
+ await $('#results').waitForDisplayed({ timeout: 5000 });
51
+
52
+ // waitForExist — element in DOM
53
+ await $('#loading').waitForExist({ reverse: true });
54
+
55
+ // waitForClickable — element enabled and clickable
56
+ await $('button').waitForClickable();
57
+
58
+ // waitForEnabled
59
+ await $('#submit').waitForEnabled();
60
+ ```
61
+
62
+ ### Custom Waits
63
+
64
+ ```typescript
65
+ // browser.waitUntil — custom condition
66
+ await browser.waitUntil(
67
+ async () => (await $('#status').getText()) === 'Ready',
68
+ { timeout: 10000, interval: 500 }
69
+ );
70
+ ```
71
+
72
+ ### Avoid Fixed Delays
73
+
74
+ ```typescript
75
+ // Bad — brittle
76
+ await browser.pause(3000);
77
+
78
+ // Good — explicit condition
79
+ await $('#content').waitForDisplayed();
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Page Object Pattern
85
+
86
+ ### Base Page
87
+
88
+ ```typescript
89
+ // pages/BasePage.ts
90
+ export default class BasePage {
91
+ async open(path: string) {
92
+ await browser.url(path);
93
+ }
94
+
95
+ async getTitle() {
96
+ return browser.getTitle();
97
+ }
98
+
99
+ async waitForPageLoad() {
100
+ await browser.waitUntil(
101
+ async () => (await browser.execute(() => document.readyState)) === 'complete',
102
+ { timeout: 10000 }
103
+ );
104
+ }
105
+ }
106
+ ```
107
+
108
+ ### Page-Specific Object
109
+
110
+ ```typescript
111
+ // pages/LoginPage.ts
112
+ import BasePage from './BasePage';
113
+
114
+ export default class LoginPage extends BasePage {
115
+ get emailInput() {
116
+ return $('input[name="email"]');
117
+ }
118
+
119
+ get passwordInput() {
120
+ return $('input[name="password"]');
121
+ }
122
+
123
+ get submitButton() {
124
+ return $('button[type="submit"]');
125
+ }
126
+
127
+ async login(email: string, password: string) {
128
+ await this.emailInput.setValue(email);
129
+ await this.passwordInput.setValue(password);
130
+ await this.submitButton.click();
131
+ }
132
+
133
+ async open() {
134
+ await super.open('/login');
135
+ }
136
+ }
137
+ ```
138
+
139
+ ### Using Page Objects in Tests
140
+
141
+ ```typescript
142
+ import LoginPage from '../pages/LoginPage';
143
+
144
+ describe('Login', () => {
145
+ const loginPage = new LoginPage();
146
+
147
+ it('logs in successfully', async () => {
148
+ await loginPage.open();
149
+ await loginPage.login('user@example.com', 'secret');
150
+ await expect(browser).toHaveUrlContaining('/dashboard');
151
+ });
152
+ });
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Custom Commands
158
+
159
+ ### Adding Custom Commands
160
+
161
+ ```typescript
162
+ // wdio.conf.ts or in a support file
163
+ browser.addCommand('loginWith', async function (email: string, password: string) {
164
+ await this.url('/login');
165
+ await $('input[name="email"]').setValue(email);
166
+ await $('input[name="password"]').setValue(password);
167
+ await $('button[type="submit"]').click();
168
+ });
169
+
170
+ // Usage in test
171
+ await browser.loginWith('user@example.com', 'secret');
172
+ ```
173
+
174
+ ### Element Add Commands
175
+
176
+ ```typescript
177
+ browser.addCommand('getTextContent', async function () {
178
+ return this.getAttribute('textContent');
179
+ }, true); // true = chainable
180
+
181
+ // Usage
182
+ const text = await $('.header').getTextContent();
183
+ ```
184
+
185
+ ---
186
+
187
+ ## File Upload
188
+
189
+ ```typescript
190
+ // Input type="file" — set path directly
191
+ const fileInput = await $('input[type="file"]');
192
+ await fileInput.setValue('/absolute/path/to/file.pdf');
193
+
194
+ // Or use browser.uploadFile (requires @wdio/upload package)
195
+ import path from 'path';
196
+ const filePath = await browser.uploadFile(path.join(__dirname, 'fixtures', 'document.pdf'));
197
+ await $('input[type="file"]').setValue(filePath);
198
+ ```
199
+
200
+ ---
201
+
202
+ ## Multiremote (Parallel Browsers)
203
+
204
+ Run the same test across multiple browsers simultaneously:
205
+
206
+ ```typescript
207
+ // wdio.conf.ts
208
+ export const config = {
209
+ capabilities: {
210
+ browserA: {
211
+ capabilities: {
212
+ browserName: 'chrome',
213
+ },
214
+ },
215
+ browserB: {
216
+ capabilities: {
217
+ browserName: 'firefox',
218
+ },
219
+ },
220
+ },
221
+ };
222
+ ```
223
+
224
+ ```typescript
225
+ // In test
226
+ describe('multiremote', () => {
227
+ it('runs in both browsers', async () => {
228
+ await browser.browserA.url('https://example.com');
229
+ await browser.browserB.url('https://example.com');
230
+ const titleA = await browser.browserA.getTitle();
231
+ const titleB = await browser.browserB.getTitle();
232
+ expect(titleA).toEqual(titleB);
233
+ });
234
+ });
235
+ ```
236
+
237
+ ---
238
+
239
+ ## Common Interactions
240
+
241
+ ### Navigation
242
+
243
+ ```typescript
244
+ await browser.url('https://example.com');
245
+ await browser.url('/login'); // relative to baseUrl
246
+ await browser.back();
247
+ await browser.forward();
248
+ await browser.refresh();
249
+ ```
250
+
251
+ ### Form Actions
252
+
253
+ ```typescript
254
+ await $('input').setValue('text');
255
+ await $('input').addValue(' appended');
256
+ await $('input').clearValue();
257
+ await $('select').selectByVisibleText('Option 1');
258
+ await $('select').selectByAttribute('value', 'opt1');
259
+ await $('input[type="checkbox"]').click();
260
+ ```
261
+
262
+ ### Assertions
263
+
264
+ ```typescript
265
+ await expect($('h1')).toHaveText('Welcome');
266
+ await expect($('#results')).toBeDisplayed();
267
+ await expect(browser).toHaveUrlContaining('/dashboard');
268
+ await expect($('.count')).toHaveElementClass('active');
269
+ ```