codeceptjs 3.6.0-beta.1.ai-healers → 3.6.1

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 (130) hide show
  1. package/README.md +2 -2
  2. package/bin/codecept.js +2 -1
  3. package/docs/webapi/dontSeeTraffic.mustache +13 -0
  4. package/docs/webapi/flushNetworkTraffics.mustache +5 -0
  5. package/docs/webapi/grabRecordedNetworkTraffics.mustache +10 -0
  6. package/docs/webapi/seeTraffic.mustache +36 -0
  7. package/docs/webapi/startRecordingTraffic.mustache +8 -0
  8. package/docs/webapi/startRecordingWebSocketMessages.mustache +8 -0
  9. package/docs/webapi/stopRecordingTraffic.mustache +5 -0
  10. package/docs/webapi/stopRecordingWebSocketMessages.mustache +7 -0
  11. package/docs/webapi/waitForCookie.mustache +9 -0
  12. package/lib/actor.js +6 -3
  13. package/lib/command/dryRun.js +44 -13
  14. package/lib/helper/Appium.js +36 -12
  15. package/lib/helper/Expect.js +11 -8
  16. package/lib/helper/JSONResponse.js +8 -8
  17. package/lib/helper/MockServer.js +221 -0
  18. package/lib/helper/Playwright.js +107 -371
  19. package/lib/helper/Puppeteer.js +404 -71
  20. package/lib/helper/REST.js +4 -1
  21. package/lib/helper/WebDriver.js +189 -13
  22. package/lib/helper/errors/ElementAssertion.js +38 -0
  23. package/lib/helper/extras/PlaywrightReactVueLocator.js +6 -1
  24. package/lib/helper/network/actions.js +123 -0
  25. package/lib/helper/network/utils.js +187 -0
  26. package/lib/locator.js +36 -5
  27. package/lib/pause.js +4 -9
  28. package/lib/plugin/coverage.js +112 -99
  29. package/lib/step.js +3 -1
  30. package/package.json +49 -38
  31. package/typings/index.d.ts +19 -2
  32. package/typings/promiseBasedTypes.d.ts +505 -41
  33. package/typings/types.d.ts +531 -43
  34. package/docs/advanced.md +0 -351
  35. package/docs/ai.md +0 -365
  36. package/docs/api.md +0 -323
  37. package/docs/basics.md +0 -979
  38. package/docs/bdd.md +0 -539
  39. package/docs/best.md +0 -237
  40. package/docs/books.md +0 -37
  41. package/docs/bootstrap.md +0 -135
  42. package/docs/build/AI.js +0 -124
  43. package/docs/build/ApiDataFactory.js +0 -410
  44. package/docs/build/Appium.js +0 -2027
  45. package/docs/build/Expect.js +0 -422
  46. package/docs/build/FileSystem.js +0 -228
  47. package/docs/build/GraphQL.js +0 -229
  48. package/docs/build/GraphQLDataFactory.js +0 -309
  49. package/docs/build/JSONResponse.js +0 -338
  50. package/docs/build/Mochawesome.js +0 -71
  51. package/docs/build/Nightmare.js +0 -2152
  52. package/docs/build/OpenAI.js +0 -126
  53. package/docs/build/Playwright.js +0 -5110
  54. package/docs/build/Protractor.js +0 -2706
  55. package/docs/build/Puppeteer.js +0 -3905
  56. package/docs/build/REST.js +0 -344
  57. package/docs/build/TestCafe.js +0 -2125
  58. package/docs/build/WebDriver.js +0 -4240
  59. package/docs/changelog.md +0 -2572
  60. package/docs/commands.md +0 -266
  61. package/docs/community-helpers.md +0 -58
  62. package/docs/configuration.md +0 -157
  63. package/docs/continuous-integration.md +0 -22
  64. package/docs/custom-helpers.md +0 -306
  65. package/docs/data.md +0 -379
  66. package/docs/detox.md +0 -235
  67. package/docs/docker.md +0 -136
  68. package/docs/email.md +0 -183
  69. package/docs/examples.md +0 -149
  70. package/docs/heal.md +0 -186
  71. package/docs/helpers/ApiDataFactory.md +0 -266
  72. package/docs/helpers/Appium.md +0 -1374
  73. package/docs/helpers/Detox.md +0 -586
  74. package/docs/helpers/Expect.md +0 -275
  75. package/docs/helpers/FileSystem.md +0 -152
  76. package/docs/helpers/GraphQL.md +0 -151
  77. package/docs/helpers/GraphQLDataFactory.md +0 -226
  78. package/docs/helpers/JSONResponse.md +0 -254
  79. package/docs/helpers/Mochawesome.md +0 -8
  80. package/docs/helpers/MockRequest.md +0 -377
  81. package/docs/helpers/Nightmare.md +0 -1305
  82. package/docs/helpers/OpenAI.md +0 -70
  83. package/docs/helpers/Playwright.md +0 -2759
  84. package/docs/helpers/Polly.md +0 -44
  85. package/docs/helpers/Protractor.md +0 -1769
  86. package/docs/helpers/Puppeteer-firefox.md +0 -86
  87. package/docs/helpers/Puppeteer.md +0 -2317
  88. package/docs/helpers/REST.md +0 -218
  89. package/docs/helpers/TestCafe.md +0 -1321
  90. package/docs/helpers/WebDriver.md +0 -2547
  91. package/docs/hooks.md +0 -340
  92. package/docs/index.md +0 -111
  93. package/docs/installation.md +0 -75
  94. package/docs/internal-api.md +0 -266
  95. package/docs/locators.md +0 -339
  96. package/docs/mobile-react-native-locators.md +0 -67
  97. package/docs/mobile.md +0 -338
  98. package/docs/pageobjects.md +0 -291
  99. package/docs/parallel.md +0 -400
  100. package/docs/playwright.md +0 -632
  101. package/docs/plugins.md +0 -1247
  102. package/docs/puppeteer.md +0 -316
  103. package/docs/quickstart.md +0 -162
  104. package/docs/react.md +0 -70
  105. package/docs/reports.md +0 -392
  106. package/docs/secrets.md +0 -36
  107. package/docs/shadow.md +0 -68
  108. package/docs/shared/keys.mustache +0 -31
  109. package/docs/shared/react.mustache +0 -1
  110. package/docs/testcafe.md +0 -174
  111. package/docs/translation.md +0 -247
  112. package/docs/tutorial.md +0 -271
  113. package/docs/typescript.md +0 -180
  114. package/docs/ui.md +0 -59
  115. package/docs/videos.md +0 -28
  116. package/docs/visual.md +0 -202
  117. package/docs/vue.md +0 -143
  118. package/docs/webdriver.md +0 -701
  119. package/docs/wiki/Books-&-Posts.md +0 -27
  120. package/docs/wiki/Community-Helpers-&-Plugins.md +0 -53
  121. package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -61
  122. package/docs/wiki/Examples.md +0 -145
  123. package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
  124. package/docs/wiki/Home.md +0 -16
  125. package/docs/wiki/Migration-to-Appium-v2---CodeceptJS.md +0 -83
  126. package/docs/wiki/Release-Process.md +0 -24
  127. package/docs/wiki/Roadmap.md +0 -23
  128. package/docs/wiki/Tests.md +0 -1393
  129. package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
  130. package/docs/wiki/Videos.md +0 -19
