codeceptjs 4.0.0-rc.2 → 4.0.0-rc.20

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 (294) hide show
  1. package/README.md +39 -27
  2. package/bin/codecept.js +15 -2
  3. package/bin/codeceptq.js +49 -0
  4. package/bin/mcp-server.js +1187 -0
  5. package/docs/advanced.md +201 -0
  6. package/docs/agents.md +159 -0
  7. package/docs/ai.md +537 -0
  8. package/docs/aitrace.md +266 -0
  9. package/docs/api.md +332 -0
  10. package/docs/assertions.md +415 -0
  11. package/docs/auth.md +318 -0
  12. package/docs/basics.md +424 -0
  13. package/docs/bdd.md +539 -0
  14. package/docs/best.md +240 -0
  15. package/docs/bootstrap.md +132 -0
  16. package/docs/commands.md +352 -0
  17. package/docs/community-helpers.md +63 -0
  18. package/docs/configuration.md +230 -0
  19. package/docs/continuous-integration.md +497 -0
  20. package/docs/custom-helpers.md +297 -0
  21. package/docs/data.md +448 -0
  22. package/docs/debugging.md +332 -0
  23. package/docs/detox.md +235 -0
  24. package/docs/docker.md +136 -0
  25. package/docs/effects.md +179 -0
  26. package/docs/element-based-testing.md +295 -0
  27. package/docs/element-selection.md +125 -0
  28. package/docs/els.md +328 -0
  29. package/docs/examples.md +161 -0
  30. package/docs/heal.md +213 -0
  31. package/docs/helpers/ApiDataFactory.md +267 -0
  32. package/docs/helpers/Appium.md +1405 -0
  33. package/docs/helpers/Detox.md +665 -0
  34. package/docs/helpers/ExpectHelper.md +275 -0
  35. package/docs/helpers/FileSystem.md +152 -0
  36. package/docs/helpers/GraphQL.md +152 -0
  37. package/docs/helpers/GraphQLDataFactory.md +226 -0
  38. package/docs/helpers/JSONResponse.md +255 -0
  39. package/docs/helpers/Mochawesome.md +8 -0
  40. package/docs/helpers/MockRequest.md +377 -0
  41. package/docs/helpers/MockServer.md +212 -0
  42. package/docs/helpers/Playwright.md +2969 -0
  43. package/docs/helpers/Polly.md +44 -0
  44. package/docs/helpers/Protractor.md +1769 -0
  45. package/docs/helpers/Puppeteer-firefox.md +86 -0
  46. package/docs/helpers/Puppeteer.md +2690 -0
  47. package/docs/helpers/REST.md +289 -0
  48. package/docs/helpers/SoftExpectHelper.md +352 -0
  49. package/docs/helpers/WebDriver.md +2682 -0
  50. package/docs/hooks.md +339 -0
  51. package/docs/index.md +111 -0
  52. package/docs/installation.md +83 -0
  53. package/docs/internal-api.md +265 -0
  54. package/docs/internal-test-server.md +89 -0
  55. package/docs/locators.md +355 -0
  56. package/docs/mcp.md +485 -0
  57. package/docs/migration-4.md +556 -0
  58. package/docs/mobile.md +338 -0
  59. package/docs/pageobjects.md +399 -0
  60. package/docs/parallel.md +585 -0
  61. package/docs/playwright.md +714 -0
  62. package/docs/plugins.md +866 -0
  63. package/docs/puppeteer.md +314 -0
  64. package/docs/quickstart.md +120 -0
  65. package/docs/react.md +70 -0
  66. package/docs/reports.md +483 -0
  67. package/docs/retry.md +274 -0
  68. package/docs/secrets.md +150 -0
  69. package/docs/sessions.md +80 -0
  70. package/docs/shadow.md +68 -0
  71. package/docs/test-structure.md +275 -0
  72. package/docs/timeouts.md +183 -0
  73. package/docs/translation.md +247 -0
  74. package/docs/tutorial.md +271 -0
  75. package/docs/typescript.md +374 -0
  76. package/docs/web-element.md +251 -0
  77. package/docs/webdriver.md +708 -0
  78. package/docs/within.md +55 -0
  79. package/lib/ai.js +3 -2
  80. package/lib/aria.js +260 -0
  81. package/lib/assertions.js +18 -0
  82. package/lib/codecept.js +26 -23
  83. package/lib/command/check.js +2 -1
  84. package/lib/command/dryRun.js +24 -5
  85. package/lib/command/generate.js +2 -0
  86. package/lib/command/gherkin/snippets.js +5 -4
  87. package/lib/command/init.js +248 -269
  88. package/lib/command/list.js +150 -10
  89. package/lib/command/query.js +218 -0
  90. package/lib/command/run-multiple.js +2 -0
  91. package/lib/command/run-workers.js +2 -0
  92. package/lib/command/run.js +1 -1
  93. package/lib/command/workers/runTests.js +10 -10
  94. package/lib/config.js +77 -4
  95. package/lib/container.js +114 -17
  96. package/lib/effects.js +17 -0
  97. package/lib/element/WebElement.js +246 -2
  98. package/lib/els.js +12 -6
  99. package/lib/globals.js +32 -19
  100. package/lib/heal.js +4 -3
  101. package/lib/helper/ApiDataFactory.js +2 -1
  102. package/lib/helper/Appium.js +8 -8
  103. package/lib/helper/FileSystem.js +3 -2
  104. package/lib/helper/GraphQLDataFactory.js +2 -1
  105. package/lib/helper/Playwright.js +228 -162
  106. package/lib/helper/Puppeteer.js +208 -76
  107. package/lib/helper/WebDriver.js +173 -68
  108. package/lib/helper/errors/MultipleElementsFound.js +27 -110
  109. package/lib/helper/errors/NonFocusedType.js +8 -0
  110. package/lib/helper/extras/Download.js +45 -0
  111. package/lib/helper/extras/PlaywrightReactVueLocator.js +45 -36
  112. package/lib/helper/extras/elementSelection.js +58 -0
  113. package/lib/helper/extras/focusCheck.js +43 -0
  114. package/lib/helper/extras/richTextEditor.js +178 -0
  115. package/lib/helper/scripts/dropFile.js +11 -0
  116. package/lib/history.js +3 -2
  117. package/lib/html.js +103 -16
  118. package/lib/index.js +9 -1
  119. package/lib/listener/config.js +6 -4
  120. package/lib/listener/emptyRun.js +2 -1
  121. package/lib/listener/globalRetry.js +32 -6
  122. package/lib/listener/helpers.js +4 -1
  123. package/lib/listener/mocha.js +2 -1
  124. package/lib/listener/pageobjects.js +43 -0
  125. package/lib/listener/result.js +3 -2
  126. package/lib/locator.js +126 -3
  127. package/lib/mocha/cli.js +14 -2
  128. package/lib/mocha/factory.js +7 -2
  129. package/lib/mocha/inject.js +1 -1
  130. package/lib/mocha/scenarioConfig.js +2 -1
  131. package/lib/mocha/ui.js +5 -6
  132. package/lib/parser.js +2 -2
  133. package/lib/pause.js +38 -4
  134. package/lib/plugin/aiTrace.js +453 -0
  135. package/lib/plugin/analyze.js +1 -1
  136. package/lib/plugin/auth.js +3 -3
  137. package/lib/plugin/browser.js +77 -0
  138. package/lib/plugin/expose.js +159 -0
  139. package/lib/plugin/heal.js +44 -1
  140. package/lib/plugin/pageInfo.js +53 -49
  141. package/lib/plugin/pause.js +131 -0
  142. package/lib/plugin/pauseOnFail.js +10 -34
  143. package/lib/plugin/retryFailedStep.js +28 -19
  144. package/lib/plugin/screencast.js +287 -0
  145. package/lib/plugin/screenshot.js +563 -0
  146. package/lib/plugin/screenshotOnFail.js +8 -171
  147. package/lib/rerun.js +2 -1
  148. package/lib/result.js +2 -1
  149. package/lib/step/base.js +3 -2
  150. package/lib/step/config.js +15 -2
  151. package/lib/step/record.js +2 -2
  152. package/lib/store.js +72 -3
  153. package/lib/translation.js +2 -1
  154. package/lib/utils/mask_data.js +2 -1
  155. package/lib/utils/pluginParser.js +151 -0
  156. package/lib/utils/trace.js +297 -0
  157. package/lib/utils.js +77 -3
  158. package/lib/workers.js +52 -22
  159. package/package.json +19 -13
  160. package/typings/index.d.ts +19 -5
  161. package/docs/webapi/amOnPage.mustache +0 -11
  162. package/docs/webapi/appendField.mustache +0 -11
  163. package/docs/webapi/attachFile.mustache +0 -12
  164. package/docs/webapi/blur.mustache +0 -18
  165. package/docs/webapi/checkOption.mustache +0 -13
  166. package/docs/webapi/clearCookie.mustache +0 -9
  167. package/docs/webapi/clearField.mustache +0 -9
  168. package/docs/webapi/click.mustache +0 -29
  169. package/docs/webapi/clickLink.mustache +0 -8
  170. package/docs/webapi/closeCurrentTab.mustache +0 -7
  171. package/docs/webapi/closeOtherTabs.mustache +0 -8
  172. package/docs/webapi/dontSee.mustache +0 -11
  173. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  174. package/docs/webapi/dontSeeCookie.mustache +0 -8
  175. package/docs/webapi/dontSeeCurrentPathEquals.mustache +0 -10
  176. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  177. package/docs/webapi/dontSeeElement.mustache +0 -8
  178. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  179. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  180. package/docs/webapi/dontSeeInField.mustache +0 -11
  181. package/docs/webapi/dontSeeInSource.mustache +0 -8
  182. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  183. package/docs/webapi/dontSeeTraffic.mustache +0 -13
  184. package/docs/webapi/doubleClick.mustache +0 -13
  185. package/docs/webapi/downloadFile.mustache +0 -12
  186. package/docs/webapi/dragAndDrop.mustache +0 -9
  187. package/docs/webapi/dragSlider.mustache +0 -11
  188. package/docs/webapi/executeAsyncScript.mustache +0 -24
  189. package/docs/webapi/executeScript.mustache +0 -26
  190. package/docs/webapi/fillField.mustache +0 -16
  191. package/docs/webapi/flushNetworkTraffics.mustache +0 -5
  192. package/docs/webapi/focus.mustache +0 -13
  193. package/docs/webapi/forceClick.mustache +0 -28
  194. package/docs/webapi/forceRightClick.mustache +0 -18
  195. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  196. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  197. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  198. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  199. package/docs/webapi/grabCookie.mustache +0 -11
  200. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  201. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  202. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  203. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  204. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  205. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  206. package/docs/webapi/grabGeoLocation.mustache +0 -8
  207. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  208. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  209. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  210. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  211. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  212. package/docs/webapi/grabPopupText.mustache +0 -5
  213. package/docs/webapi/grabRecordedNetworkTraffics.mustache +0 -10
  214. package/docs/webapi/grabSource.mustache +0 -8
  215. package/docs/webapi/grabTextFrom.mustache +0 -10
  216. package/docs/webapi/grabTextFromAll.mustache +0 -9
  217. package/docs/webapi/grabTitle.mustache +0 -8
  218. package/docs/webapi/grabValueFrom.mustache +0 -9
  219. package/docs/webapi/grabValueFromAll.mustache +0 -8
  220. package/docs/webapi/grabWebElement.mustache +0 -9
  221. package/docs/webapi/grabWebElements.mustache +0 -9
  222. package/docs/webapi/moveCursorTo.mustache +0 -12
  223. package/docs/webapi/openNewTab.mustache +0 -7
  224. package/docs/webapi/pressKey.mustache +0 -12
  225. package/docs/webapi/pressKeyDown.mustache +0 -12
  226. package/docs/webapi/pressKeyUp.mustache +0 -12
  227. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  228. package/docs/webapi/refreshPage.mustache +0 -6
  229. package/docs/webapi/resizeWindow.mustache +0 -6
  230. package/docs/webapi/rightClick.mustache +0 -14
  231. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  232. package/docs/webapi/saveScreenshot.mustache +0 -12
  233. package/docs/webapi/say.mustache +0 -10
  234. package/docs/webapi/scrollIntoView.mustache +0 -11
  235. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  236. package/docs/webapi/scrollPageToTop.mustache +0 -6
  237. package/docs/webapi/scrollTo.mustache +0 -12
  238. package/docs/webapi/see.mustache +0 -11
  239. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  240. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  241. package/docs/webapi/seeCookie.mustache +0 -8
  242. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  243. package/docs/webapi/seeCurrentPathEquals.mustache +0 -10
  244. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  245. package/docs/webapi/seeElement.mustache +0 -8
  246. package/docs/webapi/seeElementInDOM.mustache +0 -8
  247. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  248. package/docs/webapi/seeInField.mustache +0 -12
  249. package/docs/webapi/seeInPopup.mustache +0 -8
  250. package/docs/webapi/seeInSource.mustache +0 -7
  251. package/docs/webapi/seeInTitle.mustache +0 -8
  252. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  253. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  254. package/docs/webapi/seeTextEquals.mustache +0 -9
  255. package/docs/webapi/seeTitleEquals.mustache +0 -8
  256. package/docs/webapi/seeTraffic.mustache +0 -36
  257. package/docs/webapi/selectOption.mustache +0 -21
  258. package/docs/webapi/setCookie.mustache +0 -16
  259. package/docs/webapi/setGeoLocation.mustache +0 -12
  260. package/docs/webapi/startRecordingTraffic.mustache +0 -8
  261. package/docs/webapi/startRecordingWebSocketMessages.mustache +0 -8
  262. package/docs/webapi/stopRecordingTraffic.mustache +0 -5
  263. package/docs/webapi/stopRecordingWebSocketMessages.mustache +0 -7
  264. package/docs/webapi/switchTo.mustache +0 -9
  265. package/docs/webapi/switchToNextTab.mustache +0 -10
  266. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  267. package/docs/webapi/type.mustache +0 -21
  268. package/docs/webapi/uncheckOption.mustache +0 -13
  269. package/docs/webapi/wait.mustache +0 -8
  270. package/docs/webapi/waitForClickable.mustache +0 -11
  271. package/docs/webapi/waitForCookie.mustache +0 -9
  272. package/docs/webapi/waitForDetached.mustache +0 -10
  273. package/docs/webapi/waitForDisabled.mustache +0 -6
  274. package/docs/webapi/waitForElement.mustache +0 -11
  275. package/docs/webapi/waitForEnabled.mustache +0 -6
  276. package/docs/webapi/waitForFunction.mustache +0 -17
  277. package/docs/webapi/waitForInvisible.mustache +0 -10
  278. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  279. package/docs/webapi/waitForText.mustache +0 -13
  280. package/docs/webapi/waitForValue.mustache +0 -10
  281. package/docs/webapi/waitForVisible.mustache +0 -10
  282. package/docs/webapi/waitInUrl.mustache +0 -9
  283. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  284. package/docs/webapi/waitToHide.mustache +0 -10
  285. package/docs/webapi/waitUrlEquals.mustache +0 -10
  286. package/lib/helper/AI.js +0 -214
  287. package/lib/listener/enhancedGlobalRetry.js +0 -110
  288. package/lib/plugin/enhancedRetryFailedStep.js +0 -99
  289. package/lib/plugin/htmlReporter.js +0 -3648
  290. package/lib/plugin/stepByStepReport.js +0 -427
  291. package/lib/plugin/subtitles.js +0 -89
  292. package/lib/retryCoordinator.js +0 -207
  293. package/typings/promiseBasedTypes.d.ts +0 -9469
  294. package/typings/types.d.ts +0 -11402
