codeceptjs 3.1.0 → 3.2.0

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 (71) hide show
  1. package/CHANGELOG.md +129 -3
  2. package/README.md +2 -3
  3. package/bin/codecept.js +1 -0
  4. package/docs/advanced.md +94 -60
  5. package/docs/basics.md +1 -1
  6. package/docs/bdd.md +55 -1
  7. package/docs/build/Appium.js +106 -34
  8. package/docs/build/FileSystem.js +1 -0
  9. package/docs/build/Nightmare.js +48 -48
  10. package/docs/build/Playwright.js +97 -94
  11. package/docs/build/Protractor.js +68 -81
  12. package/docs/build/Puppeteer.js +91 -93
  13. package/docs/build/REST.js +1 -0
  14. package/docs/build/TestCafe.js +44 -44
  15. package/docs/build/WebDriver.js +71 -95
  16. package/docs/changelog.md +144 -2
  17. package/docs/commands.md +21 -7
  18. package/docs/configuration.md +15 -2
  19. package/docs/custom-helpers.md +1 -36
  20. package/docs/helpers/Appium.md +97 -95
  21. package/docs/helpers/FileSystem.md +1 -1
  22. package/docs/helpers/Playwright.md +16 -18
  23. package/docs/helpers/Puppeteer.md +18 -18
  24. package/docs/helpers/REST.md +3 -1
  25. package/docs/helpers/WebDriver.md +3 -19
  26. package/docs/mobile-react-native-locators.md +3 -0
  27. package/docs/playwright.md +40 -0
  28. package/docs/plugins.md +185 -68
  29. package/docs/reports.md +23 -5
  30. package/lib/actor.js +20 -2
  31. package/lib/codecept.js +15 -2
  32. package/lib/command/info.js +1 -1
  33. package/lib/config.js +13 -1
  34. package/lib/container.js +3 -1
  35. package/lib/data/dataTableArgument.js +35 -0
  36. package/lib/helper/Appium.js +49 -4
  37. package/lib/helper/FileSystem.js +1 -0
  38. package/lib/helper/Playwright.js +35 -22
  39. package/lib/helper/Protractor.js +2 -14
  40. package/lib/helper/Puppeteer.js +20 -19
  41. package/lib/helper/REST.js +1 -0
  42. package/lib/helper/WebDriver.js +2 -16
  43. package/lib/index.js +2 -0
  44. package/lib/interfaces/featureConfig.js +3 -0
  45. package/lib/interfaces/gherkin.js +7 -1
  46. package/lib/interfaces/scenarioConfig.js +4 -0
  47. package/lib/listener/helpers.js +1 -0
  48. package/lib/listener/steps.js +21 -3
  49. package/lib/listener/timeout.js +71 -0
  50. package/lib/locator.js +3 -0
  51. package/lib/mochaFactory.js +13 -9
  52. package/lib/plugin/allure.js +6 -1
  53. package/lib/plugin/{puppeteerCoverage.js → coverage.js} +10 -22
  54. package/lib/plugin/customLocator.js +2 -2
  55. package/lib/plugin/retryTo.js +130 -0
  56. package/lib/plugin/screenshotOnFail.js +1 -0
  57. package/lib/plugin/stepByStepReport.js +7 -0
  58. package/lib/plugin/stepTimeout.js +90 -0
  59. package/lib/plugin/subtitles.js +88 -0
  60. package/lib/plugin/tryTo.js +1 -1
  61. package/lib/recorder.js +21 -8
  62. package/lib/step.js +7 -2
  63. package/lib/store.js +2 -0
  64. package/lib/ui.js +2 -2
  65. package/package.json +6 -7
  66. package/typings/index.d.ts +8 -1
  67. package/typings/types.d.ts +198 -82
  68. package/docs/angular.md +0 -325
  69. package/docs/helpers/Protractor.md +0 -1658
  70. package/docs/webapi/waitUntil.mustache +0 -11
  71. package/typings/Protractor.d.ts +0 -16
@@ -481,7 +481,7 @@ class WebDriver extends Helper {
481
481
  try {
482
482
  require('webdriverio');
483
483
  } catch (e) {
484
- return ['webdriverio@^5.2.2'];
484
+ return ['webdriverio@^6.12.1'];
485
485
  }
486
486
  }
