codeceptjs 4.0.2-beta.9 → 4.0.2

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 (326) hide show
  1. package/README.md +39 -28
  2. package/bin/codecept.js +15 -2
  3. package/bin/codeceptq.js +49 -0
  4. package/bin/mcp-server.js +1189 -0
  5. package/docs/advanced.md +201 -0
  6. package/docs/agents.md +181 -0
  7. package/docs/ai.md +489 -0
  8. package/docs/aitrace.md +266 -0
  9. package/docs/api.md +332 -0
  10. package/docs/architecture.md +235 -0
  11. package/docs/assertions.md +415 -0
  12. package/docs/auth.md +318 -0
  13. package/docs/basics.md +424 -0
  14. package/docs/bdd.md +539 -0
  15. package/docs/best.md +240 -0
  16. package/docs/bootstrap.md +132 -0
  17. package/docs/commands.md +352 -0
  18. package/docs/community-helpers.md +63 -0
  19. package/docs/configuration.md +185 -0
  20. package/docs/continuous-integration.md +431 -0
  21. package/docs/custom-helpers.md +297 -0
  22. package/docs/data.md +448 -0
  23. package/docs/debugging.md +332 -0
  24. package/docs/detox.md +235 -0
  25. package/docs/docker.md +107 -0
  26. package/docs/effects.md +179 -0
  27. package/docs/element-based-testing.md +295 -0
  28. package/docs/element-selection.md +125 -0
  29. package/docs/els.md +328 -0
  30. package/docs/environment-variables.md +131 -0
  31. package/docs/examples.md +160 -0
  32. package/docs/heal.md +213 -0
  33. package/docs/helpers/ApiDataFactory.md +267 -0
  34. package/docs/helpers/Appium.md +1419 -0
  35. package/docs/helpers/Detox.md +665 -0
  36. package/docs/helpers/ExpectHelper.md +275 -0
  37. package/docs/helpers/FileSystem.md +152 -0
  38. package/docs/helpers/GraphQL.md +152 -0
  39. package/docs/helpers/GraphQLDataFactory.md +226 -0
  40. package/docs/helpers/JSONResponse.md +255 -0
  41. package/docs/helpers/MockRequest.md +377 -0
  42. package/docs/helpers/Playwright.md +2970 -0
  43. package/docs/helpers/Puppeteer-firefox.md +86 -0
  44. package/docs/helpers/Puppeteer.md +2583 -0
  45. package/docs/helpers/REST.md +289 -0
  46. package/docs/helpers/WebDriver.md +2639 -0
  47. package/docs/hooks.md +148 -0
  48. package/docs/index.md +111 -0
  49. package/docs/installation.md +121 -0
  50. package/docs/internal-test-server.md +89 -0
  51. package/docs/locators.md +355 -0
  52. package/docs/mcp.md +485 -0
  53. package/docs/migrate-from-cypress.md +98 -0
  54. package/docs/migrate-from-java.md +108 -0
  55. package/docs/migrate-from-protractor.md +101 -0
  56. package/docs/migrate-from-testcafe.md +99 -0
  57. package/docs/migration-4.md +745 -0
  58. package/docs/mobile.md +338 -0
  59. package/docs/pageobjects.md +399 -0
  60. package/docs/parallel.md +187 -0
  61. package/docs/playwright.md +714 -0
  62. package/docs/plugins/aiTrace.md +49 -0
  63. package/docs/plugins/analyze.md +66 -0
  64. package/docs/plugins/auth.md +241 -0
  65. package/docs/plugins/autoDelay.md +48 -0
  66. package/docs/plugins/browser.md +41 -0
  67. package/docs/plugins/coverage.md +39 -0
  68. package/docs/plugins/customLocator.md +119 -0
  69. package/docs/plugins/customReporter.md +16 -0
  70. package/docs/plugins/expose.md +75 -0
  71. package/docs/plugins/heal.md +44 -0
  72. package/docs/plugins/junitReporter.md +51 -0
  73. package/docs/plugins/pageInfo.md +34 -0
  74. package/docs/plugins/pause.md +43 -0
  75. package/docs/plugins/pauseOnFail.md +18 -0
  76. package/docs/plugins/retryFailedStep.md +75 -0
  77. package/docs/plugins/screencast.md +55 -0
  78. package/docs/plugins/screenshot.md +58 -0
  79. package/docs/plugins/screenshotOnFail.md +18 -0
  80. package/docs/plugins/stepTimeout.md +65 -0
  81. package/docs/plugins.md +87 -0
  82. package/docs/puppeteer.md +314 -0
  83. package/docs/quickstart.md +120 -0
  84. package/docs/reports.md +195 -0
  85. package/docs/retry.md +311 -0
  86. package/docs/secrets.md +150 -0
  87. package/docs/sessions.md +80 -0
  88. package/docs/shadow.md +68 -0
  89. package/docs/store.md +94 -0
  90. package/docs/test-structure.md +275 -0
  91. package/docs/timeouts.md +183 -0
  92. package/docs/translation.md +247 -0
  93. package/docs/tutorial.md +323 -0
  94. package/docs/typescript.md +159 -0
  95. package/docs/web-element.md +251 -0
  96. package/docs/webdriver.md +641 -0
  97. package/docs/within.md +55 -0
  98. package/lib/actor.js +1 -36
  99. package/lib/ai.js +3 -2
  100. package/lib/aria.js +260 -0
  101. package/lib/assertions.js +18 -0
  102. package/lib/codecept.js +34 -25
  103. package/lib/command/check.js +2 -1
  104. package/lib/command/definitions.js +6 -7
  105. package/lib/command/dryRun.js +24 -5
  106. package/lib/command/generate.js +3 -1
  107. package/lib/command/gherkin/snippets.js +5 -4
  108. package/lib/command/init.js +249 -270
  109. package/lib/command/list.js +150 -10
  110. package/lib/command/query.js +218 -0
  111. package/lib/command/run-multiple.js +3 -1
  112. package/lib/command/run-workers.js +2 -14
  113. package/lib/command/run.js +3 -17
  114. package/lib/command/utils.js +14 -0
  115. package/lib/command/workers/runTests.js +84 -41
  116. package/lib/config.js +96 -18
  117. package/lib/container.js +115 -17
  118. package/lib/effects.js +17 -0
  119. package/lib/element/WebElement.js +246 -2
  120. package/lib/els.js +12 -6
  121. package/lib/globals.js +32 -19
  122. package/lib/heal.js +7 -4
  123. package/lib/helper/ApiDataFactory.js +2 -1
  124. package/lib/helper/Appium.js +8 -8
  125. package/lib/helper/FileSystem.js +3 -2
  126. package/lib/helper/GraphQLDataFactory.js +2 -1
  127. package/lib/helper/Playwright.js +358 -467
  128. package/lib/helper/Puppeteer.js +335 -192
  129. package/lib/helper/WebDriver.js +324 -111
  130. package/lib/helper/errors/ElementNotFound.js +5 -2
  131. package/lib/helper/errors/MultipleElementsFound.js +52 -0
  132. package/lib/helper/errors/NonFocusedType.js +8 -0
  133. package/lib/helper/extras/Download.js +45 -0
  134. package/lib/helper/extras/PlaywrightLocator.js +7 -107
  135. package/lib/helper/extras/elementSelection.js +58 -0
  136. package/lib/helper/extras/focusCheck.js +43 -0
  137. package/lib/helper/extras/richTextEditor.js +178 -0
  138. package/lib/helper/scripts/dropFile.js +11 -0
  139. package/lib/history.js +3 -2
  140. package/lib/html.js +103 -16
  141. package/lib/index.js +9 -1
  142. package/lib/listener/config.js +6 -4
  143. package/lib/listener/emptyRun.js +2 -1
  144. package/lib/listener/globalRetry.js +32 -6
  145. package/lib/listener/helpers.js +4 -1
  146. package/lib/listener/mocha.js +2 -1
  147. package/lib/listener/pageobjects.js +43 -0
  148. package/lib/listener/result.js +3 -2
  149. package/lib/locator.js +158 -16
  150. package/lib/mocha/cli.js +19 -1
  151. package/lib/mocha/factory.js +11 -1
  152. package/lib/mocha/inject.js +1 -1
  153. package/lib/mocha/scenarioConfig.js +2 -1
  154. package/lib/mocha/ui.js +5 -6
  155. package/lib/parser.js +2 -2
  156. package/lib/pause.js +38 -4
  157. package/lib/plugin/aiTrace.js +457 -0
  158. package/lib/plugin/analyze.js +9 -9
  159. package/lib/plugin/auth.js +5 -4
  160. package/lib/plugin/browser.js +77 -0
  161. package/lib/plugin/expose.js +159 -0
  162. package/lib/plugin/heal.js +47 -3
  163. package/lib/plugin/junitReporter.js +303 -0
  164. package/lib/plugin/pageInfo.js +54 -52
  165. package/lib/plugin/pause.js +131 -0
  166. package/lib/plugin/pauseOnFail.js +11 -33
  167. package/lib/plugin/retryFailedStep.js +43 -32
  168. package/lib/plugin/screencast.js +289 -0
  169. package/lib/plugin/screenshot.js +558 -0
  170. package/lib/plugin/screenshotOnFail.js +9 -170
  171. package/lib/plugin/stepTimeout.js +3 -2
  172. package/lib/recorder.js +1 -1
  173. package/lib/rerun.js +2 -1
  174. package/lib/result.js +2 -1
  175. package/lib/step/base.js +10 -9
  176. package/lib/step/comment.js +2 -2
  177. package/lib/step/config.js +15 -2
  178. package/lib/step/helper.js +4 -4
  179. package/lib/step/meta.js +3 -3
  180. package/lib/step/record.js +5 -5
  181. package/lib/store.js +72 -3
  182. package/lib/translation.js +2 -1
  183. package/lib/utils/loaderCheck.js +28 -0
  184. package/lib/utils/mask_data.js +2 -1
  185. package/lib/utils/pluginParser.js +151 -0
  186. package/lib/utils/trace.js +297 -0
  187. package/lib/utils/typescript.js +188 -23
  188. package/lib/utils.js +77 -3
  189. package/lib/workers.js +65 -40
  190. package/package.json +35 -30
  191. package/typings/index.d.ts +119 -8
  192. package/typings/promiseBasedTypes.d.ts +3158 -6065
  193. package/typings/types.d.ts +3453 -6494
  194. package/docs/webapi/amOnPage.mustache +0 -11
  195. package/docs/webapi/appendField.mustache +0 -11
  196. package/docs/webapi/attachFile.mustache +0 -12
  197. package/docs/webapi/blur.mustache +0 -18
  198. package/docs/webapi/checkOption.mustache +0 -13
  199. package/docs/webapi/clearCookie.mustache +0 -9
  200. package/docs/webapi/clearField.mustache +0 -9
  201. package/docs/webapi/click.mustache +0 -29
  202. package/docs/webapi/clickLink.mustache +0 -8
  203. package/docs/webapi/closeCurrentTab.mustache +0 -7
  204. package/docs/webapi/closeOtherTabs.mustache +0 -8
  205. package/docs/webapi/dontSee.mustache +0 -11
  206. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  207. package/docs/webapi/dontSeeCookie.mustache +0 -8
  208. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  209. package/docs/webapi/dontSeeElement.mustache +0 -8
  210. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  211. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  212. package/docs/webapi/dontSeeInField.mustache +0 -11
  213. package/docs/webapi/dontSeeInSource.mustache +0 -8
  214. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  215. package/docs/webapi/dontSeeTraffic.mustache +0 -13
  216. package/docs/webapi/doubleClick.mustache +0 -13
  217. package/docs/webapi/downloadFile.mustache +0 -12
  218. package/docs/webapi/dragAndDrop.mustache +0 -9
  219. package/docs/webapi/dragSlider.mustache +0 -11
  220. package/docs/webapi/executeAsyncScript.mustache +0 -24
  221. package/docs/webapi/executeScript.mustache +0 -26
  222. package/docs/webapi/fillField.mustache +0 -16
  223. package/docs/webapi/flushNetworkTraffics.mustache +0 -5
  224. package/docs/webapi/focus.mustache +0 -13
  225. package/docs/webapi/forceClick.mustache +0 -28
  226. package/docs/webapi/forceRightClick.mustache +0 -18
  227. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  228. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  229. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  230. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  231. package/docs/webapi/grabCookie.mustache +0 -11
  232. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  233. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  234. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  235. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  236. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  237. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  238. package/docs/webapi/grabGeoLocation.mustache +0 -8
  239. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  240. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  241. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  242. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  243. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  244. package/docs/webapi/grabPopupText.mustache +0 -5
  245. package/docs/webapi/grabRecordedNetworkTraffics.mustache +0 -10
  246. package/docs/webapi/grabSource.mustache +0 -8
  247. package/docs/webapi/grabTextFrom.mustache +0 -10
  248. package/docs/webapi/grabTextFromAll.mustache +0 -9
  249. package/docs/webapi/grabTitle.mustache +0 -8
  250. package/docs/webapi/grabValueFrom.mustache +0 -9
  251. package/docs/webapi/grabValueFromAll.mustache +0 -8
  252. package/docs/webapi/grabWebElement.mustache +0 -9
  253. package/docs/webapi/grabWebElements.mustache +0 -9
  254. package/docs/webapi/moveCursorTo.mustache +0 -12
  255. package/docs/webapi/openNewTab.mustache +0 -7
  256. package/docs/webapi/pressKey.mustache +0 -12
  257. package/docs/webapi/pressKeyDown.mustache +0 -12
  258. package/docs/webapi/pressKeyUp.mustache +0 -12
  259. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  260. package/docs/webapi/refreshPage.mustache +0 -6
  261. package/docs/webapi/resizeWindow.mustache +0 -6
  262. package/docs/webapi/rightClick.mustache +0 -14
  263. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  264. package/docs/webapi/saveScreenshot.mustache +0 -12
  265. package/docs/webapi/say.mustache +0 -10
  266. package/docs/webapi/scrollIntoView.mustache +0 -11
  267. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  268. package/docs/webapi/scrollPageToTop.mustache +0 -6
  269. package/docs/webapi/scrollTo.mustache +0 -12
  270. package/docs/webapi/see.mustache +0 -11
  271. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  272. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  273. package/docs/webapi/seeCookie.mustache +0 -8
  274. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  275. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  276. package/docs/webapi/seeElement.mustache +0 -8
  277. package/docs/webapi/seeElementInDOM.mustache +0 -8
  278. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  279. package/docs/webapi/seeInField.mustache +0 -12
  280. package/docs/webapi/seeInPopup.mustache +0 -8
  281. package/docs/webapi/seeInSource.mustache +0 -7
  282. package/docs/webapi/seeInTitle.mustache +0 -8
  283. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  284. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  285. package/docs/webapi/seeTextEquals.mustache +0 -9
  286. package/docs/webapi/seeTitleEquals.mustache +0 -8
  287. package/docs/webapi/seeTraffic.mustache +0 -36
  288. package/docs/webapi/selectOption.mustache +0 -21
  289. package/docs/webapi/setCookie.mustache +0 -16
  290. package/docs/webapi/setGeoLocation.mustache +0 -12
  291. package/docs/webapi/startRecordingTraffic.mustache +0 -8
  292. package/docs/webapi/startRecordingWebSocketMessages.mustache +0 -8
  293. package/docs/webapi/stopRecordingTraffic.mustache +0 -5
  294. package/docs/webapi/stopRecordingWebSocketMessages.mustache +0 -7
  295. package/docs/webapi/switchTo.mustache +0 -9
  296. package/docs/webapi/switchToNextTab.mustache +0 -10
  297. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  298. package/docs/webapi/type.mustache +0 -21
  299. package/docs/webapi/uncheckOption.mustache +0 -13
  300. package/docs/webapi/wait.mustache +0 -8
  301. package/docs/webapi/waitForClickable.mustache +0 -11
  302. package/docs/webapi/waitForCookie.mustache +0 -9
  303. package/docs/webapi/waitForDetached.mustache +0 -10
  304. package/docs/webapi/waitForDisabled.mustache +0 -6
  305. package/docs/webapi/waitForElement.mustache +0 -11
  306. package/docs/webapi/waitForEnabled.mustache +0 -6
  307. package/docs/webapi/waitForFunction.mustache +0 -17
  308. package/docs/webapi/waitForInvisible.mustache +0 -10
  309. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  310. package/docs/webapi/waitForText.mustache +0 -13
  311. package/docs/webapi/waitForValue.mustache +0 -10
  312. package/docs/webapi/waitForVisible.mustache +0 -10
  313. package/docs/webapi/waitInUrl.mustache +0 -9
  314. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  315. package/docs/webapi/waitToHide.mustache +0 -10
  316. package/docs/webapi/waitUrlEquals.mustache +0 -10
  317. package/lib/helper/AI.js +0 -214
  318. package/lib/helper/Mochawesome.js +0 -96
  319. package/lib/helper/extras/PlaywrightReactVueLocator.js +0 -52
  320. package/lib/helper/extras/React.js +0 -65
  321. package/lib/listener/enhancedGlobalRetry.js +0 -110
  322. package/lib/plugin/enhancedRetryFailedStep.js +0 -99
  323. package/lib/plugin/htmlReporter.js +0 -3648
  324. package/lib/plugin/stepByStepReport.js +0 -427
  325. package/lib/plugin/subtitles.js +0 -89
  326. package/lib/retryCoordinator.js +0 -207