@@ -0,0 +1,352 @@
1
+ ---
2
+ permalink: /commands
3
+ title: Commands
4
+ ---
5
+
6
+ # Commands
7
+
8
+ ## Run
9
+
10
+ Executes tests. Requires `codecept.conf.js` config to be present in provided path.
11
+
12
+ ---
13
+
14
+ Run all tests from current dir
15
+
16
+ ```sh
17
+ npx codeceptjs run
18
+ ```
19
+
20
+ Load config and run tests from `test` dir
21
+
22
+ ```sh
23
+ npx codeceptjs run -c test
24
+ ```
25
+
26
+ Run only tests with "signin" word in name
27
+
28
+ ```sh
29
+ npx codeceptjs run --grep "signin"
30
+ ```
31
+
32
+ Run all tests without "@IEOnly" word in name
33
+
34
+ ```sh
35
+ npx codeceptjs run --grep "@IEOnly" --invert
36
+ ```
37
+
38
+ Run single test [path to codecept.js] [test filename]
39
+
40
+ ```sh
41
+ npx codeceptjs run github_test.js
42
+ ```
43
+
44
+ Run single test with steps printed
45
+
46
+ ```sh
47
+ npx codeceptjs run github_test.js --steps
48
+ ```
49
+
50
+ Run test files in shuffled order
51
+
52
+ ```sh
53
+ npx codeceptjs run --shuffle
54
+ ```
55
+
56
+ Run single test in debug mode (see more in [debugging](#Debugging) section)
57
+
58
+ ```sh
59
+ npx codeceptjs run github_test.js --debug
60
+ ```
61
+
62
+ Select config file manually (`-c` or `--config` option)
63
+
64
+ ```sh
65
+ npx codeceptjs run -c my.codecept.conf.js
66
+ npx codeceptjs run --config path/to/codecept.conf.js
67
+ ```
68
+
69
+ Override config on the fly. Provide valid JSON which will be merged into current config:
70
+
71
+ ```sh
72
+ npx codeceptjs run --override '{ "helpers": {"WebDriver": {"browser": "chrome"}}}'
73
+ ```
74
+
75
+ Run tests and produce xunit report:
76
+
77
+ ```sh
78
+ npx codeceptjs run --reporter xunit
79
+ ```
80
+
81
+ Use any of [Mocha reporters](https://github.com/mochajs/mocha/tree/master/lib/reporters) used.
82
+
83
+ #### Debugging
84
+
85
+ Run single test in debug mode
86
+
87
+ ```sh
88
+ npx codeceptjs run --debug
89
+ ```
90
+
91
+ Run test with internal logs printed.
92
+
93
+ ```sh
94
+ npx codeceptjs run --verbose
95
+ ```
96
+
97
+ Display complete debug output including scheduled promises
98
+
99
+ ```
100
+ DEBUG=codeceptjs:* npx codeceptjs run
101
+ ```
102
+
103
+ ## Plugin Arguments
104
+
105
+ `run`, `run-workers`, `run-multiple`, `run-rerun` and `dry-run` accept a `-p` (`--plugins`) flag to enable plugins on the command line, with optional arguments per plugin. Tokens are colon-chained per plugin, comma-separated across plugins:
106
+
107
+ ```sh
108
+ npx codeceptjs run -p <name> # enable plugin
109
+ npx codeceptjs run -p <name>:<arg1>:<arg2> # enable + pass args
110
+ npx codeceptjs run -p <plugin1>,<plugin2>:<arg> # multiple plugins
111
+ ```
112
+
113
+ Plugins listed via `-p` are activated even when their config has `enabled: false` (or no `enabled` flag). This is the supported way to switch a plugin on for a single run without editing `codecept.conf`.
114
+
115
+ A few examples:
116
+
117
+ ```sh
118
+ npx codeceptjs run -p pause # pause on first failure (default on=fail)
119
+ npx codeceptjs run -p pause:on=step # pause before every step
120
+ npx codeceptjs run -p pause:on=url:pattern=/checkout/* # pause on URL match
121
+ npx codeceptjs run -p "screenshot:on=step;slides=true" # produce a step-by-step HTML report
122
+ ```
123
+
124
+ ### Browser Control
125
+
126
+ The built-in `browser` plugin overrides browser-helper config from the CLI — works for Playwright, Puppeteer, WebDriver and Appium without editing `codecept.conf`.
127
+
128
+ ```sh
129
+ npx codeceptjs run -p browser:show # force visible browser
130
+ npx codeceptjs run -p browser:hide # force headless
131
+ npx codeceptjs run -p browser:browser=firefox # switch engine
132
+ npx codeceptjs run -p browser:windowSize=1024x768 # set viewport
133
+ npx codeceptjs run -p browser:hide:browser=webkit:windowSize=800x600
134
+ ```
135
+
136
+ Tokens after `browser:` are either flags (`show`, `hide`) or `key=value` pairs. Three keys get per-helper translation:
137
+
138
+ - `browser=<name>` — Puppeteer receives `product`, Playwright/WebDriver receive `browser`. Validated per helper (`chromium`/`webkit`/`firefox` for Playwright, `chrome`/`firefox` for Puppeteer).
139
+ - `show=true|false` (or the `show`/`hide` flag) — sets `show` on Playwright/Puppeteer; injects/strips `--headless` in WebDriver chrome/firefox capability args.
140
+ - `windowSize=WxH` — sets `windowSize` on every helper; also adds `--window-size=W,H` to chromium/chrome args for Playwright/Puppeteer.
141
+
142
+ Anything else (`-p browser:video=false:waitForTimeout=10000`) is shallow-merged onto every browser helper present in config. Values are coerced (`true`/`false` → boolean, digits → Number, otherwise string).
143
+
144
+ ## Run Workers
145
+
146
+ Run tests in parallel threads. CodeceptJS supports different distribution strategies for optimal performance.
147
+
148
+ ```bash
149
+ # Run with 3 workers using default strategy (pre-assign tests)
150
+ npx codeceptjs run-workers 3
151
+
152
+ # Run with pool mode for dynamic test distribution (recommended)
153
+ npx codeceptjs run-workers 3 --by pool
154
+
155
+ # Run with suite distribution
156
+ npx codeceptjs run-workers 3 --by suite
157
+
158
+ # Pool mode with filtering
159
+ npx codeceptjs run-workers 4 --by pool --grep "@smoke"
160
+ ```
161
+
162
+ **Test Distribution Strategies:**
163
+
164
+ - `--by test` (default): Pre-assigns individual tests to workers
165
+ - `--by suite`: Pre-assigns entire test suites to workers
166
+ - `--by pool`: Dynamic distribution for optimal load balancing (recommended for best performance)
167
+
168
+ The pool mode provides the best load balancing by maintaining tests in a shared pool and distributing them dynamically as workers become available. This prevents workers from sitting idle and ensures optimal CPU utilization, especially when tests have varying execution times.
169
+
170
+ See [Parallel Execution](/parallel) documentation for more details.
171
+
172
+ ## Run Rerun <Badge text="Since 3.3.6" type="warning"/>
173
+
174
+ Run tests multiple times to detect and fix flaky tests.
175
+
176
+ ```
177
+ npx codeceptjs run-rerun
178
+ ```
179
+
180
+ For this command configuration is required:
181
+
182
+ ```js
183
+ {
184
+ // inside codecept.conf.js
185
+ rerun: {
186
+ // how many times all tests should pass
187
+ minSuccess: 2,
188
+
189
+ // how many times to try to rerun all tests
190
+ maxReruns: 4,
191
+ }
192
+ }
193
+ ```
194
+
195
+ Use Cases:
196
+
197
+ * `minSuccess: 1, maxReruns: 5` - run all tests no more than 5 times, until first successful run.
198
+ * `minSuccess: 3, maxReruns: 5` - run all tests no more than 5 times, until reaching 3 successfull runs.
199
+ * `minSuccess: 10, maxReruns: 10` - run all tests exactly 10 times, to check their stability.
200
+
201
+
202
+ ## Dry Run
203
+
204
+ Prints test scenarios without executing them
205
+
206
+ ```
207
+ npx codeceptjs dry-run
208
+ ```
209
+
210
+ When passed `--steps` or `--debug` option runs tests, disabling all plugins and helpers, so you can get step-by-step report with no tests actually executed.
211
+
212
+ ```
213
+ npx codeceptjs dry-run --steps
214
+ ```
215
+
216
+ If a plugin needs to be enabled in `dry-run` mode, pass its name in `-p` option:
217
+
218
+ ```
219
+ npx codeceptjs dry-run --steps -p allure
220
+ ```
221
+
222
+ If some plugins need to be enabled in `dry-run` mode, pass its name in `-p` option:
223
+
224
+ ```
225
+ npx codeceptjs dry-run --steps -p allure,customLocator
226
+ ```
227
+
228
+ If all plugins need to be enabled in `dry-run` mode, pass its name in `-p` option:
229
+
230
+ ```
231
+ npx codeceptjs dry-run --steps -p all
232
+ ```
233
+
234
+ To enable bootstrap script in dry-run mode, pass in `--bootstrap` option when running with `--steps` or `--debug`
235
+
236
+ ```
237
+ npx codeceptjs dry-run --steps --bootstrap
238
+ ```
239
+
240
+ ## Run Multiple
241
+
242
+ > ⚠️ prefer using run-workers instead
243
+
244
+ Run multiple suites. Unlike `run-workers` spawns processes to execute tests.
245
+ [Requires additional configuration](/advanced#multiple-browsers-execution) and can be used to execute tests in multiple browsers.
246
+
247
+ ```sh
248
+ npx codeceptjs run-multiple smoke:chrome regression:firefox
249
+ ```
250
+
251
+ ## Init
252
+
253
+ Creates `codecept.conf.js` file in current directory:
254
+
255
+ ```sh
256
+ npx codeceptjs init
257
+ ```
258
+
259
+ Or in provided path
260
+
261
+ ```sh
262
+ npx codecept init test
263
+ ```
264
+
265
+ ## Migrate
266
+
267
+ Migrate your current `codecept.json` to `codecept.conf.js`
268
+
269
+ ```sh
270
+ npx codeceptjs migrate
271
+ ```
272
+
273
+ ## Shell
274
+
275
+ Interactive shell. Allows to try `I.` commands in runtime
276
+
277
+ ```sh
278
+ npx codeceptjs shell
279
+ ```
280
+
281
+ ## Generators
282
+
283
+ Create new test
284
+
285
+ ```sh
286
+ npx codeceptjs generate:test
287
+ ```
288
+
289
+ Create new pageobject
290
+
291
+ ```sh
292
+ npx codeceptjs generate:pageobject
293
+ ```
294
+
295
+ Create new helper
296
+
297
+ ```sh
298
+ npx codeceptjs generate:helper
299
+ ```
300
+
301
+ ## TypeScript Definitions
302
+
303
+ TypeScript Definitions allows IDEs to provide autocompletion when writing tests.
304
+
305
+ ```sh
306
+ npx codeceptjs def
307
+ npx codeceptjs def --config path/to/codecept.conf.js
308
+ ```
309
+
310
+ After doing that IDE should provide autocompletion for `I` object inside `Scenario` and `within` blocks.
311
+
312
+ Add optional parameter `output` (or shortcut `-o`), if you want to place your definition file in specific folder:
313
+
314
+ ```sh
315
+ npx codeceptjs def --output ./tests/typings
316
+ npx codeceptjs def -o ./tests/typings
317
+ ```
318
+
319
+ ## List Commands
320
+
321
+ Prints all available methods of `I` to console.
322
+
323
+ ```sh
324
+ npx codeceptjs list
325
+ ```
326
+
327
+ Use `-c` to point at a specific config (same as `run`):
328
+
329
+ ```sh
330
+ npx codeceptjs list -c ./test/acceptance/codecept.Playwright.js
331
+ ```
332
+
333
+ Add `--docs` to print full documentation (description, examples, `@param` annotations) below each action — pulled from helper JSDoc and `docs/webapi/*` snippets:
334
+
335
+ ```sh
336
+ npx codeceptjs list --docs
337
+ ```
338
+
339
+ Use `--action` to show docs for a single action. The `I.` prefix is optional and `--docs` is implied:
340
+
341
+ ```sh
342
+ npx codeceptjs list --action amOnPage
343
+ npx codeceptjs list --action I.click -c ./test/acceptance/codecept.Playwright.js
344
+ ```
345
+
346
+ ## Local Environment Information
347
+
348
+ Prints debugging information concerning the local environment
349
+
350
+ ```sh
351
+ npx codeceptjs info
352
+ ```
@@ -0,0 +1,63 @@
1
+ ---
2
+ permalink: /community-helpers
3
+ title: Community Helpers
4
+ editLink: false
5
+ ---
6
+
7
+ # Community Helpers
8
+ > Share your helpers at our [Wiki Page](https://github.com/codeceptjs/CodeceptJS/wiki/Community-Helpers)
9
+
10
+ Here is the list of helpers created by our community.
11
+ Please **add your own** by editing this page.
12
+ ## Webhooks
13
+
14
+ * [codeceptjs-webhook-helper](https://github.com/onemolegames/codeceptjs-webhook-helper) - to check webhook calls during the tests.
15
+
16
+ ## Email Checking
17
+
18
+ * [MailCatcher](https://gist.github.com/schmkr/026732dfa1627b927ff3a08dc31ee884) - to check emails via Mailcatcher locally.
19
+ * [codeceptjs-mailhog-helper](https://github.com/tsuemura/codeceptjs-mailhog-helper) - to check emails via Mailhog locally.
20
+ * [codeceptjs-testmailapp-helper](https://github.com/pavkam/codeceptjs-testmailapp-helper) - to check emails via Testmail.app service.
21
+ * [codeceptjs-mailosaurhelper](https://github.com/yurkovychv/codeceptjs-mailosaur) - to check emails via [Mailosaur](https://mailosaur.com/) service.
22
+
23
+ ## Data Sources
24
+
25
+ * [codeceptjs-httpmock](https://github.com/testphony/codeceptjs-httpMock) - a helper which wraps mockttp library to manage http mock in tests.
26
+ * [codeceptjs-http](https://github.com/testphony/codeceptjs-http) - a helper which wraps then-request library to process HTTP requests. It's alternative helper that provides more flexible request management.
27
+ * [codeceptjs-dbhelper](https://github.com/thiagodp/codeceptjs-dbhelper) - allows you to execute queries or commands to databases using database-js.
28
+
29
+ ## Cloud Providers
30
+ * [codeceptjs-saucehelper](https://github.com/puneet0191/codeceptjs-saucehelper/) - a helper which updates `Test Names` & `Test Results` on Saucelabs
31
+ * [codeceptjs-bshelper](https://github.com/PeterNgTr/codeceptjs-bshelper) - a helper which updates `Test Names` & `Test Results` on Browserstack
32
+ * [codeceptjs-tbhelper](https://github.com/testingbot/codeceptjs-tbhelper) - a helper which updates `Test Names` & `Test Results` on TestingBot
33
+
34
+ ## Visual-Testing
35
+ * [codeceptjs-resemblehelper](https://github.com/puneet0191/codeceptjs-resemblehelper) - a helper which helps with visual testing using resemble.js.
36
+ * [codeceptjs-applitoolshelper](https://www.npmjs.com/package/codeceptjs-applitoolshelper) - a helper which helps interaction with [Applitools](https://applitools.com)
37
+ * [codeceptjs-pixelmatchhelper](https://github.com/stracker-phil/codeceptjs-pixelmatchhelper) - a helper that integrates pixelmatch for visual testing.
38
+
39
+ ## Reporters
40
+ * [codeceptjs-rphelper](https://github.com/reportportal/agent-js-codecept) is a CodeceptJS helper which can publish tests results on ReportPortal after execution.
41
+ * [codeceptjs-xray-helper](https://www.npmjs.com/package/codeceptjs-xray-helper) is a CodeceptJS helper which can publish tests results on [XRAY](https://confluence.xpand-it.com/display/XRAYCLOUD/Import+Execution+Results+-+REST).
42
+ * [codeceptjs-xray-cloud-helper](https://www.npmjs.com/package/codeceptjs-xray-cloud-helper) is a helper that automatically retrieves the result of CodeceptJS tests and sends them to XRAY/JIRA(cloud version) via [XRAY Cloud API](https://docs.getxray.app/display/XRAYCLOUD/Import+Execution+Results+-+REST+v2#ImportExecutionResultsRESTv2-XrayJSONresults).
43
+ * [codeceptjs-slack-reporter](https://www.npmjs.com/package/codeceptjs-slack-reporter) Get a Slack notification when one or more scenarios fail.
44
+ * [codeceptjs-browserlogs-plugin](https://github.com/pavkam/codeceptjs-browserlogs-plugin) Record the browser logs for failed tests.
45
+ * [codeceptjs-testrail](https://github.com/PeterNgTr/codeceptjs-testrail) - a plugin to integrate with [Testrail](https://www.gurock.com/testrail)
46
+ * [codeceptjs-monocart-coverage](https://github.com/cenfun/codeceptjs-monocart-coverage) - a plugin to generate coverage reports, it integrate with [monocart coverage reports](https://github.com/cenfun/monocart-coverage-reports)
47
+
48
+ ## Browser request control
49
+ * [codeceptjs-resources-check](https://github.com/luarmr/codeceptjs-resources-check) Load a URL with Puppeteer and listen to the requests while the page is loading. Enabling count the number or check the sizes of the requests.
50
+
51
+ ## Assertion & Validations
52
+ * [codeceptjs-chai](https://www.npmjs.com/package/codeceptjs-chai) is a CodeceptJS helper which wraps
53
+ [chai](https://www.chaijs.com/) library to complete chai assertion steps with CodeceptJS logging.
54
+
55
+ ## Other
56
+
57
+ * [codeceptjs-cmdhelper](https://github.com/thiagodp/codeceptjs-cmdhelper) allows you to run commands in the terminal/console
58
+ * [eslint-plugin-codeceptjs](https://www.npmjs.com/package/eslint-plugin-codeceptjs) Eslint rules for CodeceptJS.
59
+ * [codeceptjs-datalayer-helper](https://github.com/kobenguyent/codeceptjs-datalayer-helper) CodeceptJS DataLayer helper helps you to get the datalayer JavaScript array that is used to store information and send this data to the tag manager.
60
+ * [codeceptjs-a11y-helper](https://github.com/kobenguyent/codeceptjs-a11y-helper) accessibility tests integrated with CodeceptJS - Playwright-axe
61
+ * [codeceptjs-lighthouse-helper](https://github.com/kobenguyent/codeceptjs-lighthouse-helper) lighthouse audit integrated with CodeceptJS - Playwright
62
+ * [Snowplow Data analytics](https://www.npmjs.com/package/@viasat/codeceptjs-snowplow-helper) - Test your Snowplow events implementations with CodeceptJS and Snowplow Micro.
63
+ * [codeceptjs-failure-logger](https://github.com/kobenguyent/codeceptjs-failure-logger) - Log failed CodeceptJS tests to file
@@ -0,0 +1,230 @@
1
+ ---
2
+ permalink: /configuration
3
+ title: Configuration
4
+ ---
5
+
6
+ # Configuration
7
+
8
+ CodeceptJS configuration is set in `codecept.conf.js` file.
9
+
10
+ After running `codeceptjs init` it should be saved in test root.
11
+
12
+ | Name | Type | Description |
13
+ | :------------------- | :----------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
14
+ | `bootstrap?` | (() => `Promise`<`void`\>) \| `boolean` \| `string` | [Execute code before](https://codecept.io/bootstrap/) tests are run. Can be either JS module file or async function: `bootstrap: async () => server.launch(), ` or `bootstrap: 'bootstrap.js', ` |
15
+ | `bootstrapAll?` | (() => `Promise`<`void`\>) \| `boolean` \| `string` | [Execute code before launching tests in parallel mode](https://codecept.io/bootstrap/#bootstrapall-teardownall) |
16
+ | `gherkin?` | { `features`: `string` \| `string`[] ; `steps`: `string`[] } | Enable [BDD features](https://codecept.io/bdd/#configuration). Sample configuration: `gherkin: { features: "./features/*.feature", steps: ["./step_definitions/steps.js"] } ` |
17
+ | `gherkin.features` | `string` \| `string`[] | load feature files by pattern. Multiple patterns can be specified as array |
18
+ | `gherkin.steps` | `string`[] | load step definitions from JS files |
19
+ | `grep?` | `string` | Pattern to filter tests by name. This option is useful if you plan to use multiple configs for different environments. To execute only tests with @firefox tag use `grep: '@firefox' ` |
20
+ | `helpers?` | {} | Enable and configure helpers: `helpers: { Playwright: { url: 'https://mysite.com', browser: 'firefox' } } ` |
21
+ | `include?` | `any` | Include page objects to access them via dependency injection `I: "./custom_steps.js", loginPage: "./pages/Login.js", User: "./pages/User.js", ` Configured modules can be injected by name in a Scenario: `Scenario('test', { I, loginPage, User }) ` |
22
+ | `mocha?` | `any` | [Mocha test runner options](https://mochajs.org/#configuring-mocha-nodejs), additional [reporters](https://codecept.io/reports/#xml) can be configured here. Example: `mocha: { "mocha-junit-reporter": { stdout: "./output/console.log", options: { mochaFile: "./output/result.xml", attachments: true //add screenshot for a failed test } } } ` |
23
+ | `noGlobals?` | `boolean` | Disable registering global functions (Before, Scenario, etc). Not recommended |
24
+ | `output` | `string` | Where to store failure screenshots, artifacts, etc `output: './output' ` |
25
+ | `plugins?` | `any` | Enable CodeceptJS plugins. Example: `plugins: { autoDelay: { enabled: true } } ` |
26
+ | `require?` | `string`[] | [Require additional JS modules](https://codecept.io/configuration/#require) Example: `require: ["should"]` |
27
+ | `teardown?` | (() => `Promise`<`void`\>) \| `boolean` \| `string` | [Execute code after tests](https://codecept.io/bootstrap/) finished. Can be either JS module file or async function: `teardown: async () => server.stop(), ` or `teardown: 'teardown.js', ` |
28
+ | `teardownAll?` | (() => `Promise`<`void`\>) \| `boolean` \| `string` | [Execute JS code after finishing tests in parallel mode](https://codecept.io/bootstrap/#bootstrapall-teardownall) |
29
+ | `tests` | `string` | Pattern to locate CodeceptJS tests. Allows to enter glob pattern or an Array<string> of patterns to match tests / test file names. For tests in JavaScript: `tests: 'tests/**.test.js' ` For tests in TypeScript: `tests: 'tests/**.test.ts' ` |
30
+ | `timeout?` | `number` | Set default tests timeout in seconds. Tests will be killed on no response after timeout. `timeout: 20, ` |
31
+ | `translation?` | `string` | Enable [localized test commands](https://codecept.io/translation/) |
32
+ | `maskSensitiveData?` | `boolean` | Enable to mask Sensitive Data in console. |
33
+
34
+ ## Require
35
+
36
+ Requires modules before running tests. This is useful for:
37
+ - **Assertion libraries:** e.g., `'should'` instead of manually requiring it in each test
38
+ - **TypeScript loaders:** Enable TypeScript test files in ESM or CommonJS projects
39
+ - **Setup modules:** Initialize testing environment
40
+ - **Custom modules:** With relative paths like `"require": ["./lib/setup"]`
41
+
42
+ ### TypeScript Support
43
+
44
+ #### For ESM Projects (CodeceptJS 4.x)
45
+
46
+ Use modern loaders that support ES Modules:
47
+
48
+ **Using tsx (recommended - fast, zero config):**
49
+
50
+ ```typescript
51
+ // codecept.conf.ts
52
+ export const config = {
53
+ tests: './**/*_test.ts',
54
+ require: ['tsx/cjs'], // ← Modern TypeScript loader
55
+ helpers: {},
56
+ include: {},
57
+ }
58
+ ```
59
+
60
+ **Using ts-node/esm:**
61
+
62
+ ```typescript
63
+ // codecept.conf.ts
64
+ export const config = {
65
+ tests: './**/*_test.ts',
66
+ require: ['ts-node/esm'], // ← Established TypeScript loader
67
+ helpers: {},
68
+ include: {},
69
+ }
70
+ ```
71
+
72
+ > **Note:** For ts-node/esm, you need a tsconfig.json with ESM configuration. See [TypeScript documentation](/typescript) for details.
73
+
74
+ #### For CommonJS Projects (CodeceptJS 3.x)
75
+
76
+ Use the CommonJS loader:
77
+
78
+ ```javascript
79
+ // codecept.conf.js
80
+ exports.config = {
81
+ tests: './*_test.ts',
82
+ require: ['ts-node/register'], // ← CommonJS TypeScript loader
83
+ helpers: {},
84
+ include: {},
85
+ }
86
+ ```
87
+
88
+ ### Multiple Requires
89
+
90
+ You can combine multiple modules:
91
+
92
+ ```typescript
93
+ // codecept.conf.ts
94
+ export const config = {
95
+ tests: ['./**/*_test.ts', './smoke_test.ts'],
96
+ require: [
97
+ 'tsx/cjs', // TypeScript loader
98
+ 'should', // Assertion library
99
+ './lib/testSetup' // Custom setup
100
+ ],
101
+ helpers: {},
102
+ include: {},
103
+ }
104
+ ```
105
+
106
+ Modules are loaded in the order specified, before any tests run.
107
+
108
+ ## Dynamic Configuration
109
+
110
+ By default `codecept.json` is used for configuration. You can override its values in runtime by using `--override` or `-o` option in command line, passing valid JSON as a value:
111
+
112
+ ```sh
113
+ codeceptjs run -o '{ "helpers": {"WebDriver": {"browser": "firefox"}}}'
114
+ ```
115
+
116
+ You can also switch to JS configuration format for more dynamic options.
117
+ Create `codecept.conf.js` file and make it export `config` property.
118
+
119
+ See the config example:
120
+
121
+ ```js
122
+ export const config = {
123
+ helpers: {
124
+ WebDriver: {
125
+ // load variables from the environment and provide defaults
126
+ url: process.env.CODECEPT_URL || 'http://localhost:3000',
127
+
128
+ user: process.env.CLOUDSERVICE_USER,
129
+ key: process.env.CLOUDSERVICE_KEY,
130
+
131
+ coloredLogs: true,
132
+ waitForTimeout: 10000,
133
+ },
134
+ },
135
+
136
+ // don't build monolithic configs
137
+ mocha: require('./mocha.conf.js') || {},
138
+ include: {
139
+ I: './src/steps_file.js',
140
+ loginPage: './src/pages/login_page',
141
+ dashboardPage: new DashboardPage(),
142
+ },
143
+
144
+ // here goes config as it was in codecept.conf.ts
145
+ // ....
146
+ }
147
+ ```
148
+
149
+ (Don't copy-paste this config, it's just demo)
150
+
151
+ If you prefer to store your configuration files in a different location, or with a different name, you can do that with `--config` or `-c:
152
+
153
+ ```sh
154
+ codeceptjs run --config=./path/to/my/config.js
155
+ ```
156
+
157
+ ## Common Configuration Patterns
158
+
159
+ > 📺 [Watch this material](https://www.youtube.com/watch?v=onBnfo_rJa4&t=4s) on YouTube
160
+
161
+ [`@codeceptjs/configure`](https://github.com/codeceptjs/configure) ships with CodeceptJS as a dependency and contains shared recipes for common configuration patterns. It lets you set meta-configuration that's independent of the active helper.
162
+
163
+ Toggle headless/headed mode, change window size, etc.:
164
+
165
+ ```js
166
+ import { setHeadlessWhen, setWindowSize } from '@codeceptjs/configure'
167
+
168
+ setHeadlessWhen(process.env.CI)
169
+ setWindowSize(1600, 1200)
170
+
171
+ export const config = {
172
+ // ...
173
+ }
174
+ ```
175
+
176
+ For one-shot bundles use `setBrowserConfig` — pass any subset of `{ browser, show, windowSize, url, ... }` and the right per-helper translation happens automatically (Puppeteer receives `product` for `browser`, WebDriver gets `--headless` injected, etc.). Keys whose value is `undefined` are skipped, so unset env vars don't clobber existing config:
177
+
178
+ ```js
179
+ import { setBrowserConfig } from '@codeceptjs/configure'
180
+
181
+ setBrowserConfig({
182
+ browser: process.env.BROWSER, // optional engine override
183
+ show: !process.env.HEADLESS, // headed unless HEADLESS is set
184
+ windowSize: '1280x720',
185
+ url: process.env.URL, // overrides helper.url when set
186
+ })
187
+ ```
188
+
189
+ `setCommonPlugins()` enables a curated set of plugins and registers a few more as discoverable (so they can be activated ad-hoc via [`-p` plugin arguments](/commands#plugin-arguments) without editing config):
190
+
191
+ ```js
192
+ import { setCommonPlugins } from '@codeceptjs/configure'
193
+
194
+ setCommonPlugins()
195
+ ```
196
+
197
+ | Plugin | Default | Notes |
198
+ | :---------------- | :------------- | :----------------------------------------------------------------------------- |
199
+ | `retryFailedStep` | enabled | Retry steps that fail with transient errors |
200
+ | `screenshot` | enabled | Screenshot on `fail` (default) / `test` / `step` / `file` / `url` |
201
+ | `pause` | registered | Pause on failure / step / file / URL — `-p pause:on=fail`, `-p pause:on=step`, `-p pause:on=file:path=tests/login_test.js`, `-p pause:on=url:pattern=/checkout/*` |
202
+ | `browser` | registered | CLI overrides for browser helpers — `-p browser:show`, `-p browser:browser=firefox`, see [commands](/commands#browser-control) |
203
+ | `aiTrace` | registered | Capture AI traces — `-p aiTrace`, narrow with `on=fail|test|step|file|url` |
204
+ | `heal` | registered | Self-heal failing steps — `-p heal`, narrow with `on=file|url` |
205
+
206
+ > `eachElement`, `tryTo`, and `retryTo` are no longer plugins in 4.x — import them from `codeceptjs/effects`.
207
+
208
+ ## Profile
209
+
210
+ Using `process.env.profile` you can change the config dynamically.
211
+ It provides value of `--profile` option passed to runner.
212
+ Use its value to change config value on the fly.
213
+
214
+ For instance, with the config above we can change browser value using `profile` option
215
+
216
+ ```sh
217
+ codeceptjs run --profile firefox
218
+ ```
219
+
220
+ ```js
221
+ export const config = {
222
+ helpers: {
223
+ WebDriver: {
224
+ url: 'http://localhost:3000',
225
+ // load value from `profile`
226
+ browser: process.env.profile || 'firefox',
227
+ },
228
+ },
229
+ }
230
+ ```