487
487
 
@@ -772,7 +772,7 @@ class WebDriver extends Helper {
772
772
  * ```
773
773
  *
774
774
  *
775
- * @param {string | object} locator element located by CSS|XPath|strict locator.
775
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
776
776
  */
777
777
  async _locate(locator, smartWait = false) {
778
778
  if (require('../store').debugMode) smartWait = false;
@@ -831,7 +831,7 @@ class WebDriver extends Helper {
831
831
  * this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').then // ...
832
832
  * ```
833
833
  *
834
- * @param {string | object} locator element located by CSS|XPath|strict locator.
834
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
835
835
  */
836
836
  async _locateCheckable(locator) {
837
837
  return findCheckable.call(this, locator, this.$$.bind(this)).then(res => res);
@@ -845,7 +845,7 @@ class WebDriver extends Helper {
845
845
  * const els = await this.helpers.WebDriver._locateClickable('Next page', '.pages');
846
846
  * ```
847
847
  *
848
- * @param {string | object} locator element located by CSS|XPath|strict locator.
848
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
849
849
  */
850
850
  async _locateClickable(locator, context) {
851
851
  const locateFn = prepareLocateFn.call(this, context);
@@ -859,7 +859,7 @@ class WebDriver extends Helper {
859
859
  * this.helpers['WebDriver']._locateFields('Your email').then // ...
860
860
  * ```
861
861
  *
862
- * @param {string | object} locator element located by CSS|XPath|strict locator.
862
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
863
863
  */
864
864
  async _locateFields(locator) {
865
865
  return findFields.call(this, locator).then(res => res);
@@ -875,7 +875,7 @@ class WebDriver extends Helper {
875
875
  * I.defineTimeout({ implicit: 10000, pageLoad: 10000, script: 5000 });
876
876
  * ```
877
877
  *
878
- * @param {WebdriverIO.Timeouts} timeouts WebDriver timeouts object.
878
+ * @param {*} timeouts WebDriver timeouts object.
879
879
  */
880
880
  defineTimeout(timeouts) {
881
881
  return this._defineBrowserTimeout(this.browser, timeouts);
@@ -933,8 +933,8 @@ class WebDriver extends Helper {
933
933
  * I.click({css: 'nav a.login'});
934
934
  * ```
935
935
  *
936
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
937
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
936
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
937
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
938
938
  *
939
939
  *
940
940
  * {{ react }}
@@ -979,8 +979,8 @@ class WebDriver extends Helper {
979
979
  * I.forceClick({css: 'nav a.login'});
980
980
  * ```
981
981
  *
982
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
983
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
982
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
983
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
984
984
  *
985
985
  *
986
986
  * {{ react }}
@@ -1017,8 +1017,8 @@ class WebDriver extends Helper {
1017
1017
  * I.doubleClick('.btn.edit');
1018
1018
  * ```
1019
1019
  *
1020
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1021
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1020
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1021
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1022
1022
  *
1023
1023
  *
1024
1024
  * {{ react }}
@@ -1049,8 +1049,8 @@ class WebDriver extends Helper {
1049
1049
  * I.rightClick('Click me', '.context');
1050
1050
  * ```
1051
1051
  *
1052
- * @param {string | object} locator clickable element located by CSS|XPath|strict locator.
1053
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1052
+ * @param {CodeceptJS.LocatorOrString} locator clickable element located by CSS|XPath|strict locator.
1053
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1054
1054
  *
1055
1055
  *
1056
1056
  * {{ react }}
@@ -1092,8 +1092,8 @@ class WebDriver extends Helper {
1092
1092
  * I.forceRightClick('Menu');
1093
1093
  * ```
1094
1094
  *
1095
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1096
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1095
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1096
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1097
1097
  *
1098
1098
  *
1099
1099
  * {{ react }}
@@ -1133,8 +1133,8 @@ class WebDriver extends Helper {
1133
1133
  * // or by strict locator
1134
1134
  * I.fillField({css: 'form#login input[name=username]'}, 'John');
1135
1135
  * ```
1136
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1137
- * @param {string | object} value text value to fill.
1136
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1137
+ * @param {CodeceptJS.StringOrSecret} value text value to fill.
1138
1138
  *
1139
1139
  * {{ react }}
1140
1140
  * {{ custom }}
@@ -1154,7 +1154,7 @@ class WebDriver extends Helper {
1154
1154
  * ```js
1155
1155
  * I.appendField('#myTextField', 'appended');
1156
1156
  * ```
1157
- * @param {string | object} field located by label|name|CSS|XPath|strict locator
1157
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator
1158
1158
  * @param {string} value text value to append.
1159
1159
  * {{ react }}
1160
1160
  */
@@ -1173,7 +1173,7 @@ class WebDriver extends Helper {
1173
1173
  * I.clearField('user[email]');
1174
1174
  * I.clearField('#email');
1175
1175
  * ```
1176
- * @param {string | object} editable field located by label|name|CSS|XPath|strict locator.
1176
+ * @param {LocatorOrString} editable field located by label|name|CSS|XPath|strict locator.
1177
1177
  *
1178
1178
  *
1179
1179
  */
@@ -1203,7 +1203,7 @@ class WebDriver extends Helper {
1203
1203
  * ```js
1204
1204
  * I.selectOption('Which OS do you use?', ['Android', 'iOS']);
1205
1205
  * ```
1206
- * @param {string | object} select field located by label|name|CSS|XPath|strict locator.
1206
+ * @param {LocatorOrString} select field located by label|name|CSS|XPath|strict locator.
1207
1207
  * @param {string|Array<*>} option visible text or value of option.
1208
1208
  *
1209
1209
  */
@@ -1246,7 +1246,7 @@ class WebDriver extends Helper {
1246
1246
  * I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
1247
1247
  * ```
1248
1248
  *
1249
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1249
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1250
1250
  * @param {string} pathToFile local file path relative to codecept.json config file.
1251
1251
  * Appium: not tested
1252
1252
  */
@@ -1285,8 +1285,8 @@ class WebDriver extends Helper {
1285
1285
  * I.checkOption('I Agree to Terms and Conditions');
1286
1286
  * I.checkOption('agree', '//form');
1287
1287
  * ```
1288
- * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1289
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1288
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1289
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1290
1290
  * Appium: not tested
1291
1291
  */
1292
1292
  async checkOption(field, context = null) {
@@ -1315,8 +1315,8 @@ class WebDriver extends Helper {
1315
1315
  * I.uncheckOption('I Agree to Terms and Conditions');
1316
1316
  * I.uncheckOption('agree', '//form');
1317
1317
  * ```
1318
- * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1319
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1318
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1319
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1320
1320
  * Appium: not tested
1321
1321
  */
1322
1322
  async uncheckOption(field, context = null) {
@@ -1342,7 +1342,7 @@ class WebDriver extends Helper {
1342
1342
  * let pins = await I.grabTextFromAll('#pin li');
1343
1343
  * ```
1344
1344
  *
1345
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1345
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1346
1346
  * @returns {Promise<string[]>} attribute value
1347
1347
  *
1348
1348
  *
@@ -1363,7 +1363,7 @@ class WebDriver extends Helper {
1363
1363
  * ```
1364
1364
  * If multiple elements found returns first element.
1365
1365
  *
1366
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1366
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1367
1367
  * @returns {Promise<string>} attribute value
1368
1368
  *
1369
1369
  *
@@ -1386,7 +1386,7 @@ class WebDriver extends Helper {
1386
1386
  * let postHTMLs = await I.grabHTMLFromAll('.post');
1387
1387
  * ```
1388
1388
  *
1389
- * @param {string | object} element located by CSS|XPath|strict locator.
1389
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
1390
1390
  * @returns {Promise<string[]>} HTML code for an element
1391
1391
  *
1392
1392
  *
@@ -1407,7 +1407,7 @@ class WebDriver extends Helper {
1407
1407
  * let postHTML = await I.grabHTMLFrom('#post');
1408
1408
  * ```
1409
1409
  *
1410
- * @param {string | object} element located by CSS|XPath|strict locator.
1410
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
1411
1411
  * @returns {Promise<string>} HTML code for an element
1412
1412
  *
1413
1413
  *
@@ -1429,7 +1429,7 @@ class WebDriver extends Helper {
1429
1429
  * ```js
1430
1430
  * let inputs = await I.grabValueFromAll('//form/input');
1431
1431
  * ```
1432
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1432
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1433
1433
  * @returns {Promise<string[]>} attribute value
1434
1434
  *
1435
1435
  *
@@ -1450,7 +1450,7 @@ class WebDriver extends Helper {
1450
1450
  * ```js
1451
1451
  * let email = await I.grabValueFrom('input[name=email]');
1452
1452
  * ```
1453
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1453
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1454
1454
  * @returns {Promise<string>} attribute value
1455
1455
  *
1456
1456
  *
@@ -1473,7 +1473,7 @@ class WebDriver extends Helper {
1473
1473
  * const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
1474
1474
  * ```
1475
1475
  *
1476
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1476
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1477
1477
  * @param {string} cssProperty CSS property name.
1478
1478
  * @returns {Promise<string[]>} CSS value
1479
1479
  *
@@ -1494,7 +1494,7 @@ class WebDriver extends Helper {
1494
1494
  * const value = await I.grabCssPropertyFrom('h3', 'font-weight');
1495
1495
  * ```
1496
1496
  *
1497
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1497
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1498
1498
  * @param {string} cssProperty CSS property name.
1499
1499
  * @returns {Promise<string>} CSS value
1500
1500
  *
@@ -1517,11 +1517,10 @@ class WebDriver extends Helper {
1517
1517
  * ```js
1518
1518
  * let hints = await I.grabAttributeFromAll('.tooltip', 'title');
1519
1519
  * ```
1520
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1520
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1521
1521
  * @param {string} attr attribute name.
1522
1522
  * @returns {Promise<string[]>} attribute value
1523
1523
  *
1524
- * Appium: can be used for apps only with several values ("contentDescription", "text", "className", "resourceId")
1525
1524
  */
1526
1525
  async grabAttributeFromAll(locator, attr) {
1527
1526
  const res = await this._locate(locator, true);
@@ -1538,11 +1537,10 @@ class WebDriver extends Helper {
1538
1537
  * ```js
1539
1538
  * let hint = await I.grabAttributeFrom('#tooltip', 'title');
1540
1539
  * ```
1541
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1540
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1542
1541
  * @param {string} attr attribute name.
1543
1542
  * @returns {Promise<string>} attribute value
1544
1543
  *
1545
- * Appium: can be used for apps only with several values ("contentDescription", "text", "className", "resourceId")
1546
1544
  */
1547
1545
  async grabAttributeFrom(locator, attr) {
1548
1546
  const attrs = await this.grabAttributeFromAll(locator, attr);
@@ -1622,7 +1620,7 @@ class WebDriver extends Helper {
1622
1620
  * I.see('Register', {css: 'form.register'}); // use strict locator
1623
1621
  * ```
1624
1622
  * @param {string} text expected on page.
1625
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1623
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1626
1624
  *
1627
1625
  * {{ react }}
1628
1626
  */
@@ -1638,7 +1636,7 @@ class WebDriver extends Helper {
1638
1636
  * ```
1639
1637
  *
1640
1638
  * @param {string} text element value to check.
1641
- * @param {(string | object)?} [context=null] element located by CSS|XPath|strict locator.
1639
+ * @param {CodeceptJS.LocatorOrString?} [context=null] element located by CSS|XPath|strict locator.
1642
1640
  */
1643
1641
  async seeTextEquals(text, context = null) {
1644
1642
  return proceedSee.call(this, 'assert', text, context, true);
@@ -1654,7 +1652,7 @@ class WebDriver extends Helper {
1654
1652
  * ```
1655
1653
  *
1656
1654
  * @param {string} text which is not present.
1657
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
1655
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
1658
1656
  *
1659
1657
  *
1660
1658
  * {{ react }}
@@ -1673,7 +1671,7 @@ class WebDriver extends Helper {
1673
1671
  * I.seeInField('form input[type=hidden]','hidden_value');
1674
1672
  * I.seeInField('#searchform input','Search');
1675
1673
  * ```
1676
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1674
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1677
1675
  * @param {string} value value to check.
1678
1676
  *
1679
1677
  *
@@ -1691,7 +1689,7 @@ class WebDriver extends Helper {
1691
1689
  * I.dontSeeInField({ css: 'form input.email' }, 'user@user.com'); // field by CSS
1692
1690
  * ```
1693
1691
  *
1694
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1692
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1695
1693
  * @param {string} value value to check.
1696
1694
  *
1697
1695
  */
@@ -1708,7 +1706,7 @@ class WebDriver extends Helper {
1708
1706
  * I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
1709
1707
  * ```
1710
1708
  *
1711
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1709
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1712
1710
  *
1713
1711
  * Appium: not tested
1714
1712
  */
@@ -1725,7 +1723,7 @@ class WebDriver extends Helper {
1725
1723
  * I.dontSeeCheckboxIsChecked('agree'); // located by name
1726
1724
  * ```
1727
1725
  *
1728
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1726
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1729
1727
  *
1730
1728
  * Appium: not tested
1731
1729
  */
@@ -1740,7 +1738,7 @@ class WebDriver extends Helper {
1740
1738
  * ```js
1741
1739
  * I.seeElement('#modal');
1742
1740
  * ```
1743
- * @param {string | object} locator located by CSS|XPath|strict locator.
1741
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1744
1742
  * {{ react }}
1745
1743
  *
1746
1744
  */
@@ -1758,7 +1756,7 @@ class WebDriver extends Helper {
1758
1756
  * I.dontSeeElement('.modal'); // modal is not shown
1759
1757
  * ```
1760
1758
  *
1761
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1759
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1762
1760
  * {{ react }}
1763
1761
  */
1764
1762
  async dontSeeElement(locator) {
@@ -1777,7 +1775,7 @@ class WebDriver extends Helper {
1777
1775
  * ```js
1778
1776
  * I.seeElementInDOM('#modal');
1779
1777
  * ```
1780
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1778
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1781
1779
  *
1782
1780
  *
1783
1781
  */
@@ -1793,7 +1791,7 @@ class WebDriver extends Helper {
1793
1791
  * I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or not
1794
1792
  * ```
1795
1793
  *
1796
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1794
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1797
1795
  *
1798
1796
  */
1799
1797
  async dontSeeElementInDOM(locator) {
@@ -1891,7 +1889,7 @@ class WebDriver extends Helper {
1891
1889
  * I.seeNumberOfElements('#submitBtn', 1);
1892
1890
  * ```
1893
1891
  *
1894
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1892
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1895
1893
  * @param {number} num number of elements.
1896
1894
  *
1897
1895
  * {{ react }}
@@ -1909,7 +1907,7 @@ class WebDriver extends Helper {
1909
1907
  * I.seeNumberOfVisibleElements('.buttons', 3);
1910
1908
  * ```
1911
1909
  *
1912
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1910
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1913
1911
  * @param {number} num number of elements.
1914
1912
  *
1915
1913
  * {{ react }}
@@ -1926,7 +1924,7 @@ class WebDriver extends Helper {
1926
1924
  * I.seeCssPropertiesOnElements('h3', { 'font-weight': "bold"});
1927
1925
  * ```
1928
1926
  *
1929
- * @param {string | object} locator located by CSS|XPath|strict locator.
1927
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1930
1928
  * @param {object} cssProperties object with CSS properties and their values to check.
1931
1929
  */
1932
1930
  async seeCssPropertiesOnElements(locator, cssProperties) {
@@ -1968,7 +1966,7 @@ class WebDriver extends Helper {
1968
1966
  * I.seeAttributesOnElements('//form', { method: "post"});
1969
1967
  * ```
1970
1968
  *
1971
- * @param {string | object} locator located by CSS|XPath|strict locator.
1969
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1972
1970
  * @param {object} attributes attributes and their values to check.
1973
1971
  */
1974
1972
  async seeAttributesOnElements(locator, attributes) {
@@ -2003,7 +2001,7 @@ class WebDriver extends Helper {
2003
2001
  * let numOfElements = await I.grabNumberOfVisibleElements('p');
2004
2002
  * ```
2005
2003
  *
2006
- * @param {string | object} locator located by CSS|XPath|strict locator.
2004
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2007
2005
  * @returns {Promise<number>} number of visible elements
2008
2006
  */
2009
2007
  async grabNumberOfVisibleElements(locator) {
@@ -2153,7 +2151,7 @@ class WebDriver extends Helper {
2153
2151
  * I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "center" });
2154
2152
  * ```
2155
2153
  *
2156
- * @param {string | object} locator located by CSS|XPath|strict locator.
2154
+ * @param {LocatorOrString} locator located by CSS|XPath|strict locator.
2157
2155
  * @param {ScrollIntoViewOptions} scrollIntoViewOptions see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView.
2158
2156
  *
2159
2157
  *
@@ -2174,7 +2172,7 @@ class WebDriver extends Helper {
2174
2172
  * I.scrollTo('#submit', 5, 5);
2175
2173
  * ```
2176
2174
  *
2177
- * @param {string | object} locator located by CSS|XPath|strict locator.
2175
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2178
2176
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
2179
2177
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
2180
2178
  *
@@ -2215,7 +2213,7 @@ class WebDriver extends Helper {
2215
2213
  * I.moveCursorTo('#submit', 5,5);
2216
2214
  * ```
2217
2215
  *
2218
- * @param {string | object} locator located by CSS|XPath|strict locator.
2216
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2219
2217
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
2220
2218
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
2221
2219
  *
@@ -2236,7 +2234,7 @@ class WebDriver extends Helper {
2236
2234
  * I.saveElementScreenshot(`#submit`,'debug.png');
2237
2235
  * ```
2238
2236
  *
2239
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2237
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2240
2238
  * @param {string} fileName file name to save.
2241
2239
  *
2242
2240
  *
@@ -2683,8 +2681,8 @@ class WebDriver extends Helper {
2683
2681
  * I.dragAndDrop('#dragHandle', '#container');
2684
2682
  * ```
2685
2683
  *
2686
- * @param {string | object} srcElement located by CSS|XPath|strict locator.
2687
- * @param {string | object} destElement located by CSS|XPath|strict locator.
2684
+ * @param {LocatorOrString} srcElement located by CSS|XPath|strict locator.
2685
+ * @param {LocatorOrString} destElement located by CSS|XPath|strict locator.
2688
2686
  *
2689
2687
  * Appium: not tested
2690
2688
  */
@@ -2709,7 +2707,7 @@ class WebDriver extends Helper {
2709
2707
  * I.dragSlider('#slider', -70);
2710
2708
  * ```
2711
2709
  *
2712
- * @param {string | object} locator located by label|name|CSS|XPath|strict locator.
2710
+ * @param {CodeceptJS.LocatorOrString} locator located by label|name|CSS|XPath|strict locator.
2713
2711
  * @param {number} offsetX position to drag.
2714
2712
  */
2715
2713
  async dragSlider(locator, offsetX = 0) {
@@ -2827,7 +2825,7 @@ class WebDriver extends Helper {
2827
2825
  * Waits for element to become enabled (by default waits for 1sec).
2828
2826
  * Element can be located by CSS or XPath.
2829
2827
  *
2830
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2828
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2831
2829
  * @param {number} [sec=1] (optional) time in seconds to wait, 1 by default.
2832
2830
  */
2833
2831
  async waitForEnabled(locator, sec = null) {
@@ -2870,7 +2868,7 @@ class WebDriver extends Helper {
2870
2868
  * I.waitForElement('.btn.continue', 5); // wait for 5 secs
2871
2869
  * ```
2872
2870
  *
2873
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2871
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2874
2872
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2875
2873
  */
2876
2874
  async waitForElement(locator, sec = null) {
@@ -2896,7 +2894,7 @@ class WebDriver extends Helper {
2896
2894
  * I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2897
2895
  * ```
2898
2896
  *
2899
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2897
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2900
2898
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2901
2899
  */
2902
2900
  async waitForClickable(locator, waitTimeout) {
@@ -2996,7 +2994,7 @@ class WebDriver extends Helper {
2996
2994
  *
2997
2995
  * @param {string }text to wait for.
2998
2996
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2999
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator.
2997
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator.
3000
2998
  *
3001
2999
  */
3002
3000
  async waitForText(text, sec = null, context = null) {
@@ -3040,7 +3038,7 @@ class WebDriver extends Helper {
3040
3038
  * I.waitForValue('//input', "GoodValue");
3041
3039
  * ```
3042
3040
  *
3043
- * @param {string | object} field input field.
3041
+ * @param {LocatorOrString} field input field.
3044
3042
  * @param {string }value expected value.
3045
3043
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3046
3044
  *
@@ -3086,7 +3084,7 @@ class WebDriver extends Helper {
3086
3084
  * I.waitForVisible('#popup');
3087
3085
  * ```
3088
3086
  *
3089
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3087
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3090
3088
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3091
3089
  *
3092
3090
  *
@@ -3122,7 +3120,7 @@ class WebDriver extends Helper {
3122
3120
  * I.waitNumberOfVisibleElements('a', 3);
3123
3121
  * ```
3124
3122
  *
3125
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3123
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3126
3124
  * @param {number} num number of elements.
3127
3125
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3128
3126
  */
@@ -3158,7 +3156,7 @@ class WebDriver extends Helper {
3158
3156
  * I.waitForInvisible('#popup');
3159
3157
  * ```
3160
3158
  *
3161
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3159
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3162
3160
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3163
3161
  */
3164
3162
  async waitForInvisible(locator, sec = null) {
@@ -3187,7 +3185,7 @@ class WebDriver extends Helper {
3187
3185
  * I.waitToHide('#popup');
3188
3186
  * ```
3189
3187
  *
3190
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3188
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3191
3189
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3192
3190
  */
3193
3191
  async waitToHide(locator, sec = null) {
@@ -3202,7 +3200,7 @@ class WebDriver extends Helper {
3202
3200
  * I.waitForDetached('#popup');
3203
3201
  * ```
3204
3202
  *
3205
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3203
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3206
3204
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3207
3205
  */
3208
3206
  async waitForDetached(locator, sec = null) {
@@ -3261,28 +3259,6 @@ class WebDriver extends Helper {
3261
3259
  return this.browser.waitUntil(async () => this.browser.execute(fn, ...args), { timeout: aSec * 1000, timeoutMsg: '' });
3262
3260
  }
3263
3261
 
3264
- /**
3265
- * Waits for a function to return true (waits for 1sec by default).
3266
- *
3267
- * ```js
3268
- * I.waitUntil(() => window.requests == 0);
3269
- * I.waitUntil(() => window.requests == 0, 5);
3270
- * ```
3271
- *
3272
- * @param {function|string} fn function which is executed in browser context.
3273
- * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3274
- * @param {string} [timeoutMsg=''] message to show in case of timeout fail.
3275
- * @param {?number} [interval=null]
3276
- */
3277
- async waitUntil(fn, sec = null, timeoutMsg = null, interval = null) {
3278
- const aSec = sec || this.options.waitForTimeout;
3279
- const _interval = typeof interval === 'number' ? interval * 1000 : null;
3280
- if (isWebDriver5()) {
3281
- return this.browser.waitUntil(fn, aSec * 1000, timeoutMsg, _interval);
3282
- }
3283
- return this.browser.waitUntil(fn, { timeout: aSec * 1000, timeoutMsg, interval: _interval });
3284
- }
3285
-
3286
3262
  /**
3287
3263
  * Switches frame or in case of null locator reverts to parent.
3288
3264
  *
@@ -3291,7 +3267,7 @@ class WebDriver extends Helper {
3291
3267
  * I.switchTo(); // switch back to main page
3292
3268
  * ```
3293
3269
  *
3294
- * @param {?string | object} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3270
+ * @param {?CodeceptJS.LocatorOrString} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3295
3271
  */
3296
3272
  async switchTo(locator) {
3297
3273
  this.browser.isInsideFrame = true;
@@ -3565,7 +3541,7 @@ class WebDriver extends Helper {
3565
3541
  * const width = await I.grabElementBoundingRect('h3', 'width');
3566
3542
  * // width == 527
3567
3543
  * ```
3568
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3544
+ * @param {LocatorOrString} locator element located by CSS|XPath|strict locator.
3569
3545
  * @param {string=} elementSize x, y, width or height of the given element.
3570
3546
  * @returns {Promise<DOMRect>|Promise<number>} Element bounding rectangle
3571
3547
  *