package/docs/advanced.md DELETED
@@ -1,351 +0,0 @@
1
- ---
2
- permalink: /advanced
3
- title: Advanced Usage
4
- ---
5
-
6
- # Advanced Usage
7
-
8
- ## Data Driven Tests
9
-
10
- Execute the same scenario on a different data set.
11
-
12
- Let's say you want to test login for different user accounts.
13
- In this case, you need to create a datatable and fill it in with credentials.
14
- Then use `Data().Scenario` to include this data and generate multiple scenarios:
15
-
16
- ```js
17
- // Define data table inside a test or load from another module
18
- let accounts = new DataTable(['login', 'password']); //
19
- accounts.add(['davert', '123456']); // adding records to a table
20
- accounts.add(['admin', '123456']);
21
-
22
- // You can skip some data. But add them to report as skipped (just like with usual scenarios):
23
- accounts.xadd(['admin', '23456'])
24
-
25
- // Pass dataTable to Data()
26
- // Use special param `current` to get current data set
27
- Data(accounts).Scenario('Test Login', ({ I, current }) => {
28
- I.fillField('Username', current.login); // current is reserved!
29
- I.fillField('Password', current.password);
30
- I.click('Sign In');
31
- I.see('Welcome '+ current.login);
32
- });
33
-
34
-
35
- // Also you can set only for Data tests. It will launch executes only the current test but with all data options
36
- Data(accounts).only.Scenario('Test Login', ({ I, current }) => {
37
- I.fillField('Username', current.login); // current is reserved!
38
- I.fillField('Password', current.password);
39
- I.click('Sign In');
40
- I.see('Welcome '+ current.login);
41
- });
42
- ```
43
-
44
- *Important: you can't use name `current` for pageObjects or helpers in data scenarios*
45
-
46
- This will produce 2 tests with different data sets.
47
- Current data set is appended to a test name in output:
48
-
49
- ```sh
50
- ✓ Test Login | {"login":"davert","password":"123456"}
51
- ✓ Test Login | {"login":"admin","password":"123456"}
52
- S Test Login | {"login":"admin","password":"23456"}
53
- ```
54
-
55
- ```js
56
- // You can filter your data table
57
- Data(accounts.filter(account => account.login == 'admin')
58
- .Scenario('Test Login', ({ I, current }) => {
59
- I.fillField('Username', current.login);
60
- I.fillField('Password', current.password);
61
- I.click('Sign In');
62
- I.see('Welcome '+ current.login);
63
- });
64
- ```
65
-
66
- This will limit data sets accoring passed function:
67
-
68
- ```sh
69
- ✓ Test Login | {"login":"admin","password":"123456"}
70
- S Test Login | {"login":"admin","password":"23456"}
71
- ```
72
-
73
- Data sets can also be defined with array, generator, or a function.
74
-
75
- ```js
76
- Data(function*() {
77
- yield { user: 'davert'};
78
- yield { user: 'andrey'};
79
- }).Scenario() // ...
80
- ```
81
-
82
- *HINT: If you don't use DataTable. add `toString()` method to each object added to data set, so the data could be pretty printed in a test name*
83
-
84
- ## Tags
85
-
86
- Append `@tag` to your test name, so
87
-
88
- ```js
89
- Scenario('update user profile @slow')
90
- ```
91
-
92
- Alternativly, use `tag` method of Scenario to set additional tags:
93
-
94
- ```js
95
- Scenario('update user profile', ({ }) => {
96
- // test goes here
97
- }).tag('@slow').tag('important');
98
- ```
99
-
100
- All tests with `@tag` could be executed with `--grep '@tag'` option.
101
-
102
- ```sh
103
- codeceptjs run --grep '@slow'
104
- ```
105
-
106
- Use regex for more flexible filtering:
107
-
108
- * `--grep '(?=.*@smoke2)(?=.*@smoke3)'` - run tests with @smoke2 and @smoke3 in name
109
- * `--grep "\@smoke2|\@smoke3"` - run tests with @smoke2 or @smoke3 in name
110
- * `--grep '((?=.*@smoke2)(?=.*@smoke3))|@smoke4'` - run tests with (@smoke2 and @smoke3) or @smoke4 in name
111
- * `--grep '(?=.*@smoke2)^(?!.*@smoke3)'` - run tests with @smoke2 but without @smoke3 in name
112
- * `--grep '(?=.*)^(?!.*@smoke4)'` - run all tests except @smoke4
113
-
114
-
115
-
116
- ## Debug
117
-
118
- CodeceptJS provides a debug mode in which additional information is printed.
119
- It can be turned on with `--debug` flag.
120
-
121
- ```sh
122
- npx codeceptjs run --debug
123
- ```
124
-
125
- to receive even more information turn on `--verbose` flag:
126
-
127
- ```sh
128
- npx codeceptjs run --verbose
129
- ```
130
-
131
- > You can pause execution and enter **interactive console** mode by calling `pause()` inside your test.
132
-
133
- To see a complete internal debug of CodeceptJS use `DEBUG` env variable:
134
-
135
- ```sh
136
- DEBUG=codeceptjs:* npx codeceptjs run
137
- ```
138
-
139
- For an interactive debugging use NodeJS debugger. In **WebStorm**:
140
-
141
- ```sh
142
- node $NODE_DEBUG_OPTION ./node_modules/.bin/codeceptjs run
143
- ```
144
-
145
- For **Visual Studio Code**, add the following configuration in launch.json:
146
-
147
- ```json
148
- {
149
- "type": "node",
150
- "request": "launch",
151
- "name": "codeceptjs",
152
- "args": ["run", "--grep", "@your_test_tag"],
153
- "program": "${workspaceFolder}/node_modules/codeceptjs/bin/codecept.js"
154
- }
155
- ```
156
-
157
-
158
- ## Test Options
159
-
160
- Features and Scenarios have their options that can be set by passing a hash after their names:
161
-
162
- ```js
163
- Feature('My feature', {key: val});
164
-
165
- Scenario('My scenario', {key: val},({ I }) => {});
166
- ```
167
-
168
- You can use this options for build your own [plugins](https://codecept.io/hooks/#plugins) with [event listners](https://codecept.io/hooks/#api). Example:
169
-
170
- ```js
171
- // for test
172
- event.dispatcher.on(event.test.before, (test) => {
173
- ...
174
- if (test.opts.key) {
175
- ...
176
- }
177
- ...
178
- });
179
- // or for suite
180
- event.dispatcher.on(event.suite.before, (suite) => {
181
- ...
182
- if (suite.opts.key) {
183
- ...
184
- }
185
- ...
186
- });
187
- ```
188
-
189
- ## Timeout
190
-
191
- Tests can get stuck due to various reasons such as network connection issues, crashed browser, etc.
192
- This can make tests process hang. To prevent these situations timeouts can be used. Timeouts can be set explicitly for flaky parts of code, or implicitly in a config.
193
-
194
- > Previous timeout implementation was disabled as it had no effect when dealing with steps and promises.
195
-
196
- ### Steps Timeout
197
-
198
- It is possible to limit a step execution to specified time with `I.limitTime` command.
199
- It will set timeout in seconds for the next executed step:
200
-
201
- ```js
202
- // limit clicking to 5 seconds
203
- I.limitTime(5).click('Link')
204
- ```
205
-
206
- It is possible to set a timeout for all steps implicitly (except waiters) using [stepTimeout plugin](/plugins/#steptimeout).
207
-
208
- ### Tests Timeout
209
-
210
- Test timeout can be set in seconds via Scenario options:
211
-
212
- ```js
213
- // limit test to 20 seconds
214
- Scenario('slow test that should be stopped', { timeout: 20 }, ({ I }) => {
215
- // ...
216
- })
217
- ```
218
-
219
- This timeout can be set globally in `codecept.conf.js` in seconds:
220
-
221
- ```js
222
- exports.config = {
223
-
224
- // each test must not run longer than 5 mins
225
- timeout: 300,
226
-
227
- }
228
- ```
229
-
230
- ### Suites Timeout
231
-
232
- A timeout for a group of tests can be set on Feature level via options.
233
-
234
- ```js
235
- // limit all tests in this suite to 30 seconds
236
- Feature('flaky tests', { timeout: 30 })
237
- ```
238
-
239
- ### Timeout Confguration
240
-
241
- <Badge text="Updated in 3.4" type="warning"/>
242
-
243
- Timeout rules can be set globally via config.
244
-
245
- To set a timeout for all running tests provide a **number of seconds** to `timeout` config option:
246
-
247
-
248
- ```js
249
- // inside codecept.conf.js or codecept.conf.ts
250
- timeout: 30, // limit all tests in all suites to 30 secs
251
- ```
252
-
253
- It is possible to tune this configuration for a different groups of tests passing options as array and using `grep` option to filter tests:
254
-
255
- ```js
256
- // inside codecept.conf.js or codecept.conf.ts
257
-
258
- timeout: [
259
- 10, // default timeout is 10secs
260
-
261
- // but increase timeout for slow tests
262
- {
263
- grep: '@slow',
264
- Feature: 50
265
- },
266
- ]
267
- ```
268
-
269
- > ℹ️ `grep` value can be string or regexp
270
-
271
- It is possible to set a timeout for Scenario or Feature:
272
-
273
- ```js
274
- // inside codecept.conf.js or codecept.conf.ts
275
- timeout: [
276
-
277
- // timeout for Feature with @slow in title
278
- {
279
- grep: '@slow',
280
- Feature: 50
281
- },
282
-
283
- // timeout for Scenario with 'flaky0' .. `flaky1` in title
284
- {
285
- // regexp can be passed to grep
286
- grep: /flaky[0-9]/,
287
- Scenario: 10
288
- },
289
-
290
- // timeout for all suites
291
- {
292
- Feature: 20
293
- }
294
- ]
295
- ```
296
-
297
- Global timeouts will be overridden by explicit timeouts of a test or steps.
298
-
299
- ### Disable Timeouts
300
-
301
- To execute tests ignoring all timeout settings use `--no-timeouts` option:
302
-
303
- ```
304
- npx codeceptjs run --no-timeouts
305
- ```
306
-
307
- ## Dynamic Configuration
308
-
309
- Helpers can be reconfigured per scenario or per feature.
310
- This might be useful when some tests should be executed with different settings than others.
311
- In order to reconfigure tests use `.config()` method of `Scenario` or `Feature`.
312
-
313
- ```js
314
- Scenario('should be executed in firefox', ({ I }) => {
315
- // I.amOnPage(..)
316
- }).config({ browser: 'firefox' })
317
- ```
318
-
319
- In this case `config` overrides current config of the first helper.
320
- To change config of specific helper pass two arguments: helper name and config values:
321
-
322
- ```js
323
- Scenario('should create data via v2 version of API', ({ I }) => {
324
- // I.amOnPage(..)
325
- }).config('REST', { endpoint: 'https://api.mysite.com/v2' })
326
- ```
327
-
328
- Config can also be set by a function, in this case you can get a test object and specify config values based on it.
329
- This is very useful when running tests against cloud providers, like BrowserStack. This function can also be asynchronous.
330
-
331
- ```js
332
- Scenario('should report to BrowserStack', ({ I }) => {
333
- // I.amOnPage(..)
334
- }).config((test) => {
335
- return { desiredCapabilities: {
336
- project: test.suite.title,
337
- name: test.title,
338
- }}
339
- });
340
- ```
341
-
342
- Config changes can be applied to all tests in suite:
343
-
344
- ```js
345
- Feature('Admin Panel').config({ url: 'https://mysite.com/admin' });
346
- ```
347
-
348
- Please note that some config changes can't be applied on the fly. For instance, if you set `restart: false` in your config and then changing value `browser` won't take an effect as browser is already started and won't be closed untill all tests finish.
349
-
350
- Configuration changes will be reverted after a test or a suite.
351
-