codeceptjs 4.0.0-rc.17 → 4.0.0-rc.19

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 (240) hide show
  1. package/bin/codecept.js +15 -2
  2. package/bin/codeceptq.js +49 -0
  3. package/bin/mcp-server.js +733 -196
  4. package/docs/advanced.md +201 -0
  5. package/docs/agents.md +159 -0
  6. package/docs/ai.md +537 -0
  7. package/docs/aitrace.md +266 -0
  8. package/docs/api.md +332 -0
  9. package/docs/assertions.md +415 -0
  10. package/docs/auth.md +318 -0
  11. package/docs/basics.md +424 -0
  12. package/docs/bdd.md +539 -0
  13. package/docs/best.md +240 -0
  14. package/docs/bootstrap.md +132 -0
  15. package/docs/commands.md +352 -0
  16. package/docs/community-helpers.md +63 -0
  17. package/docs/configuration.md +230 -0
  18. package/docs/continuous-integration.md +497 -0
  19. package/docs/custom-helpers.md +297 -0
  20. package/docs/data.md +448 -0
  21. package/docs/debugging.md +332 -0
  22. package/docs/detox.md +235 -0
  23. package/docs/docker.md +136 -0
  24. package/docs/effects.md +179 -0
  25. package/docs/element-based-testing.md +295 -0
  26. package/docs/element-selection.md +125 -0
  27. package/docs/els.md +328 -0
  28. package/docs/examples.md +161 -0
  29. package/docs/heal.md +213 -0
  30. package/docs/helpers/ApiDataFactory.md +267 -0
  31. package/docs/helpers/Appium.md +1405 -0
  32. package/docs/helpers/Detox.md +665 -0
  33. package/docs/helpers/ExpectHelper.md +275 -0
  34. package/docs/helpers/FileSystem.md +152 -0
  35. package/docs/helpers/GraphQL.md +152 -0
  36. package/docs/helpers/GraphQLDataFactory.md +226 -0
  37. package/docs/helpers/JSONResponse.md +255 -0
  38. package/docs/helpers/Mochawesome.md +8 -0
  39. package/docs/helpers/MockRequest.md +377 -0
  40. package/docs/helpers/MockServer.md +212 -0
  41. package/docs/helpers/Playwright.md +2969 -0
  42. package/docs/helpers/Polly.md +44 -0
  43. package/docs/helpers/Protractor.md +1769 -0
  44. package/docs/helpers/Puppeteer-firefox.md +86 -0
  45. package/docs/helpers/Puppeteer.md +2690 -0
  46. package/docs/helpers/REST.md +289 -0
  47. package/docs/helpers/SoftExpectHelper.md +352 -0
  48. package/docs/helpers/WebDriver.md +2682 -0
  49. package/docs/hooks.md +339 -0
  50. package/docs/index.md +111 -0
  51. package/docs/installation.md +83 -0
  52. package/docs/internal-api.md +265 -0
  53. package/docs/internal-test-server.md +89 -0
  54. package/docs/locators.md +355 -0
  55. package/docs/mcp.md +485 -0
  56. package/docs/migration-4.md +556 -0
  57. package/docs/mobile.md +338 -0
  58. package/docs/pageobjects.md +399 -0
  59. package/docs/parallel.md +585 -0
  60. package/docs/playwright.md +714 -0
  61. package/docs/plugins.md +866 -0
  62. package/docs/puppeteer.md +314 -0
  63. package/docs/quickstart.md +120 -0
  64. package/docs/react.md +70 -0
  65. package/docs/reports.md +483 -0
  66. package/docs/retry.md +274 -0
  67. package/docs/secrets.md +150 -0
  68. package/docs/sessions.md +80 -0
  69. package/docs/shadow.md +68 -0
  70. package/docs/test-structure.md +275 -0
  71. package/docs/timeouts.md +183 -0
  72. package/docs/translation.md +247 -0
  73. package/docs/tutorial.md +271 -0
  74. package/docs/typescript.md +374 -0
  75. package/docs/web-element.md +251 -0
  76. package/docs/webdriver.md +708 -0
  77. package/docs/within.md +55 -0
  78. package/lib/aria.js +260 -0
  79. package/lib/command/dryRun.js +23 -3
  80. package/lib/command/init.js +247 -266
  81. package/lib/command/list.js +150 -10
  82. package/lib/command/query.js +218 -0
  83. package/lib/config.js +77 -4
  84. package/lib/container.js +34 -2
  85. package/lib/element/WebElement.js +37 -0
  86. package/lib/globals.js +11 -10
  87. package/lib/helper/Playwright.js +5 -6
  88. package/lib/helper/extras/PlaywrightReactVueLocator.js +45 -36
  89. package/lib/html.js +90 -16
  90. package/lib/index.js +9 -1
  91. package/lib/locator.js +2 -2
  92. package/lib/mocha/factory.js +5 -1
  93. package/lib/mocha/inject.js +1 -1
  94. package/lib/parser.js +2 -2
  95. package/lib/pause.js +38 -4
  96. package/lib/plugin/aiTrace.js +72 -84
  97. package/lib/plugin/browser.js +77 -0
  98. package/lib/plugin/expose.js +159 -0
  99. package/lib/plugin/heal.js +44 -1
  100. package/lib/plugin/pageInfo.js +51 -48
  101. package/lib/plugin/pause.js +131 -0
  102. package/lib/plugin/pauseOnFail.js +10 -34
  103. package/lib/plugin/screencast.js +287 -0
  104. package/lib/plugin/screenshot.js +563 -0
  105. package/lib/plugin/screenshotOnFail.js +8 -170
  106. package/lib/utils/pluginParser.js +151 -0
  107. package/lib/utils/trace.js +297 -0
  108. package/lib/utils.js +25 -0
  109. package/lib/workers.js +1 -15
  110. package/package.json +12 -10
  111. package/typings/index.d.ts +0 -5
  112. package/docs/webapi/amOnPage.mustache +0 -11
  113. package/docs/webapi/appendField.mustache +0 -16
  114. package/docs/webapi/attachFile.mustache +0 -24
  115. package/docs/webapi/blur.mustache +0 -18
  116. package/docs/webapi/checkOption.mustache +0 -13
  117. package/docs/webapi/clearCookie.mustache +0 -9
  118. package/docs/webapi/clearField.mustache +0 -14
  119. package/docs/webapi/click.mustache +0 -29
  120. package/docs/webapi/clickLink.mustache +0 -8
  121. package/docs/webapi/closeCurrentTab.mustache +0 -7
  122. package/docs/webapi/closeOtherTabs.mustache +0 -8
  123. package/docs/webapi/dontSee.mustache +0 -11
  124. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
  125. package/docs/webapi/dontSeeCookie.mustache +0 -8
  126. package/docs/webapi/dontSeeCurrentPathEquals.mustache +0 -10
  127. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
  128. package/docs/webapi/dontSeeElement.mustache +0 -12
  129. package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
  130. package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
  131. package/docs/webapi/dontSeeInField.mustache +0 -16
  132. package/docs/webapi/dontSeeInSource.mustache +0 -8
  133. package/docs/webapi/dontSeeInTitle.mustache +0 -8
  134. package/docs/webapi/dontSeeTraffic.mustache +0 -13
  135. package/docs/webapi/doubleClick.mustache +0 -13
  136. package/docs/webapi/downloadFile.mustache +0 -12
  137. package/docs/webapi/dragAndDrop.mustache +0 -9
  138. package/docs/webapi/dragSlider.mustache +0 -11
  139. package/docs/webapi/executeAsyncScript.mustache +0 -24
  140. package/docs/webapi/executeScript.mustache +0 -26
  141. package/docs/webapi/fillField.mustache +0 -21
  142. package/docs/webapi/flushNetworkTraffics.mustache +0 -5
  143. package/docs/webapi/focus.mustache +0 -13
  144. package/docs/webapi/forceClick.mustache +0 -28
  145. package/docs/webapi/forceRightClick.mustache +0 -18
  146. package/docs/webapi/grabAllWindowHandles.mustache +0 -7
  147. package/docs/webapi/grabAttributeFrom.mustache +0 -10
  148. package/docs/webapi/grabAttributeFromAll.mustache +0 -9
  149. package/docs/webapi/grabBrowserLogs.mustache +0 -9
  150. package/docs/webapi/grabCookie.mustache +0 -11
  151. package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
  152. package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
  153. package/docs/webapi/grabCurrentUrl.mustache +0 -9
  154. package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
  155. package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
  156. package/docs/webapi/grabElementBoundingRect.mustache +0 -20
  157. package/docs/webapi/grabGeoLocation.mustache +0 -8
  158. package/docs/webapi/grabHTMLFrom.mustache +0 -10
  159. package/docs/webapi/grabHTMLFromAll.mustache +0 -9
  160. package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
  161. package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
  162. package/docs/webapi/grabPageScrollPosition.mustache +0 -8
  163. package/docs/webapi/grabPopupText.mustache +0 -5
  164. package/docs/webapi/grabRecordedNetworkTraffics.mustache +0 -10
  165. package/docs/webapi/grabSource.mustache +0 -8
  166. package/docs/webapi/grabTextFrom.mustache +0 -10
  167. package/docs/webapi/grabTextFromAll.mustache +0 -9
  168. package/docs/webapi/grabTitle.mustache +0 -8
  169. package/docs/webapi/grabValueFrom.mustache +0 -9
  170. package/docs/webapi/grabValueFromAll.mustache +0 -8
  171. package/docs/webapi/grabWebElement.mustache +0 -9
  172. package/docs/webapi/grabWebElements.mustache +0 -9
  173. package/docs/webapi/moveCursorTo.mustache +0 -16
  174. package/docs/webapi/openNewTab.mustache +0 -7
  175. package/docs/webapi/pressKey.mustache +0 -12
  176. package/docs/webapi/pressKeyDown.mustache +0 -12
  177. package/docs/webapi/pressKeyUp.mustache +0 -12
  178. package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
  179. package/docs/webapi/refreshPage.mustache +0 -6
  180. package/docs/webapi/resizeWindow.mustache +0 -6
  181. package/docs/webapi/rightClick.mustache +0 -14
  182. package/docs/webapi/saveElementScreenshot.mustache +0 -10
  183. package/docs/webapi/saveScreenshot.mustache +0 -12
  184. package/docs/webapi/say.mustache +0 -10
  185. package/docs/webapi/scrollIntoView.mustache +0 -11
  186. package/docs/webapi/scrollPageToBottom.mustache +0 -6
  187. package/docs/webapi/scrollPageToTop.mustache +0 -6
  188. package/docs/webapi/scrollTo.mustache +0 -12
  189. package/docs/webapi/see.mustache +0 -11
  190. package/docs/webapi/seeAttributesOnElements.mustache +0 -9
  191. package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
  192. package/docs/webapi/seeCookie.mustache +0 -8
  193. package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
  194. package/docs/webapi/seeCurrentPathEquals.mustache +0 -10
  195. package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
  196. package/docs/webapi/seeElement.mustache +0 -12
  197. package/docs/webapi/seeElementInDOM.mustache +0 -8
  198. package/docs/webapi/seeInCurrentUrl.mustache +0 -8
  199. package/docs/webapi/seeInField.mustache +0 -17
  200. package/docs/webapi/seeInPopup.mustache +0 -8
  201. package/docs/webapi/seeInSource.mustache +0 -7
  202. package/docs/webapi/seeInTitle.mustache +0 -8
  203. package/docs/webapi/seeNumberOfElements.mustache +0 -11
  204. package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
  205. package/docs/webapi/seeTextEquals.mustache +0 -9
  206. package/docs/webapi/seeTitleEquals.mustache +0 -8
  207. package/docs/webapi/seeTraffic.mustache +0 -36
  208. package/docs/webapi/selectOption.mustache +0 -26
  209. package/docs/webapi/setCookie.mustache +0 -16
  210. package/docs/webapi/setGeoLocation.mustache +0 -12
  211. package/docs/webapi/startRecordingTraffic.mustache +0 -8
  212. package/docs/webapi/startRecordingWebSocketMessages.mustache +0 -8
  213. package/docs/webapi/stopRecordingTraffic.mustache +0 -5
  214. package/docs/webapi/stopRecordingWebSocketMessages.mustache +0 -7
  215. package/docs/webapi/switchTo.mustache +0 -9
  216. package/docs/webapi/switchToNextTab.mustache +0 -10
  217. package/docs/webapi/switchToPreviousTab.mustache +0 -10
  218. package/docs/webapi/type.mustache +0 -21
  219. package/docs/webapi/uncheckOption.mustache +0 -13
  220. package/docs/webapi/wait.mustache +0 -8
  221. package/docs/webapi/waitForClickable.mustache +0 -11
  222. package/docs/webapi/waitForCookie.mustache +0 -9
  223. package/docs/webapi/waitForDetached.mustache +0 -10
  224. package/docs/webapi/waitForDisabled.mustache +0 -6
  225. package/docs/webapi/waitForElement.mustache +0 -11
  226. package/docs/webapi/waitForEnabled.mustache +0 -6
  227. package/docs/webapi/waitForFunction.mustache +0 -17
  228. package/docs/webapi/waitForInvisible.mustache +0 -10
  229. package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
  230. package/docs/webapi/waitForText.mustache +0 -13
  231. package/docs/webapi/waitForValue.mustache +0 -10
  232. package/docs/webapi/waitForVisible.mustache +0 -10
  233. package/docs/webapi/waitInUrl.mustache +0 -9
  234. package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
  235. package/docs/webapi/waitToHide.mustache +0 -10
  236. package/docs/webapi/waitUrlEquals.mustache +0 -10
  237. package/lib/helper/AI.js +0 -214
  238. package/lib/plugin/pauseOn.js +0 -167
  239. package/lib/plugin/stepByStepReport.js +0 -432
  240. package/lib/plugin/subtitles.js +0 -89