@@ -0,0 +1,49 @@
1
+ ---
2
+ permalink: /plugins/aiTrace
3
+ editLink: false
4
+ sidebar: auto
5
+ title: aiTrace
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## aiTrace
11
+
12
+ Generates AI-friendly trace files for debugging with AI agents.
13
+ This plugin creates a markdown file with test execution logs and links to all artifacts
14
+ (screenshots, HTML, ARIA snapshots, browser logs, HTTP requests) for each step.
15
+
16
+ #### Configuration
17
+
18
+ ```js
19
+ "plugins": {
20
+ "aiTrace": {
21
+ "enabled": true
22
+ }
23
+ }
24
+ ```
25
+
26
+ Possible config options:
27
+
28
+ * `deleteSuccessful`: delete traces for successfully executed tests. Default: false.
29
+ * `fullPageScreenshots`: should full page screenshots be used. Default: false.
30
+ * `output`: a directory where traces should be stored. Default: `output`.
31
+ * `captureHTML`: capture HTML for each step. Default: true.
32
+ * `captureARIA`: capture ARIA snapshot for each step. Default: true.
33
+ * `captureBrowserLogs`: capture browser console logs. Default: true.
34
+ * `captureHTTP`: capture HTTP requests (requires `trace` or `recordHar` enabled in helper config). Default: true.
35
+ * `captureDebugOutput`: capture CodeceptJS debug output. Default: true.
36
+ * `ignoreSteps`: steps to ignore in trace. Array of RegExps is expected.
37
+ * `on`: trigger mode — `step` (default), `fail`, `test`, `file`, `url`.
38
+
39
+ #### `on=` modes
40
+
41
+ * **step** — persist every step (default)
42
+ * **fail** — persist only the failed step
43
+ * **test** — persist only the last step of each test
44
+ * **file** — persist steps from `path=...[;line=...]`
45
+ * **url** — persist when the current URL matches `pattern=...`
46
+
47
+ ### Parameters
48
+
49
+ * `config` **any**
@@ -0,0 +1,66 @@
1
+ ---
2
+ permalink: /plugins/analyze
3
+ editLink: false
4
+ sidebar: auto
5
+ title: analyze
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## analyze
11
+
12
+ Uses AI to analyze test failures and provide insights
13
+
14
+ This plugin analyzes failed tests using AI to provide detailed explanations and group similar failures.
15
+ When enabled with --ai flag, it generates reports after test execution.
16
+
17
+ #### Usage
18
+
19
+ ```js
20
+ // in codecept.conf.js
21
+ exports.config = {
22
+ plugins: {
23
+ analyze: {
24
+ enabled: true,
25
+ clusterize: 5,
26
+ analyze: 2,
27
+ vision: false
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ #### Configuration
34
+
35
+ * `clusterize` (number) - minimum number of failures to trigger clustering analysis. Default: 5
36
+ * `analyze` (number) - maximum number of individual test failures to analyze in detail. Default: 2
37
+ * `vision` (boolean) - enables visual analysis of test screenshots. Default: false
38
+ * `categories` (array) - list of failure categories for classification. Defaults to:
39
+ * Browser connection error / browser crash
40
+ * Network errors (server error, timeout, etc)
41
+ * HTML / page elements (not found, not visible, etc)
42
+ * Navigation errors (404, etc)
43
+ * Code errors (syntax error, JS errors, etc)
44
+ * Library & framework errors
45
+ * Data errors (password incorrect, invalid format, etc)
46
+ * Assertion failures
47
+ * Other errors
48
+ * `prompts` (object) - customize AI prompts for analysis
49
+ * `clusterize` - prompt for clustering analysis
50
+ * `analyze` - prompt for individual test analysis
51
+
52
+ #### Features
53
+
54
+ * Groups similar failures when number of failures >= clusterize value
55
+ * Provides detailed analysis of individual failures
56
+ * Analyzes screenshots if vision=true and screenshots are available
57
+ * Classifies failures into predefined categories
58
+ * Suggests possible causes and solutions
59
+
60
+ ### Parameters
61
+
62
+ * `config` **[Object][1]** Plugin configuration
63
+
64
+ Returns **void**&#x20;
65
+
66
+ [1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
@@ -0,0 +1,241 @@
1
+ ---
2
+ permalink: /plugins/auth
3
+ editLink: false
4
+ sidebar: auto
5
+ title: auth
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## auth
11
+
12
+ Logs user in for the first test and reuses session for next tests.
13
+ Works by saving cookies into memory or file.
14
+ If a session expires automatically logs in again.
15
+
16
+ > For better development experience cookies can be saved into file, so a session can be reused while writing tests.
17
+
18
+ #### Usage
19
+
20
+ 1. Enable this plugin and configure as described below
21
+ 2. Define user session names (example: `user`, `editor`, `admin`, etc).
22
+ 3. Define how users are logged in and how to check that user is logged in
23
+ 4. Use `login` object inside your tests to log in:
24
+
25
+ ```js
26
+ // inside a test file
27
+ // use login to inject auto-login function
28
+ Feature('Login');
29
+
30
+ Before(({ login }) => {
31
+ login('user'); // login using user session
32
+ });
33
+
34
+ // Alternatively log in for one scenario.
35
+ Scenario('log me in', ( { I, login } ) => {
36
+ login('admin');
37
+ I.see('I am logged in');
38
+ });
39
+ ```
40
+
41
+ #### Configuration
42
+
43
+ * `saveToFile` (default: false) - save cookies to file. Allows to reuse session between execution.
44
+ * `inject` (default: `login`) - name of the login function to use
45
+ * `users` - an array containing different session names and functions to:
46
+ * `login` - sign in into the system
47
+ * `check` - check that user is logged in
48
+ * `fetch` - to get current cookies (by default `I.grabCookie()`)
49
+ * `restore` - to set cookies (by default `I.amOnPage('/'); I.setCookie(cookie)`)
50
+
51
+ #### How It Works
52
+
53
+ 1. `restore` method is executed. It should open a page and set credentials.
54
+ 2. `check` method is executed. It should reload a page (so cookies are applied) and check that this page belongs to logged-in user. When you pass the second args `session`, you could perform the validation using passed session.
55
+ 3. If `restore` and `check` were not successful, `login` is executed
56
+ 4. `login` should fill in login form
57
+ 5. After successful login, `fetch` is executed to save cookies into memory or file.
58
+
59
+ #### Example: Simple login
60
+
61
+ ```js
62
+ auth: {
63
+ enabled: true,
64
+ saveToFile: true,
65
+ inject: 'login',
66
+ users: {
67
+ admin: {
68
+ // loginAdmin function is defined in `steps_file.js`
69
+ login: (I) => I.loginAdmin(),
70
+ // if we see `Admin` on page, we assume we are logged in
71
+ check: (I) => {
72
+ I.amOnPage('/');
73
+ I.see('Admin');
74
+ }
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ #### Example: Multiple users
81
+
82
+ ```js
83
+ auth: {
84
+ enabled: true,
85
+ saveToFile: true,
86
+ inject: 'loginAs', // use `loginAs` instead of login
87
+ users: {
88
+ user: {
89
+ login: (I) => {
90
+ I.amOnPage('/login');
91
+ I.fillField('email', 'user@site.com');
92
+ I.fillField('password', '123456');
93
+ I.click('Login');
94
+ },
95
+ check: (I) => {
96
+ I.amOnPage('/');
97
+ I.see('User', '.navbar');
98
+ },
99
+ },
100
+ admin: {
101
+ login: (I) => {
102
+ I.amOnPage('/login');
103
+ I.fillField('email', 'admin@site.com');
104
+ I.fillField('password', '123456');
105
+ I.click('Login');
106
+ },
107
+ check: (I) => {
108
+ I.amOnPage('/');
109
+ I.see('Admin', '.navbar');
110
+ },
111
+ },
112
+ }
113
+ }
114
+ ```
115
+
116
+ #### Example: Keep cookies between tests
117
+
118
+ If you decide to keep cookies between tests you don't need to save/retrieve cookies between tests.
119
+ But you need to login once work until session expires.
120
+ For this case, disable `fetch` and `restore` methods.
121
+
122
+ ```js
123
+ helpers: {
124
+ WebDriver: {
125
+ // config goes here
126
+ keepCookies: true; // keep cookies for all tests
127
+ }
128
+ },
129
+ plugins: {
130
+ auth: {
131
+ users: {
132
+ admin: {
133
+ login: (I) => {
134
+ I.amOnPage('/login');
135
+ I.fillField('email', 'admin@site.com');
136
+ I.fillField('password', '123456');
137
+ I.click('Login');
138
+ },
139
+ check: (I) => {
140
+ I.amOnPage('/dashboard');
141
+ I.see('Admin', '.navbar');
142
+ },
143
+ fetch: () => {}, // empty function
144
+ restore: () => {}, // empty funciton
145
+ }
146
+ }
147
+ }
148
+ }
149
+ ```
150
+
151
+ #### Example: Getting sessions from local storage
152
+
153
+ If your session is stored in local storage instead of cookies you still can obtain sessions.
154
+
155
+ ```js
156
+ plugins: {
157
+ auth: {
158
+ admin: {
159
+ login: (I) => I.loginAsAdmin(),
160
+ check: (I) => I.see('Admin', '.navbar'),
161
+ fetch: (I) => {
162
+ return I.executeScript(() => localStorage.getItem('session_id'));
163
+ },
164
+ restore: (I, session) => {
165
+ I.amOnPage('/');
166
+ I.executeScript((session) => localStorage.setItem('session_id', session), session);
167
+ },
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ #### Tips: Using async function in the auth
174
+
175
+ If you use async functions in the auth plugin, login function should be used with `await` keyword.
176
+
177
+ ```js
178
+ auth: {
179
+ enabled: true,
180
+ saveToFile: true,
181
+ inject: 'login',
182
+ users: {
183
+ admin: {
184
+ login: async (I) => { // If you use async function in the auth plugin
185
+ const phrase = await I.grabTextFrom('#phrase')
186
+ I.fillField('username', 'admin'),
187
+ I.fillField('password', 'password')
188
+ I.fillField('phrase', phrase)
189
+ },
190
+ check: (I) => {
191
+ I.amOnPage('/');
192
+ I.see('Admin');
193
+ },
194
+ }
195
+ }
196
+ }
197
+ ```
198
+
199
+ ```js
200
+ Scenario('login', async ( {I, login} ) => {
201
+ await login('admin') // you should use `await`
202
+ })
203
+ ```
204
+
205
+ #### Tips: Using session to validate user
206
+
207
+ Instead of asserting on page elements for the current user in `check`, you can use the `session` you saved in `fetch`
208
+
209
+ ```js
210
+ auth: {
211
+ enabled: true,
212
+ saveToFile: true,
213
+ inject: 'login',
214
+ users: {
215
+ admin: {
216
+ login: async (I) => { // If you use async function in the auth plugin
217
+ const phrase = await I.grabTextFrom('#phrase')
218
+ I.fillField('username', 'admin'),
219
+ I.fillField('password', 'password')
220
+ I.fillField('phrase', phrase)
221
+ },
222
+ check: (I, session) => {
223
+ // Throwing an error in `check` will make CodeceptJS perform the login step for the user
224
+ if (session.profile.email !== the.email.you.expect@some-mail.com) {
225
+ throw new Error ('Wrong user signed in');
226
+ }
227
+ },
228
+ }
229
+ }
230
+ }
231
+ ```
232
+
233
+ ```js
234
+ Scenario('login', async ( {I, login} ) => {
235
+ await login('admin') // you should use `await`
236
+ })
237
+ ```
238
+
239
+ ### Parameters
240
+
241
+ * `config` &#x20;
@@ -0,0 +1,48 @@
1
+ ---
2
+ permalink: /plugins/autoDelay
3
+ editLink: false
4
+ sidebar: auto
5
+ title: autoDelay
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## autoDelay
11
+
12
+ Sometimes it takes some time for a page to respond to user's actions.
13
+ Depending on app's performance this can be either slow or fast.
14
+
15
+ For instance, if you click a button and nothing happens - probably JS event is not attached to this button yet
16
+ Also, if you fill field and input validation doesn't accept your input - maybe because you typed value too fast.
17
+
18
+ This plugin allows to slow down tests execution when a test running too fast.
19
+ It puts a tiny delay for before and after action commands.
20
+
21
+ Commands affected (by default):
22
+
23
+ * `click`
24
+ * `fillField`
25
+ * `checkOption`
26
+ * `pressKey`
27
+ * `doubleClick`
28
+ * `rightClick`
29
+
30
+ #### Configuration
31
+
32
+ ```js
33
+ plugins: {
34
+ autoDelay: {
35
+ enabled: true
36
+ }
37
+ }
38
+ ```
39
+
40
+ Possible config options:
41
+
42
+ * `methods`: list of affected commands. Can be overridden
43
+ * `delayBefore`: put a delay before a command. 100ms by default
44
+ * `delayAfter`: put a delay after a command. 200ms by default
45
+
46
+ ### Parameters
47
+
48
+ * `config` &#x20;
@@ -0,0 +1,41 @@
1
+ ---
2
+ permalink: /plugins/browser
3
+ editLink: false
4
+ sidebar: auto
5
+ title: browser
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## browser
11
+
12
+ Overrides browser helper config from the command line. Works for all browser helpers
13
+ (Playwright, Puppeteer, WebDriver, Appium) without touching `codecept.conf`.
14
+
15
+ Enable it via `-p` option with one or more colon-chained args:
16
+
17
+ npx codeceptjs run -p browser:show
18
+ npx codeceptjs run -p browser:hide
19
+ npx codeceptjs run -p browser:browser=firefox
20
+ npx codeceptjs run -p browser:windowSize=1024x768:video=false
21
+ npx codeceptjs run -p browser:hide:browser=webkit:windowSize=800x600
22
+
23
+ #### Args
24
+
25
+ * **show** — force visible browser
26
+ * **hide** — force headless (also injects `--headless` into WebDriver chrome/firefox capability args)
27
+ * **`<key>=<value>`** — set `helpers.<eachBrowserHelper>.<key> = <value>`. Three keys
28
+ get per-helper translation via `setBrowserConfig`:
29
+ * `browser=<name>` — Puppeteer receives `product`, Playwright receives `browser`
30
+ * `windowSize=WxH` — also adds `--window-size=W,H` chromium/chrome args
31
+ * `show=true|false` — toggles `show` on Playwright/Puppeteer; injects/strips
32
+ `--headless` in WebDriver chrome/firefox capability args
33
+
34
+ Values stay as strings. `true` / `false` are coerced to booleans.
35
+
36
+ Requires `@codeceptjs/configure` to be installed; if missing, the plugin
37
+ logs a hint and skips the override.
38
+
39
+ ### Parameters
40
+
41
+ * `config`
@@ -0,0 +1,39 @@
1
+ ---
2
+ permalink: /plugins/coverage
3
+ editLink: false
4
+ sidebar: auto
5
+ title: coverage
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## coverage
11
+
12
+ Dumps code coverage from Playwright/Puppeteer after every test.
13
+
14
+ #### Configuration
15
+
16
+ ```js
17
+ plugins: {
18
+ coverage: {
19
+ enabled: true,
20
+ debug: true,
21
+ name: 'CodeceptJS Coverage Report',
22
+ outputDir: 'output/coverage'
23
+ }
24
+ }
25
+ ```
26
+
27
+ Possible config options, More could be found at [monocart-coverage-reports][1]
28
+
29
+ * `debug`: debug info. By default, false.
30
+ * `name`: coverage report name.
31
+ * `outputDir`: path to coverage report.
32
+ * `sourceFilter`: filter the source files.
33
+ * `sourcePath`: option to resolve a custom path.
34
+
35
+ ### Parameters
36
+
37
+ * `config` &#x20;
38
+
39
+ [1]: https://github.com/cenfun/monocart-coverage-reports?tab=readme-ov-file#default-options
@@ -0,0 +1,119 @@
1
+ ---
2
+ permalink: /plugins/customLocator
3
+ editLink: false
4
+ sidebar: auto
5
+ title: customLocator
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## customLocator
11
+
12
+ Creates a [custom locator][1] by using special attributes in HTML.
13
+
14
+ If you have a convention to use `data-test-id` or `data-qa` attributes to mark active elements for e2e tests,
15
+ you can enable this plugin to simplify matching elements with these attributes:
16
+
17
+ ```js
18
+ // replace this:
19
+ I.click({ css: '[data-test-id=register_button]');
20
+ // with this:
21
+ I.click('$register_button');
22
+ ```
23
+
24
+ This plugin will create a valid XPath locator for you.
25
+
26
+ #### Configuration
27
+
28
+ * `enabled` (default: `false`) should a locator be enabled
29
+ * `prefix` (default: `$`) sets a prefix for a custom locator.
30
+ * `attribute` (default: `data-test-id`) to set an attribute to be matched.
31
+ * `strategy` (default: `xpath`) actual locator strategy to use in query (`css` or `xpath`).
32
+ * `showActual` (default: false) show in the output actually produced XPath or CSS locator. By default shows custom locator value.
33
+
34
+ #### Examples:
35
+
36
+ Using `data-test` attribute with `$` prefix:
37
+
38
+ ```js
39
+ // in codecept.conf.js
40
+ plugins: {
41
+ customLocator: {
42
+ enabled: true,
43
+ attribute: 'data-test'
44
+ }
45
+ }
46
+ ```
47
+
48
+ In a test:
49
+
50
+ ```js
51
+ I.seeElement('$user'); // matches => [data-test=user]
52
+ I.click('$sign-up'); // matches => [data-test=sign-up]
53
+ ```
54
+
55
+ Using `data-qa` attribute with `=` prefix:
56
+
57
+ ```js
58
+ // in codecept.conf.js
59
+ plugins: {
60
+ customLocator: {
61
+ enabled: true,
62
+ prefix: '=',
63
+ attribute: 'data-qa'
64
+ }
65
+ }
66
+ ```
67
+
68
+ In a test:
69
+
70
+ ```js
71
+ I.seeElement('=user'); // matches => [data-qa=user]
72
+ I.click('=sign-up'); // matches => [data-qa=sign-up]
73
+ ```
74
+
75
+ Using `data-qa` OR `data-test` attribute with `=` prefix:
76
+
77
+ ```js
78
+ // in codecept.conf.js
79
+ plugins: {
80
+ customLocator: {
81
+ enabled: true,
82
+ prefix: '=',
83
+ attribute: ['data-qa', 'data-test'],
84
+ strategy: 'xpath'
85
+ }
86
+ }
87
+ ```
88
+
89
+ In a test:
90
+
91
+ ```js
92
+ I.seeElement('=user'); // matches => //*[@data-qa=user or @data-test=user]
93
+ I.click('=sign-up'); // matches => //*[data-qa=sign-up or @data-test=sign-up]
94
+ ```
95
+
96
+ ```js
97
+ // in codecept.conf.js
98
+ plugins: {
99
+ customLocator: {
100
+ enabled: true,
101
+ prefix: '=',
102
+ attribute: ['data-qa', 'data-test'],
103
+ strategy: 'css'
104
+ }
105
+ }
106
+ ```
107
+
108
+ In a test:
109
+
110
+ ```js
111
+ I.seeElement('=user'); // matches => [data-qa=user],[data-test=user]
112
+ I.click('=sign-up'); // matches => [data-qa=sign-up],[data-test=sign-up]
113
+ ```
114
+
115
+ ### Parameters
116
+
117
+ * `config` &#x20;
118
+
119
+ [1]: https://codecept.io/locators#custom-locators
@@ -0,0 +1,16 @@
1
+ ---
2
+ permalink: /plugins/customReporter
3
+ editLink: false
4
+ sidebar: auto
5
+ title: customReporter
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## customReporter
11
+
12
+ Sample custom reporter for CodeceptJS.
13
+
14
+ ### Parameters
15
+
16
+ * `config` &#x20;
@@ -0,0 +1,75 @@
1
+ ---
2
+ permalink: /plugins/expose
3
+ editLink: false
4
+ sidebar: auto
5
+ title: expose
6
+ ---
7
+
8
+ <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
9
+
10
+ ## expose
11
+
12
+ Exposes properties from helper instances as injectable test arguments.
13
+ Use it to access the underlying Playwright/Puppeteer `page`, the wdio `browser` client,
14
+ or any other helper internal directly from a Scenario:
15
+
16
+ ```js
17
+ Scenario('listen for requests', async ({ I, page, browser }) => {
18
+ page.on('request', r => console.log(r.url()))
19
+ await page.evaluate(() => 1 + 1)
20
+ I.amOnPage('/')
21
+ })
22
+ ```
23
+
24
+ The injected value is a live proxy: every property access reads the *current*
25
+ helper property, so mid-test reassignments (popups, `switchToNextTab`,
26
+ `openNewTab`) are reflected automatically. Calls are not wrapped as
27
+ CodeceptJS steps — `await page.evaluate(...)` runs as native Playwright.
28
+
29
+ #### Configuration
30
+
31
+ `inject` maps an injection name to a `HelperName.propertyName` string. A
32
+ value with no dot is shorthand for "first configured browser helper that
33
+ exposes this property" (allowed properties: `page`, `browser`,
34
+ `browserContext`, `context`).
35
+
36
+ ```js
37
+ plugins: {
38
+ expose: {
39
+ enabled: true,
40
+ inject: {
41
+ page: 'Playwright.page',
42
+ browser: 'Playwright.browser',
43
+ browserContext: 'Playwright.browserContext',
44
+ frame: 'Playwright.context', // current frame set by switchTo
45
+ wdio: 'WebDriver.browser',
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ Shorthand:
52
+
53
+ ```js
54
+ plugins: {
55
+ expose: {
56
+ enabled: true,
57
+ inject: {
58
+ page: 'page', // resolves to Playwright.page or Puppeteer.page
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ #### Caveats
65
+
66
+ * The injected value is a `Proxy`, not the actual `Page`/`Browser` instance,
67
+ so `page instanceof Page` is `false`. Use duck typing instead.
68
+ * Cached method references lose the live binding. Call `page.click(...)`,
69
+ not `const click = page.click; click(...)`.
70
+ * In dry-run mode the underlying helper property is `undefined`; accessing
71
+ any property on the proxy returns `undefined` rather than throwing.
72
+
73
+ ### Parameters
74
+
75
+ * `config`