codeceptjs 4.0.0-rc.23 → 4.0.0-rc.25

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 (73) hide show
  1. package/README.md +9 -10
  2. package/docs/ai.md +3 -51
  3. package/docs/architecture.md +16 -0
  4. package/docs/bootstrap.md +1 -1
  5. package/docs/continuous-integration.md +16 -44
  6. package/docs/custom-helpers.md +1 -1
  7. package/docs/detox.md +1 -1
  8. package/docs/docker.md +1 -30
  9. package/docs/examples.md +0 -1
  10. package/docs/helpers/Appium.md +16 -2
  11. package/docs/helpers/Playwright.md +161 -160
  12. package/docs/helpers/Puppeteer.md +143 -250
  13. package/docs/helpers/WebDriver.md +134 -177
  14. package/docs/hooks.md +11 -1
  15. package/docs/index.md +1 -1
  16. package/docs/installation.md +2 -19
  17. package/docs/locators.md +1 -1
  18. package/docs/migrate-from-cypress.md +98 -0
  19. package/docs/migrate-from-java.md +108 -0
  20. package/docs/migrate-from-protractor.md +101 -0
  21. package/docs/migrate-from-testcafe.md +99 -0
  22. package/docs/migration-4.md +195 -8
  23. package/docs/plugins/aiTrace.md +49 -0
  24. package/docs/plugins/analyze.md +66 -0
  25. package/docs/plugins/auth.md +241 -0
  26. package/docs/plugins/autoDelay.md +48 -0
  27. package/docs/plugins/browser.md +41 -0
  28. package/docs/plugins/coverage.md +39 -0
  29. package/docs/plugins/customLocator.md +119 -0
  30. package/docs/plugins/customReporter.md +16 -0
  31. package/docs/plugins/expose.md +75 -0
  32. package/docs/plugins/heal.md +44 -0
  33. package/docs/plugins/junitReporter.md +51 -0
  34. package/docs/plugins/pageInfo.md +34 -0
  35. package/docs/plugins/pause.md +43 -0
  36. package/docs/plugins/pauseOnFail.md +18 -0
  37. package/docs/plugins/retryFailedStep.md +75 -0
  38. package/docs/plugins/screencast.md +55 -0
  39. package/docs/plugins/screenshot.md +58 -0
  40. package/docs/plugins/screenshotOnFail.md +18 -0
  41. package/docs/plugins/stepTimeout.md +65 -0
  42. package/docs/plugins.md +40 -862
  43. package/docs/reports.md +18 -4
  44. package/docs/retry.md +48 -18
  45. package/docs/store.md +94 -0
  46. package/docs/timeouts.md +1 -1
  47. package/docs/tutorial.md +207 -155
  48. package/docs/webdriver.md +6 -73
  49. package/lib/actor.js +0 -35
  50. package/lib/command/run-multiple.js +1 -2
  51. package/lib/helper/Playwright.js +1 -15
  52. package/lib/helper/Puppeteer.js +0 -103
  53. package/lib/helper/WebDriver.js +1 -28
  54. package/lib/helper/extras/PlaywrightLocator.js +10 -0
  55. package/lib/locator.js +0 -13
  56. package/lib/plugin/analyze.js +3 -4
  57. package/lib/plugin/pauseOnFail.js +3 -1
  58. package/lib/plugin/retryFailedStep.js +7 -7
  59. package/lib/plugin/screenshot.js +0 -5
  60. package/lib/plugin/screenshotOnFail.js +3 -1
  61. package/lib/plugin/stepTimeout.js +1 -1
  62. package/lib/recorder.js +1 -1
  63. package/lib/workers.js +0 -4
  64. package/package.json +3 -4
  65. package/docs/helpers/Mochawesome.md +0 -8
  66. package/docs/helpers/MockServer.md +0 -212
  67. package/docs/helpers/Polly.md +0 -44
  68. package/docs/helpers/Protractor.md +0 -1769
  69. package/docs/helpers/SoftExpectHelper.md +0 -352
  70. package/docs/react.md +0 -70
  71. package/lib/helper/Mochawesome.js +0 -96
  72. package/lib/helper/extras/PlaywrightReactVueLocator.js +0 -61
  73. package/lib/helper/extras/React.js +0 -65
@@ -14,11 +14,7 @@ title: WebDriver
14
14
  WebDriver helper which wraps [webdriverio][1] library to
15
15
  manipulate browser using Selenium WebDriver or PhantomJS.
16
16
 
17
- WebDriver requires Selenium Server and ChromeDriver/GeckoDriver to be installed. Those tools can be easily installed via NPM. Please check [Testing with WebDriver][2] for more details.
18
-
19
- With the release of WebdriverIO version v8.14.0, and onwards, all driver management hassles are now a thing of the past 🙌. Read more [here][3].
20
- One of the significant advantages of this update is that you can now get rid of any driver services you previously had to manage, such as
21
- `wdio-chromedriver-service`, `wdio-geckodriver-service`, `wdio-edgedriver-service`, `wdio-safaridriver-service`, and even `@wdio/selenium-standalone-service`.
17
+ No Selenium Server, ChromeDriver, or GeckoDriver to install or start. Since WebdriverIO 9, driver management is fully automatic — WebdriverIO downloads and starts the matching driver for you. Read more [here][2]. Please check [Testing with WebDriver][3] for more details.
22
18
 
23
19
  For those who require custom driver options, fear not; WebDriver Helper allows you to pass in driver options through custom WebDriver configuration.
24
20
  If you have a custom grid, use a cloud service, or prefer to run your own driver, there's no need to worry since WebDriver Helper will only start a driver when there are no other connection information settings like hostname or port specified.
@@ -35,26 +31,26 @@ Type: [object][17]
35
31
 
36
32
  * `url` **[string][18]** base url of website to be tested.
37
33
  * `browser` **[string][18]** Browser in which to perform testing.