@@ -0,0 +1,251 @@
1
+ # WebElement API
2
+
3
+ The WebElement class provides a unified interface for interacting with elements across different CodeceptJS helpers (Playwright, WebDriver, Puppeteer). It wraps native element instances and provides consistent methods regardless of the underlying helper.
4
+
5
+ ## Basic Usage
6
+
7
+ ```javascript
8
+ // Get WebElement instances from any helper
9
+ const element = await I.grabWebElement('#button')
10
+ const elements = await I.grabWebElements('.items')
11
+
12
+ // Use consistent API across all helpers
13
+ const text = await element.getText()
14
+ const isVisible = await element.isVisible()
15
+ await element.click()
16
+ await element.type('Hello World')
17
+
18
+ // Find child elements
19
+ const childElement = await element.$('.child-selector')
20
+ const childElements = await element.$$('.child-items')
21
+ ```
22
+
23
+ ## API Methods
24
+
25
+ ### Element Properties
26
+
27
+ #### `getText()`
28
+
29
+ Get the text content of the element.
30
+
31
+ ```javascript
32
+ const text = await element.getText()
33
+ console.log(text) // "Button Text"
34
+ ```
35
+
36
+ #### `getAttribute(name)`
37
+
38
+ Get the value of a specific attribute.
39
+
40
+ ```javascript
41
+ const id = await element.getAttribute('id')
42
+ const className = await element.getAttribute('class')
43
+ ```
44
+
45
+ #### `getProperty(name)`
46
+
47
+ Get the value of a JavaScript property.
48
+
49
+ ```javascript
50
+ const value = await element.getProperty('value')
51
+ const checked = await element.getProperty('checked')
52
+ ```
53
+
54
+ #### `getInnerHTML()`
55
+
56
+ Get the inner HTML content of the element.
57
+
58
+ ```javascript
59
+ const html = await element.getInnerHTML()
60
+ console.log(html) // "<span>Content</span>"
61
+ ```
62
+
63
+ #### `getValue()`
64
+
65
+ Get the value of input elements.
66
+
67
+ ```javascript
68
+ const inputValue = await element.getValue()
69
+ ```
70
+
71
+ ### Element State
72
+
73
+ #### `isVisible()`
74
+
75
+ Check if the element is visible.
76
+
77
+ ```javascript
78
+ const visible = await element.isVisible()
79
+ if (visible) {
80
+ console.log('Element is visible')
81
+ }
82
+ ```
83
+
84
+ #### `isEnabled()`
85
+
86
+ Check if the element is enabled (not disabled).
87
+
88
+ ```javascript
89
+ const enabled = await element.isEnabled()
90
+ if (enabled) {
91
+ await element.click()
92
+ }
93
+ ```
94
+
95
+ #### `exists()`
96
+
97
+ Check if the element exists in the DOM.
98
+
99
+ ```javascript
100
+ const exists = await element.exists()
101
+ if (exists) {
102
+ console.log('Element exists')
103
+ }
104
+ ```
105
+
106
+ #### `getBoundingBox()`
107
+
108
+ Get the element's bounding box (position and size).
109
+
110
+ ```javascript
111
+ const box = await element.getBoundingBox()
112
+ console.log(box) // { x: 100, y: 200, width: 150, height: 50 }
113
+ ```
114
+
115
+ ### Element Interactions
116
+
117
+ #### `click(options)`
118
+
119
+ Click the element.
120
+
121
+ ```javascript
122
+ await element.click()
123
+ // With options (Playwright/Puppeteer)
124
+ await element.click({ button: 'right' })
125
+ ```
126
+
127
+ #### `type(text, options)`
128
+
129
+ Type text into the element.
130
+
131
+ ```javascript
132
+ await element.type('Hello World')
133
+ // With options (Playwright/Puppeteer)
134
+ await element.type('Hello', { delay: 100 })
135
+ ```
136
+
137
+ ### Child Element Search
138
+
139
+ #### `$(locator)`
140
+
141
+ Find the first child element matching the locator.
142
+
143
+ ```javascript
144
+ const childElement = await element.$('.child-class')
145
+ if (childElement) {
146
+ await childElement.click()
147
+ }
148
+ ```
149
+
150
+ #### `$$(locator)`
151
+
152
+ Find all child elements matching the locator.
153
+
154
+ ```javascript
155
+ const childElements = await element.$$('.child-items')
156
+ for (const child of childElements) {
157
+ const text = await child.getText()
158
+ console.log(text)
159
+ }
160
+ ```
161
+
162
+ ### Native Access
163
+
164
+ #### `getNativeElement()`
165
+
166
+ Get the original native element instance.
167
+
168
+ ```javascript
169
+ const nativeElement = element.getNativeElement()
170
+ // For Playwright: ElementHandle
171
+ // For WebDriver: WebElement
172
+ // For Puppeteer: ElementHandle
173
+ ```
174
+
175
+ #### `getHelper()`
176
+
177
+ Get the helper instance that created this WebElement.
178
+
179
+ ```javascript
180
+ const helper = element.getHelper()
181
+ console.log(helper.constructor.name) // "Playwright", "WebDriver", or "Puppeteer"
182
+ ```
183
+
184
+ ## Locator Support
185
+
186
+ The `$()` and `$$()` methods support various locator formats:
187
+
188
+ ```javascript
189
+ // CSS selectors
190
+ await element.$('.class-name')
191
+ await element.$('#element-id')
192
+
193
+ // CodeceptJS locator objects
194
+ await element.$({ css: '.my-class' })
195
+ await element.$({ xpath: '//div[@class="test"]' })
196
+ await element.$({ id: 'element-id' })
197
+ await element.$({ name: 'field-name' })
198
+ await element.$({ className: 'my-class' })
199
+ ```
200
+
201
+ ## Cross-Helper Compatibility
202
+
203
+ The same WebElement code works across all supported helpers:
204
+
205
+ ```javascript
206
+ // This code works identically with Playwright, WebDriver, and Puppeteer
207
+ const loginForm = await I.grabWebElement('#login-form')
208
+ const usernameField = await loginForm.$('[name="username"]')
209
+ const passwordField = await loginForm.$('[name="password"]')
210
+ const submitButton = await loginForm.$('button[type="submit"]')
211
+
212
+ await usernameField.type('user@example.com')
213
+ await passwordField.type('password123')
214
+ await submitButton.click()
215
+ ```
216
+
217
+ ## Migration from Native Elements
218
+
219
+ If you were previously using native elements, you can gradually migrate:
220
+
221
+ ```javascript
222
+ // Old way - helper-specific
223
+ const nativeElements = await I.grabWebElements('.items')
224
+ // Different API for each helper
225
+
226
+ // New way - unified
227
+ const webElements = await I.grabWebElements('.items')
228
+ // Same API across all helpers
229
+
230
+ // Backward compatibility
231
+ const nativeElement = webElements[0].getNativeElement()
232
+ // Use native methods if needed
233
+ ```
234
+
235
+ ## Error Handling
236
+
237
+ WebElement methods will throw appropriate errors when operations fail:
238
+
239
+ ```javascript
240
+ try {
241
+ const element = await I.grabWebElement('#nonexistent')
242
+ } catch (error) {
243
+ console.log('Element not found')
244
+ }
245
+
246
+ try {
247
+ await element.click()
248
+ } catch (error) {
249
+ console.log('Click failed:', error.message)
250
+ }
251
+ ```