38
- * `bidiProtocol` **[boolean][33]?** WebDriver Bidi Protocol. Default: false. More info: [https://webdriver.io/docs/api/webdriverBidi/][37]
34
+ * `bidiProtocol` **[boolean][34]?** WebDriver Bidi Protocol. Default: false. More info: [https://webdriver.io/docs/api/webdriverBidi/][38]
39
35
  * `basicAuth` **[string][18]?** (optional) the basic authentication to pass to base url. Example: {username: 'username', password: 'password'}
40
36
  * `host` **[string][18]?** WebDriver host to connect.
41
- * `port` **[number][22]?** WebDriver port to connect.
37
+ * `port` **[number][23]?** WebDriver port to connect.
42
38
  * `protocol` **[string][18]?** protocol for WebDriver server.
43
39
  * `path` **[string][18]?** path to WebDriver server.
44
- * `restart` **[boolean][33]?** restart browser between tests.
45
- * `smartWait` **([boolean][33] | [number][22])?** **enables [SmartWait][38]**; wait for additional milliseconds for element to appear. Enable for 5 secs: "smartWait": 5000.
46
- * `disableScreenshots` **[boolean][33]?** don't save screenshots on failure.
47
- * `fullPageScreenshots` **[boolean][33]?** (optional - make full page screenshots on failure.
48
- * `uniqueScreenshotNames` **[boolean][33]?** option to prevent screenshot override if you have scenarios with the same name in different suites.
49
- * `keepBrowserState` **[boolean][33]?** keep browser state between tests when `restart` is set to false.
50
- * `keepCookies` **[boolean][33]?** keep cookies between tests when `restart` set to false.
40
+ * `restart` **[boolean][34]?** restart browser between tests.
41
+ * `smartWait` **([boolean][34] | [number][23])?** **enables [SmartWait][39]**; wait for additional milliseconds for element to appear. Enable for 5 secs: "smartWait": 5000.
42
+ * `disableScreenshots` **[boolean][34]?** don't save screenshots on failure.
43
+ * `fullPageScreenshots` **[boolean][34]?** (optional - make full page screenshots on failure.
44
+ * `uniqueScreenshotNames` **[boolean][34]?** option to prevent screenshot override if you have scenarios with the same name in different suites.
45
+ * `keepBrowserState` **[boolean][34]?** keep browser state between tests when `restart` is set to false.
46
+ * `keepCookies` **[boolean][34]?** keep cookies between tests when `restart` set to false.
51
47
  * `windowSize` **[string][18]?** default window size. Set to `maximize` or a dimension in the format `640x480`.
52
- * `waitForTimeout` **[number][22]?** sets default wait time in *ms* for all `wait*` functions.
48
+ * `waitForTimeout` **[number][23]?** sets default wait time in *ms* for all `wait*` functions.
53
49
  * `desiredCapabilities` **[object][17]?** Selenium's [desired capabilities][7].
54
- * `manualStart` **[boolean][33]?** do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriver"]._startBrowser()`.
55
- * `timeouts` **[object][17]?** [WebDriver timeouts][39] defined as hash.
56
- * `highlightElement` **[boolean][33]?** highlight the interacting elements. Default: false. Note: only activate under verbose mode (--verbose).
57
- * `logLevel` **[string][18]?** level of logging verbosity. Default: silent. Options: trace | debug | info | warn | error | silent. More info: [https://webdriver.io/docs/configuration/#loglevel][40]
50
+ * `manualStart` **[boolean][34]?** do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriver"]._startBrowser()`.
51
+ * `timeouts` **[object][17]?** [WebDriver timeouts][40] defined as hash.
52
+ * `highlightElement` **[boolean][34]?** highlight the interacting elements. Default: false. Note: only activate under verbose mode (--verbose).
53
+ * `logLevel` **[string][18]?** level of logging verbosity. Default: silent. Options: trace | debug | info | warn | error | silent. More info: [https://webdriver.io/docs/configuration/#loglevel][41]
58
54
 
59
55
  ## wrapError
60
56
 
@@ -546,10 +542,6 @@ I.appendField('name', 'John', '.form-container');
546
542
 
547
543
  Returns **void** automatically synchronized promise through #recorder
548
544
 
549
-
550
- This action supports [React locators](https://codecept.io/react#locators)
551
-
552
-
553
545
  ### attachFile
554
546
 
555
547
  Appium: not tested
@@ -694,8 +686,12 @@ I.click('//form/*[@type=submit]');
694
686
  I.click('Logout', '#nav');
695
687
  // using strict locator
696
688
  I.click({css: 'nav a.login'});
689
+ // using ARIA role locator
690
+ I.click({role: 'button', name: 'Submit'});
697
691
  ```
698
692
 
693
+ > ℹ️ ARIA role locators (`{role, name}`) match elements the way assistive technology does and survive markup refactors. See [Locators][22].
694
+
699
695
  #### Parameters
700
696
 
701
697
  * `locator` **([string][18] | [object][17])** (optional, `'//body'` by default) clickable link or button located by text, or any element located by CSS|XPath|strict locator.
@@ -703,10 +699,6 @@ I.click({css: 'nav a.login'});
703
699
 
704
700
  Returns **void** automatically synchronized promise through #recorder
705
701
 
706
-
707
- This action supports [React locators](https://codecept.io/react#locators)
708
-
709
-
710
702
  ### clickXY
711
703
 
712
704
  Performs click at specific coordinates.
@@ -723,11 +715,11 @@ I.clickXY('#someElement', 50, 30);
723
715
 
724
716
  #### Parameters
725
717
 
726
- * `locator` **([string][18] | [object][17] | [number][22])** Element to click on or X coordinate if no element.
727
- * `x` **[number][22]?** X coordinate relative to element's top-left, or Y coordinate if locator is a number.
728
- * `y` **[number][22]?** Y coordinate relative to element's top-left.
718
+ * `locator` **([string][18] | [object][17] | [number][23])** Element to click on or X coordinate if no element.
719
+ * `x` **[number][23]?** X coordinate relative to element's top-left, or Y coordinate if locator is a number.
720
+ * `y` **[number][23]?** Y coordinate relative to element's top-left.
729
721
 
730
- Returns **[Promise][23]<void>**&#x20;
722
+ Returns **[Promise][24]<void>**&#x20;
731
723
 
732
724
  ### closeCurrentTab
733
725
 
@@ -751,7 +743,7 @@ Returns **void** automatically synchronized promise through #recorder
751
743
 
752
744
  ### defineTimeout
753
745
 
754
- Set [WebDriver timeouts][24] in realtime.
746
+ Set [WebDriver timeouts][25] in realtime.
755
747
 
756
748
  Timeouts are expected to be passed as object:
757
749
 
@@ -781,10 +773,6 @@ I.dontSee('Login', '.nav'); // no login inside .nav element
781
773
 
782
774
  Returns **void** automatically synchronized promise through #recorder
783
775
 
784
-
785
- This action supports [React locators](https://codecept.io/react#locators)
786
-
787
-
788
776
  ### dontSeeCheckboxIsChecked
789
777
 
790
778
  Appium: not tested
@@ -866,10 +854,6 @@ I.dontSeeElement('.modal', '#container');
866
854
 
867
855
  Returns **void** automatically synchronized promise through #recorder
868
856
 
869
-
870
- This action supports [React locators](https://codecept.io/react#locators)
871
-
872
-
873
857
  ### dontSeeElementInDOM
874
858
 
875
859
  Opposite to `seeElementInDOM`. Checks that element is not on page.
@@ -964,10 +948,6 @@ I.doubleClick('.btn.edit');
964
948
 
965
949
  Returns **void** automatically synchronized promise through #recorder
966
950
 
967
-
968
- This action supports [React locators](https://codecept.io/react#locators)
969
-
970
-
971
951
  ### dragAndDrop
972
952
 
973
953
  Appium: not tested
@@ -997,7 +977,7 @@ I.dragSlider('#slider', -70);
997
977
  #### Parameters
998
978
 
999
979
  * `locator` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
1000
- * `offsetX` **[number][22]** position to drag.
980
+ * `offsetX` **[number][23]** position to drag.
1001
981
 
1002
982
  Returns **void** automatically synchronized promise through #recorder
1003
983
 
@@ -1006,7 +986,7 @@ Returns **void** automatically synchronized promise through #recorder
1006
986
  Executes async script on page.
1007
987
  Provided function should execute a passed callback (as first argument) to signal it is finished.
1008
988
 
1009
- Example: In Vue.js to make components completely rendered we are waiting for [nextTick][25].
989
+ Example: In Vue.js to make components completely rendered we are waiting for [nextTick][26].
1010
990
 
1011
991
  ```js
1012
992
  I.executeAsyncScript(function(done) {
@@ -1027,13 +1007,13 @@ let val = await I.executeAsyncScript(function(url, done) {
1027
1007
  #### Parameters
1028
1008
 
1029
1009
  * `args` **...any** to be passed to function.
1030
- * `fn` **([string][18] | [function][26])** function to be executed in browser context.
1010
+ * `fn` **([string][18] | [function][27])** function to be executed in browser context.
1031
1011
 
1032
- Returns **[Promise][23]<any>** script return value
1012
+ Returns **[Promise][24]<any>** script return value
1033
1013
 
1034
1014
  ### executeScript
1035
1015
 
1036
- Wraps [execute][27] command.
1016
+ Wraps [execute][28] command.
1037
1017
 
1038
1018
  Executes sync script on a page.
1039
1019
  Pass arguments to function as additional parameters.
@@ -1062,9 +1042,9 @@ let date = await I.executeScript(function(el) {
1062
1042
  #### Parameters
1063
1043
 
1064
1044
  * `args` **...any** to be passed to function.
1065
- * `fn` **([string][18] | [function][26])** function to be executed in browser context.
1045
+ * `fn` **([string][18] | [function][27])** function to be executed in browser context.
1066
1046
 
1067
- Returns **[Promise][23]<any>** script return value
1047
+ Returns **[Promise][24]<any>** script return value
1068
1048
 
1069
1049
  ### fillField
1070
1050
 
@@ -1082,22 +1062,21 @@ I.fillField('password', secret('123456'));
1082
1062
  I.fillField('form#login input[name=username]', 'John');
1083
1063
  // or by strict locator
1084
1064
  I.fillField({css: 'form#login input[name=username]'}, 'John');
1065
+ // by ARIA role locator
1066
+ I.fillField({role: 'textbox', name: 'Email'}, 'hello@world.com');
1085
1067
  // within a context
1086
1068
  I.fillField('Name', 'John', '#section2');
1087
1069
  ```
1088
1070
 
1071
+ > ℹ️ ARIA role locators (`{role, name}`) match fields by their accessible name and survive markup refactors. See [Locators][22].
1072
+
1089
1073
  #### Parameters
1090
1074
 
1091
1075
  * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
1092
1076
  * `value` **([string][18] | [object][17])** text value to fill.
1093
1077
  * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1094
1078
 
1095
- Returns **void** automatically synchronized promise through #recorder
1096
-
1097
-
1098
- This action supports [React locators](https://codecept.io/react#locators)
1099
-
1100
- {{ custom }}
1079
+ Returns **void** automatically synchronized promise through #recorder{{ custom }}
1101
1080
 
1102
1081
  ### focus
1103
1082
 
@@ -1114,7 +1093,7 @@ I.see('#add-to-cart-bnt');
1114
1093
  #### Parameters
1115
1094
 
1116
1095
  * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1117
- * `options` **any?** Playwright only: [Additional options][28] for available options object as 2nd argument.
1096
+ * `options` **any?** Playwright only: [Additional options][29] for available options object as 2nd argument.
1118
1097
 
1119
1098
  Returns **void** automatically synchronized promise through #recorder
1120
1099
 
@@ -1152,10 +1131,6 @@ I.forceClick({css: 'nav a.login'});
1152
1131
 
1153
1132
  Returns **void** automatically synchronized promise through #recorder
1154
1133
 
1155
-
1156
- This action supports [React locators](https://codecept.io/react#locators)
1157
-
1158
-
1159
1134
  ### forceRightClick
1160
1135
 
1161
1136
  Emulates right click on an element.
@@ -1180,10 +1155,6 @@ I.forceRightClick('Menu');
1180
1155
 
1181
1156
  Returns **void** automatically synchronized promise through #recorder
1182
1157
 
1183
-
1184
- This action supports [React locators](https://codecept.io/react#locators)
1185
-
1186
-
1187
1158
  ### grabAllWindowHandles
1188
1159
 
1189
1160
  Get all Window Handles.
@@ -1193,7 +1164,7 @@ Useful for referencing a specific handle when calling `I.switchToWindow(handle)`
1193
1164
  const windows = await I.grabAllWindowHandles();
1194
1165
  ```
1195
1166
 
1196
- Returns **[Promise][23]<[Array][29]<[string][18]>>**&#x20;
1167
+ Returns **[Promise][24]<[Array][30]<[string][18]>>**&#x20;
1197
1168
 
1198
1169
  ### grabAttributeFrom
1199
1170
 
@@ -1210,7 +1181,7 @@ let hint = await I.grabAttributeFrom('#tooltip', 'title');
1210
1181
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1211
1182
  * `attr` **[string][18]** attribute name.
1212
1183
 
1213
- Returns **[Promise][23]<[string][18]>** attribute value
1184
+ Returns **[Promise][24]<[string][18]>** attribute value
1214
1185
 
1215
1186
  ### grabAttributeFromAll
1216
1187
 
@@ -1226,7 +1197,7 @@ let hints = await I.grabAttributeFromAll('.tooltip', 'title');
1226
1197
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1227
1198
  * `attr` **[string][18]** attribute name.
1228
1199
 
1229
- Returns **[Promise][23]<[Array][29]<[string][18]>>** attribute value
1200
+ Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
1230
1201
 
1231
1202
  ### grabBrowserLogs
1232
1203
 
@@ -1238,7 +1209,7 @@ let logs = await I.grabBrowserLogs();
1238
1209
  console.log(JSON.stringify(logs))
1239
1210
  ```
1240
1211
 
1241
- Returns **([Promise][23]<[Array][29]<[object][17]>> | [undefined][30])** all browser logs
1212
+ Returns **([Promise][24]<[Array][30]<[object][17]>> | [undefined][31])** all browser logs
1242
1213
 
1243
1214
  ### grabCookie
1244
1215
 
@@ -1272,7 +1243,7 @@ const value = await I.grabCssPropertyFrom('h3', 'font-weight');
1272
1243
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1273
1244
  * `cssProperty` **[string][18]** CSS property name.
1274
1245
 
1275
- Returns **[Promise][23]<[string][18]>** CSS value
1246
+ Returns **[Promise][24]<[string][18]>** CSS value
1276
1247
 
1277
1248
  ### grabCssPropertyFromAll
1278
1249
 
@@ -1288,7 +1259,7 @@ const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
1288
1259
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1289
1260
  * `cssProperty` **[string][18]** CSS property name.
1290
1261
 
1291
- Returns **[Promise][23]<[Array][29]<[string][18]>>** CSS value
1262
+ Returns **[Promise][24]<[Array][30]<[string][18]>>** CSS value
1292
1263
 
1293
1264
  ### grabCurrentUrl
1294
1265
 
@@ -1300,7 +1271,7 @@ let url = await I.grabCurrentUrl();
1300
1271
  console.log(`Current URL is [${url}]`);
1301
1272
  ```
1302
1273
 
1303
- Returns **[Promise][23]<[string][18]>** current URL
1274
+ Returns **[Promise][24]<[string][18]>** current URL
1304
1275
 
1305
1276
  ### grabCurrentWindowHandle
1306
1277
 
@@ -1311,7 +1282,7 @@ Useful for referencing it when calling `I.switchToWindow(handle)`
1311
1282
  const window = await I.grabCurrentWindowHandle();
1312
1283
  ```
1313
1284
 
1314
- Returns **[Promise][23]<[string][18]>**&#x20;
1285
+ Returns **[Promise][24]<[string][18]>**&#x20;
1315
1286
 
1316
1287
  ### grabElementBoundingRect
1317
1288
 
@@ -1339,7 +1310,7 @@ const width = await I.grabElementBoundingRect('h3', 'width');
1339
1310
  * `prop` &#x20;
1340
1311
  * `elementSize` **[string][18]?** x, y, width or height of the given element.
1341
1312
 
1342
- Returns **([Promise][23]<DOMRect> | [Promise][23]<[number][22]>)** Element bounding rectangle
1313
+ Returns **([Promise][24]<DOMRect> | [Promise][24]<[number][23]>)** Element bounding rectangle
1343
1314
 
1344
1315
  ### grabHTMLFrom
1345
1316
 
@@ -1356,7 +1327,7 @@ let postHTML = await I.grabHTMLFrom('#post');
1356
1327
  * `locator` &#x20;
1357
1328
  * `element` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1358
1329
 
1359
- Returns **[Promise][23]<[string][18]>** HTML code for an element
1330
+ Returns **[Promise][24]<[string][18]>** HTML code for an element
1360
1331
 
1361
1332
  ### grabHTMLFromAll
1362
1333
 
@@ -1372,7 +1343,7 @@ let postHTMLs = await I.grabHTMLFromAll('.post');
1372
1343
  * `locator` &#x20;
1373
1344
  * `element` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1374
1345
 
1375
- Returns **[Promise][23]<[Array][29]<[string][18]>>** HTML code for an element
1346
+ Returns **[Promise][24]<[Array][30]<[string][18]>>** HTML code for an element
1376
1347
 
1377
1348
  ### grabNumberOfOpenTabs
1378
1349
 
@@ -1383,7 +1354,7 @@ Resumes test execution, so **should be used inside async function with `await`**
1383
1354
  let tabs = await I.grabNumberOfOpenTabs();
1384
1355
  ```
1385
1356
 
1386
- Returns **[Promise][23]<[number][22]>** number of open tabs
1357
+ Returns **[Promise][24]<[number][23]>** number of open tabs
1387
1358
 
1388
1359
  ### grabNumberOfVisibleElements
1389
1360
 
@@ -1398,7 +1369,7 @@ let numOfElements = await I.grabNumberOfVisibleElements('p');
1398
1369
 
1399
1370
  * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1400
1371
 
1401
- Returns **[Promise][23]<[number][22]>** number of visible elements
1372
+ Returns **[Promise][24]<[number][23]>** number of visible elements
1402
1373
 
1403
1374
  ### grabPageScrollPosition
1404
1375
 
@@ -1409,7 +1380,7 @@ Resumes test execution, so **should be used inside an async function with `await
1409
1380
  let { x, y } = await I.grabPageScrollPosition();
1410
1381
  ```
1411
1382
 
1412
- Returns **[Promise][23]<PageScrollPosition>** scroll position
1383
+ Returns **[Promise][24]<PageScrollPosition>** scroll position
1413
1384
 
1414
1385
  ### grabPopupText
1415
1386
 
@@ -1419,7 +1390,7 @@ Grab the text within the popup. If no popup is visible then it will return null.
1419
1390
  await I.grabPopupText();
1420
1391
  ```
1421
1392
 
1422
- Returns **[Promise][23]<[string][18]>**&#x20;
1393
+ Returns **[Promise][24]<[string][18]>**&#x20;
1423
1394
 
1424
1395
  ### grabSource
1425
1396
 
@@ -1430,7 +1401,7 @@ Resumes test execution, so **should be used inside async function with `await`**
1430
1401
  let pageSource = await I.grabSource();
1431
1402
  ```
1432
1403
 
1433
- Returns **[Promise][23]<[string][18]>** source code
1404
+ Returns **[Promise][24]<[string][18]>** source code
1434
1405
 
1435
1406
  ### grabTextFrom
1436
1407
 
@@ -1447,7 +1418,7 @@ If multiple elements found returns first element.
1447
1418
 
1448
1419
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1449
1420
 
1450
- Returns **[Promise][23]<[string][18]>** attribute value
1421
+ Returns **[Promise][24]<[string][18]>** attribute value
1451
1422
 
1452
1423
  ### grabTextFromAll
1453
1424
 
@@ -1462,7 +1433,7 @@ let pins = await I.grabTextFromAll('#pin li');
1462
1433
 
1463
1434
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1464
1435
 
1465
- Returns **[Promise][23]<[Array][29]<[string][18]>>** attribute value
1436
+ Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
1466
1437
 
1467
1438
  ### grabTitle
1468
1439
 
@@ -1473,7 +1444,7 @@ Resumes test execution, so **should be used inside async with `await`** operator
1473
1444
  let title = await I.grabTitle();
1474
1445
  ```
1475
1446
 
1476
- Returns **[Promise][23]<[string][18]>** title
1447
+ Returns **[Promise][24]<[string][18]>** title
1477
1448
 
1478
1449
  ### grabValueFrom
1479
1450
 
@@ -1489,7 +1460,7 @@ let email = await I.grabValueFrom('input[name=email]');
1489
1460
 
1490
1461
  * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1491
1462
 
1492
- Returns **[Promise][23]<[string][18]>** attribute value
1463
+ Returns **[Promise][24]<[string][18]>** attribute value
1493
1464
 
1494
1465
  ### grabValueFromAll
1495
1466
 
@@ -1504,7 +1475,7 @@ let inputs = await I.grabValueFromAll('//form/input');
1504
1475
 
1505
1476
  * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1506
1477
 
1507
- Returns **[Promise][23]<[Array][29]<[string][18]>>** attribute value
1478
+ Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
1508
1479
 
1509
1480
  ### grabWebElement
1510
1481
 
@@ -1519,7 +1490,7 @@ const webElement = await I.grabWebElement('#button');
1519
1490
 
1520
1491
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1521
1492
 
1522
- Returns **[Promise][23]<any>** WebElement of being used Web helper
1493
+ Returns **[Promise][24]<any>** WebElement of being used Web helper
1523
1494
 
1524
1495
  ### grabWebElements
1525
1496
 
@@ -1534,7 +1505,7 @@ const webElements = await I.grabWebElements('#button');
1534
1505
 
1535
1506
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1536
1507
 
1537
- Returns **[Promise][23]<any>** WebElement of being used Web helper
1508
+ Returns **[Promise][24]<any>** WebElement of being used Web helper
1538
1509
 
1539
1510
  ### moveCursorTo
1540
1511
 
@@ -1555,8 +1526,8 @@ I.moveCursorTo('#submit', '.container');
1555
1526
  * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1556
1527
  * `xOffset` &#x20;
1557
1528
  * `yOffset` &#x20;
1558
- * `offsetX` **([number][22] | [string][18] | [object][17])** (optional, `0` by default) X-axis offset or context locator.
1559
- * `offsetY` **[number][22]** (optional, `0` by default) Y-axis offset.
1529
+ * `offsetX` **([number][23] | [string][18] | [object][17])** (optional, `0` by default) X-axis offset or context locator.
1530
+ * `offsetY` **[number][23]** (optional, `0` by default) Y-axis offset.
1560
1531
 
1561
1532
  Returns **void** automatically synchronized promise through #recorder
1562
1533
 
@@ -1581,7 +1552,7 @@ Returns **void** automatically synchronized promise through #recorder
1581
1552
 
1582
1553
  Presses a key in the browser (on a focused element).
1583
1554
 
1584
- *Hint:* For populating text field or textarea, it is recommended to use [`fillField`][31].
1555
+ *Hint:* For populating text field or textarea, it is recommended to use [`fillField`][32].
1585
1556
 
1586
1557
  ```js
1587
1558
  I.pressKey('Backspace');
@@ -1640,7 +1611,7 @@ Some of the supported key names are:
1640
1611
 
1641
1612
  #### Parameters
1642
1613
 
1643
- * `key` **([string][18] | [Array][29]<[string][18]>)** key or array of keys to press.
1614
+ * `key` **([string][18] | [Array][30]<[string][18]>)** key or array of keys to press.
1644
1615
 
1645
1616
  Returns **void** automatically synchronized promise through #recorder
1646
1617
 
@@ -1648,7 +1619,7 @@ Returns **void** automatically synchronized promise through #recorder
1648
1619
 
1649
1620
  Presses a key in the browser and leaves it in a down state.
1650
1621
 
1651
- To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][32]).
1622
+ To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][33]).
1652
1623
 
1653
1624
  ```js
1654
1625
  I.pressKeyDown('Control');
@@ -1666,7 +1637,7 @@ Returns **void** automatically synchronized promise through #recorder
1666
1637
 
1667
1638
  Releases a key in the browser which was previously set to a down state.
1668
1639
 
1669
- To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][32]).
1640
+ To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][33]).
1670
1641
 
1671
1642
  ```js
1672
1643
  I.pressKeyDown('Control');
@@ -1699,8 +1670,8 @@ First parameter can be set to `maximize`.
1699
1670
 
1700
1671
  #### Parameters
1701
1672
 
1702
- * `width` **[number][22]** width in pixels or `maximize`.
1703
- * `height` **[number][22]** height in pixels.
1673
+ * `width` **[number][23]** width in pixels or `maximize`.
1674
+ * `height` **[number][23]** height in pixels.
1704
1675
 
1705
1676
  Returns **void** automatically synchronized promise through #recorder
1706
1677
 
@@ -1724,10 +1695,6 @@ I.rightClick('Click me', '.context');
1724
1695
 
1725
1696
  Returns **void** automatically synchronized promise through #recorder
1726
1697
 
1727
-
1728
- This action supports [React locators](https://codecept.io/react#locators)
1729
-
1730
-
1731
1698
  ### runInWeb
1732
1699
 
1733
1700
  Placeholder for ~ locator only test case write once run on both Appium and WebDriver.
@@ -1784,7 +1751,7 @@ I.saveScreenshot('debug.png', true) //resizes to available scrollHeight and scro
1784
1751
  #### Parameters
1785
1752
 
1786
1753
  * `fileName` **[string][18]** file name to save.
1787
- * `fullPage` **[boolean][33]** (optional, `false` by default) flag to enable fullscreen screenshot mode.
1754
+ * `fullPage` **[boolean][34]** (optional, `false` by default) flag to enable fullscreen screenshot mode.
1788
1755
 
1789
1756
  Returns **void** automatically synchronized promise through #recorder
1790
1757
 
@@ -1801,7 +1768,7 @@ I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "cent
1801
1768
  #### Parameters
1802
1769
 
1803
1770
  * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1804
- * `scrollIntoViewOptions` **(ScrollIntoViewOptions | [boolean][33])** either alignToTop=true|false or scrollIntoViewOptions. See [https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView][34].
1771
+ * `scrollIntoViewOptions` **(ScrollIntoViewOptions | [boolean][34])** either alignToTop=true|false or scrollIntoViewOptions. See [https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView][35].
1805
1772
 
1806
1773
  Returns **void** automatically synchronized promise through #recorder
1807
1774
 
@@ -1838,8 +1805,8 @@ I.scrollTo('#submit', 5, 5);
1838
1805
  #### Parameters
1839
1806
 
1840
1807
  * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1841
- * `offsetX` **[number][22]** (optional, `0` by default) X-axis offset.
1842
- * `offsetY` **[number][22]** (optional, `0` by default) Y-axis offset.
1808
+ * `offsetX` **[number][23]** (optional, `0` by default) X-axis offset.
1809
+ * `offsetY` **[number][23]** (optional, `0` by default) Y-axis offset.
1843
1810
 
1844
1811
  Returns **void** automatically synchronized promise through #recorder
1845
1812
 
@@ -1861,10 +1828,6 @@ I.see('Register', {css: 'form.register'}); // use strict locator
1861
1828
 
1862
1829
  Returns **void** automatically synchronized promise through #recorder
1863
1830
 
1864
-
1865
- This action supports [React locators](https://codecept.io/react#locators)
1866
-
1867
-
1868
1831
  ### seeAttributesOnElements
1869
1832
 
1870
1833
  Checks that all elements with given locator have given attributes.
@@ -1969,8 +1932,12 @@ The second parameter is a context (CSS or XPath locator) to narrow the search.
1969
1932
  ```js
1970
1933
  I.seeElement('#modal');
1971
1934
  I.seeElement('#modal', '#container');
1935
+ // using ARIA role locator
1936
+ I.seeElement({role: 'dialog'});
1972
1937
  ```
1973
1938
 
1939
+ > ℹ️ ARIA role locators (`{role, name}`) match elements the way assistive technology does and survive markup refactors. See [Locators][22].
1940
+
1974
1941
  #### Parameters
1975
1942
 
1976
1943
  * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
@@ -1978,10 +1945,6 @@ I.seeElement('#modal', '#container');
1978
1945
 
1979
1946
  Returns **void** automatically synchronized promise through #recorder
1980
1947
 
1981
-
1982
- This action supports [React locators](https://codecept.io/react#locators)
1983
-
1984
-
1985
1948
  ### seeElementInDOM
1986
1949
 
1987
1950
  Checks that a given Element is present in the DOM
@@ -2084,14 +2047,10 @@ I.seeNumberOfElements('#submitBtn', 1);
2084
2047
  #### Parameters
2085
2048
 
2086
2049
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2087
- * `num` **[number][22]** number of elements.
2050
+ * `num` **[number][23]** number of elements.
2088
2051
 
2089
2052
  Returns **void** automatically synchronized promise through #recorder
2090
2053
 
2091
-
2092
- This action supports [React locators](https://codecept.io/react#locators)
2093
-
2094
-
2095
2054
  ### seeNumberOfVisibleElements
2096
2055
 
2097
2056
  Asserts that an element is visible a given number of times.
@@ -2104,14 +2063,10 @@ I.seeNumberOfVisibleElements('.buttons', 3);
2104
2063
  #### Parameters
2105
2064
 
2106
2065
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2107
- * `num` **[number][22]** number of elements.
2066
+ * `num` **[number][23]** number of elements.
2108
2067
 
2109
2068
  Returns **void** automatically synchronized promise through #recorder
2110
2069
 
2111
-
2112
- This action supports [React locators](https://codecept.io/react#locators)
2113
-
2114
-
2115
2070
  ### seeTextEquals
2116
2071
 
2117
2072
  Checks that text is equal to provided one.
@@ -2169,14 +2124,14 @@ I.selectOption('Which OS do you use?', ['Android', 'iOS']);
2169
2124
  #### Parameters
2170
2125
 
2171
2126
  * `select` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
2172
- * `option` **([string][18] | [Array][29]<any>)** visible text or value of option.
2127
+ * `option` **([string][18] | [Array][30]<any>)** visible text or value of option.
2173
2128
  * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
2174
2129
 
2175
2130
  Returns **void** automatically synchronized promise through #recorder
2176
2131
 
2177
2132
  ### setCookie
2178
2133
 
2179
- Uses Selenium's JSON [cookie format][35].
2134
+ Uses Selenium's JSON [cookie format][36].
2180
2135
  Sets cookie(s).
2181
2136
 
2182
2137
  Can be a single cookie object or an array of cookies:
@@ -2193,7 +2148,7 @@ I.setCookie([
2193
2148
 
2194
2149
  #### Parameters
2195
2150
 
2196
- * `cookie` **(Cookie | [Array][29]<Cookie>)** a cookie object or array of cookie objects.
2151
+ * `cookie` **(Cookie | [Array][30]<Cookie>)** a cookie object or array of cookie objects.
2197
2152
 
2198
2153
  Returns **void** automatically synchronized promise through #recorder
2199
2154
 
@@ -2223,8 +2178,8 @@ I.switchToNextTab(2);
2223
2178
 
2224
2179
  #### Parameters
2225
2180
 
2226
- * `num` **[number][22]?** (optional) number of tabs to switch forward, default: 1.
2227
- * `sec` **([number][22] | null)?** (optional) time in seconds to wait.
2181
+ * `num` **[number][23]?** (optional) number of tabs to switch forward, default: 1.
2182
+ * `sec` **([number][23] | null)?** (optional) time in seconds to wait.
2228
2183
 
2229
2184
  Returns **void** automatically synchronized promise through #recorder
2230
2185
 
@@ -2239,8 +2194,8 @@ I.switchToPreviousTab(2);
2239
2194
 
2240
2195
  #### Parameters
2241
2196
 
2242
- * `num` **[number][22]?** (optional) number of tabs to switch backward, default: 1.
2243
- * `sec` **[number][22]??** (optional) time in seconds to wait.
2197
+ * `num` **[number][23]?** (optional) number of tabs to switch backward, default: 1.
2198
+ * `sec` **[number][23]??** (optional) time in seconds to wait.
2244
2199
 
2245
2200
  Returns **void** automatically synchronized promise through #recorder
2246
2201
 
@@ -2266,7 +2221,7 @@ await I.switchToWindow( window );
2266
2221
 
2267
2222
  Types out the given text into an active field.
2268
2223
  To slow down typing use a second parameter, to set interval between key presses.
2269
- *Note:* Should be used when [`fillField`][31] is not an option.
2224
+ *Note:* Should be used when [`fillField`][32] is not an option.
2270
2225
 
2271
2226
  ```js
2272
2227
  // passing in a string
@@ -2285,8 +2240,8 @@ I.type(secret('123456'));
2285
2240
  #### Parameters
2286
2241
 
2287
2242
  * `keys` &#x20;
2288
- * `delay` **[number][22]?** (optional) delay in ms between key presses
2289
- * `key` **([string][18] | [Array][29]<[string][18]>)** or array of keys to type.
2243
+ * `delay` **[number][23]?** (optional) delay in ms between key presses
2244
+ * `key` **([string][18] | [Array][30]<[string][18]>)** or array of keys to type.
2290
2245
 
2291
2246
  Returns **void** automatically synchronized promise through #recorder
2292
2247
 
@@ -2313,12 +2268,12 @@ Returns **void** automatically synchronized promise through #recorder
2313
2268
 
2314
2269
  ### useWebDriverTo
2315
2270
 
2316
- Use [webdriverio][36] API inside a test.
2271
+ Use [webdriverio][37] API inside a test.
2317
2272
 
2318
2273
  First argument is a description of an action.
2319
2274
  Second argument is async function that gets this helper as parameter.
2320
2275
 
2321
- { [`browser`][36]) } object from WebDriver API is available.
2276
+ { [`browser`][37]) } object from WebDriver API is available.
2322
2277
 
2323
2278
  ```js
2324
2279
  I.useWebDriverTo('open multiple windows', async ({ browser }) {
@@ -2330,7 +2285,7 @@ I.useWebDriverTo('open multiple windows', async ({ browser }) {
2330
2285
  #### Parameters
2331
2286
 
2332
2287
  * `description` **[string][18]** used to show in logs.
2333
- * `fn` **[function][26]** async functuion that executed with WebDriver helper as argument
2288
+ * `fn` **[function][27]** async functuion that executed with WebDriver helper as argument
2334
2289
 
2335
2290
  ### wait
2336
2291
 
@@ -2342,7 +2297,7 @@ I.wait(2); // wait 2 secs
2342
2297
 
2343
2298
  #### Parameters
2344
2299
 
2345
- * `sec` **[number][22]** number of second to wait.
2300
+ * `sec` **[number][23]** number of second to wait.
2346
2301
 
2347
2302
  Returns **void** automatically synchronized promise through #recorder
2348
2303
 
@@ -2369,7 +2324,7 @@ I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2369
2324
 
2370
2325
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2371
2326
  * `waitTimeout` &#x20;
2372
- * `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2327
+ * `sec` **[number][23]?** (optional, `1` by default) time in seconds to wait
2373
2328
 
2374
2329
  Returns **void** automatically synchronized promise through #recorder
2375
2330
 
@@ -2384,7 +2339,7 @@ I.waitForCookie("token");
2384
2339
  #### Parameters
2385
2340
 
2386
2341
  * `name` **[string][18]** expected cookie name.
2387
- * `sec` **[number][22]** (optional, `3` by default) time in seconds to wait
2342
+ * `sec` **[number][23]** (optional, `3` by default) time in seconds to wait
2388
2343
 
2389
2344
  Returns **void** automatically synchronized promise through #recorder
2390
2345
 
@@ -2400,7 +2355,7 @@ I.waitForDetached('#popup');
2400
2355
  #### Parameters
2401
2356
 
2402
2357
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2403
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2358
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2404
2359
 
2405
2360
  Returns **void** automatically synchronized promise through #recorder
2406
2361
 
@@ -2417,7 +2372,7 @@ I.waitForElement('.btn.continue', 5); // wait for 5 secs
2417
2372
  #### Parameters
2418
2373
 
2419
2374
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2420
- * `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2375
+ * `sec` **[number][23]?** (optional, `1` by default) time in seconds to wait
2421
2376
 
2422
2377
  Returns **void** automatically synchronized promise through #recorder
2423
2378
 
@@ -2429,7 +2384,7 @@ Element can be located by CSS or XPath.
2429
2384
  #### Parameters
2430
2385
 
2431
2386
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2432
- * `sec` **[number][22]** (optional) time in seconds to wait, 1 by default.
2387
+ * `sec` **[number][23]** (optional) time in seconds to wait, 1 by default.
2433
2388
 
2434
2389
  Returns **void** automatically synchronized promise through #recorder
2435
2390
 
@@ -2450,9 +2405,9 @@ I.waitForFunction((count) => window.requests == count, [3], 5) // pass args and
2450
2405
 
2451
2406
  #### Parameters
2452
2407
 
2453
- * `fn` **([string][18] | [function][26])** to be executed in browser context.
2454
- * `argsOrSec` **([Array][29]<any> | [number][22])?** (optional, `1` by default) arguments for function or seconds.
2455
- * `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2408
+ * `fn` **([string][18] | [function][27])** to be executed in browser context.
2409
+ * `argsOrSec` **([Array][30]<any> | [number][23])?** (optional, `1` by default) arguments for function or seconds.
2410
+ * `sec` **[number][23]?** (optional, `1` by default) time in seconds to wait
2456
2411
 
2457
2412
  Returns **void** automatically synchronized promise through #recorder
2458
2413
 
@@ -2468,7 +2423,7 @@ I.waitForInvisible('#popup');
2468
2423
  #### Parameters
2469
2424
 
2470
2425
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2471
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2426
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2472
2427
 
2473
2428
  Returns **void** automatically synchronized promise through #recorder
2474
2429
 
@@ -2482,8 +2437,8 @@ I.waitForNumberOfTabs(2);
2482
2437
 
2483
2438
  #### Parameters
2484
2439
 
2485
- * `expectedTabs` **[number][22]** expecting the number of tabs.
2486
- * `sec` **[number][22]** number of secs to wait.
2440
+ * `expectedTabs` **[number][23]** expecting the number of tabs.
2441
+ * `sec` **[number][23]** number of secs to wait.
2487
2442
 
2488
2443
  Returns **void** automatically synchronized promise through #recorder
2489
2444
 
@@ -2501,7 +2456,7 @@ I.waitForText('Thank you, form has been submitted', 5, '#modal');
2501
2456
  #### Parameters
2502
2457
 
2503
2458
  * `text` **[string][18]** to wait for.
2504
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2459
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2505
2460
  * `context` **([string][18] | [object][17])?** (optional) element located by CSS|XPath|strict locator.
2506
2461
 
2507
2462
  Returns **void** automatically synchronized promise through #recorder
@@ -2518,7 +2473,7 @@ I.waitForValue('//input', "GoodValue");
2518
2473
 
2519
2474
  * `field` **([string][18] | [object][17])** input field.
2520
2475
  * `value` **[string][18]** expected value.
2521
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2476
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2522
2477
 
2523
2478
  Returns **void** automatically synchronized promise through #recorder
2524
2479
 
@@ -2534,7 +2489,7 @@ I.waitForVisible('#popup');
2534
2489
  #### Parameters
2535
2490
 
2536
2491
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2537
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2492
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2538
2493
 
2539
2494
  Returns **void** automatically synchronized promise through #recorder
2540
2495
 
@@ -2549,7 +2504,7 @@ I.waitInUrl('/info', 2);
2549
2504
  #### Parameters
2550
2505
 
2551
2506
  * `urlPart` **[string][18]** value to check.
2552
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2507
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2553
2508
 
2554
2509
  Returns **void** automatically synchronized promise through #recorder
2555
2510
 
@@ -2564,8 +2519,8 @@ I.waitNumberOfVisibleElements('a', 3);
2564
2519
  #### Parameters
2565
2520
 
2566
2521
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2567
- * `num` **[number][22]** number of elements.
2568
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2522
+ * `num` **[number][23]** number of elements.
2523
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2569
2524
 
2570
2525
  Returns **void** automatically synchronized promise through #recorder
2571
2526
 
@@ -2581,7 +2536,7 @@ I.waitToHide('#popup');
2581
2536
  #### Parameters
2582
2537
 
2583
2538
  * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2584
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2539
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2585
2540
 
2586
2541
  Returns **void** automatically synchronized promise through #recorder
2587
2542
 
@@ -2597,15 +2552,15 @@ I.waitUrlEquals('http://127.0.0.1:8000/info');
2597
2552
  #### Parameters
2598
2553
 
2599
2554
  * `urlPart` **[string][18]** value to check.
2600
- * `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2555
+ * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2601
2556
 
2602
2557
  Returns **void** automatically synchronized promise through #recorder
2603
2558
 
2604
2559
  [1]: http://webdriver.io/
2605
2560
 
2606
- [2]: https://codecept.io/webdriver/#testing-with-webdriver
2561
+ [2]: https://webdriver.io/blog/2023/07/31/driver-management/
2607
2562
 
2608
- [3]: https://webdriver.io/blog/2023/07/31/driver-management/
2563
+ [3]: https://codecept.io/webdriver/#testing-with-webdriver
2609
2564
 
2610
2565
  [4]: http://webdriver.io/guide/getstarted/configuration.html
2611
2566
 
@@ -2643,40 +2598,42 @@ Returns **void** automatically synchronized promise through #recorder
2643
2598
 
2644
2599
  [21]: https://playwright.dev/docs/api/class-locator#locator-blur
2645
2600
 
2646
- [22]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
2601
+ [22]: /locators#aria-locators
2602
+
2603
+ [23]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
2647
2604
 
2648
- [23]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
2605
+ [24]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
2649
2606
 
2650
- [24]: https://webdriver.io/docs/timeouts.html
2607
+ [25]: https://webdriver.io/docs/timeouts.html
2651
2608
 
2652
- [25]: https://vuejs.org/v2/api/#Vue-nextTick
2609
+ [26]: https://vuejs.org/v2/api/#Vue-nextTick
2653
2610
 
2654
- [26]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
2611
+ [27]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
2655
2612
 
2656
- [27]: http://webdriver.io/api/protocol/execute.html
2613
+ [28]: http://webdriver.io/api/protocol/execute.html
2657
2614
 
2658
- [28]: https://playwright.dev/docs/api/class-locator#locator-focus
2615
+ [29]: https://playwright.dev/docs/api/class-locator#locator-focus
2659
2616
 
2660
- [29]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
2617
+ [30]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
2661
2618
 
2662
- [30]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
2619
+ [31]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
2663
2620
 
2664
- [31]: #fillfield
2621
+ [32]: #fillfield
2665
2622
 
2666
- [32]: #click
2623
+ [33]: #click
2667
2624
 
2668
- [33]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
2625
+ [34]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
2669
2626
 
2670
- [34]: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
2627
+ [35]: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
2671
2628
 
2672
- [35]: https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
2629
+ [36]: https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
2673
2630
 
2674
- [36]: https://webdriver.io/docs/api.html
2631
+ [37]: https://webdriver.io/docs/api.html
2675
2632
 
2676
- [37]: https://webdriver.io/docs/api/webdriverBidi/
2633
+ [38]: https://webdriver.io/docs/api/webdriverBidi/
2677
2634
 
2678
- [38]: http://codecept.io/acceptance/#smartwait
2635
+ [39]: http://codecept.io/acceptance/#smartwait
2679
2636
 
2680
- [39]: http://webdriver.io/docs/timeouts.html
2637
+ [40]: http://webdriver.io/docs/timeouts.html
2681
2638
 
2682
- [40]: https://webdriver.io/docs/configuration/#loglevel
2639
+ [41]: https://webdriver.io/docs/configuration/#loglevel