codeceptjs 3.3.0-beta.5 → 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/README.md +6 -1
  3. package/docs/api.md +45 -30
  4. package/docs/bdd.md +1 -0
  5. package/docs/best.md +1 -1
  6. package/docs/build/ApiDataFactory.js +4 -3
  7. package/docs/build/Appium.js +53 -48
  8. package/docs/build/GraphQL.js +4 -2
  9. package/docs/build/GraphQLDataFactory.js +3 -3
  10. package/docs/build/JSONResponse.js +1 -1
  11. package/docs/build/Nightmare.js +101 -72
  12. package/docs/build/Playwright.js +166 -113
  13. package/docs/build/Protractor.js +72 -34
  14. package/docs/build/Puppeteer.js +143 -100
  15. package/docs/build/REST.js +5 -2
  16. package/docs/build/TestCafe.js +97 -66
  17. package/docs/build/WebDriver.js +183 -135
  18. package/docs/changelog.md +99 -0
  19. package/docs/custom-helpers.md +1 -1
  20. package/docs/data.md +2 -2
  21. package/docs/email.md +5 -0
  22. package/docs/helpers/ApiDataFactory.md +7 -3
  23. package/docs/helpers/Appium.md +217 -175
  24. package/docs/helpers/GraphQL.md +6 -0
  25. package/docs/helpers/GraphQLDataFactory.md +3 -3
  26. package/docs/helpers/JSONResponse.md +1 -1
  27. package/docs/helpers/MockRequest.md +8 -6
  28. package/docs/helpers/Nightmare.md +98 -45
  29. package/docs/helpers/Playwright.md +151 -59
  30. package/docs/helpers/Puppeteer.md +103 -26
  31. package/docs/helpers/REST.md +1 -1
  32. package/docs/helpers/TestCafe.md +77 -22
  33. package/docs/helpers/WebDriver.md +150 -62
  34. package/docs/index.md +1 -1
  35. package/docs/locators.md +1 -1
  36. package/docs/videos.md +2 -2
  37. package/docs/webapi/amOnPage.mustache +2 -1
  38. package/docs/webapi/appendField.mustache +2 -1
  39. package/docs/webapi/attachFile.mustache +2 -1
  40. package/docs/webapi/checkOption.mustache +2 -1
  41. package/docs/webapi/clearCookie.mustache +2 -1
  42. package/docs/webapi/clearField.mustache +1 -0
  43. package/docs/webapi/click.mustache +2 -1
  44. package/docs/webapi/clickLink.mustache +2 -1
  45. package/docs/webapi/closeCurrentTab.mustache +6 -4
  46. package/docs/webapi/closeOtherTabs.mustache +6 -4
  47. package/docs/webapi/dontSee.mustache +1 -0
  48. package/docs/webapi/dontSeeCheckboxIsChecked.mustache +1 -0
  49. package/docs/webapi/dontSeeCookie.mustache +2 -1
  50. package/docs/webapi/dontSeeCurrentUrlEquals.mustache +2 -1
  51. package/docs/webapi/dontSeeElement.mustache +2 -1
  52. package/docs/webapi/dontSeeElementInDOM.mustache +2 -1
  53. package/docs/webapi/dontSeeInCurrentUrl.mustache +2 -1
  54. package/docs/webapi/dontSeeInField.mustache +2 -1
  55. package/docs/webapi/dontSeeInSource.mustache +1 -0
  56. package/docs/webapi/dontSeeInTitle.mustache +2 -1
  57. package/docs/webapi/doubleClick.mustache +1 -0
  58. package/docs/webapi/downloadFile.mustache +2 -1
  59. package/docs/webapi/dragAndDrop.mustache +1 -0
  60. package/docs/webapi/dragSlider.mustache +2 -1
  61. package/docs/webapi/executeAsyncScript.mustache +1 -1
  62. package/docs/webapi/executeScript.mustache +1 -1
  63. package/docs/webapi/fillField.mustache +1 -0
  64. package/docs/webapi/forceClick.mustache +1 -0
  65. package/docs/webapi/forceRightClick.mustache +1 -0
  66. package/docs/webapi/grabDataFromPerformanceTiming.mustache +2 -1
  67. package/docs/webapi/moveCursorTo.mustache +1 -0
  68. package/docs/webapi/openNewTab.mustache +6 -4
  69. package/docs/webapi/pressKey.mustache +2 -1
  70. package/docs/webapi/pressKeyDown.mustache +1 -0
  71. package/docs/webapi/pressKeyUp.mustache +1 -0
  72. package/docs/webapi/pressKeyWithKeyNormalization.mustache +1 -0
  73. package/docs/webapi/refreshPage.mustache +1 -0
  74. package/docs/webapi/resizeWindow.mustache +2 -1
  75. package/docs/webapi/rightClick.mustache +1 -0
  76. package/docs/webapi/saveElementScreenshot.mustache +1 -0
  77. package/docs/webapi/saveScreenshot.mustache +2 -1
  78. package/docs/webapi/say.mustache +2 -1
  79. package/docs/webapi/scrollIntoView.mustache +1 -0
  80. package/docs/webapi/scrollPageToBottom.mustache +1 -0
  81. package/docs/webapi/scrollPageToTop.mustache +1 -0
  82. package/docs/webapi/scrollTo.mustache +2 -1
  83. package/docs/webapi/see.mustache +2 -1
  84. package/docs/webapi/seeAttributesOnElements.mustache +2 -1
  85. package/docs/webapi/seeCheckboxIsChecked.mustache +1 -0
  86. package/docs/webapi/seeCookie.mustache +1 -0
  87. package/docs/webapi/seeCssPropertiesOnElements.mustache +2 -1
  88. package/docs/webapi/seeCurrentUrlEquals.mustache +2 -1
  89. package/docs/webapi/seeElement.mustache +2 -1
  90. package/docs/webapi/seeElementInDOM.mustache +1 -0
  91. package/docs/webapi/seeInCurrentUrl.mustache +2 -1
  92. package/docs/webapi/seeInField.mustache +1 -0
  93. package/docs/webapi/seeInPopup.mustache +1 -0
  94. package/docs/webapi/seeInSource.mustache +2 -1
  95. package/docs/webapi/seeInTitle.mustache +2 -1
  96. package/docs/webapi/seeNumberOfElements.mustache +1 -0
  97. package/docs/webapi/seeNumberOfVisibleElements.mustache +1 -0
  98. package/docs/webapi/seeTextEquals.mustache +2 -1
  99. package/docs/webapi/seeTitleEquals.mustache +6 -5
  100. package/docs/webapi/selectOption.mustache +1 -0
  101. package/docs/webapi/setCookie.mustache +1 -0
  102. package/docs/webapi/setGeoLocation.mustache +1 -0
  103. package/docs/webapi/switchTo.mustache +2 -1
  104. package/docs/webapi/switchToNextTab.mustache +8 -7
  105. package/docs/webapi/switchToPreviousTab.mustache +8 -7
  106. package/docs/webapi/type.mustache +1 -0
  107. package/docs/webapi/uncheckOption.mustache +2 -1
  108. package/docs/webapi/wait.mustache +2 -1
  109. package/docs/webapi/waitForClickable.mustache +2 -1
  110. package/docs/webapi/waitForDetached.mustache +2 -1
  111. package/docs/webapi/waitForElement.mustache +2 -1
  112. package/docs/webapi/waitForEnabled.mustache +2 -1
  113. package/docs/webapi/waitForFunction.mustache +1 -0
  114. package/docs/webapi/waitForInvisible.mustache +2 -1
  115. package/docs/webapi/waitForText.mustache +2 -1
  116. package/docs/webapi/waitForValue.mustache +1 -0
  117. package/docs/webapi/waitForVisible.mustache +1 -0
  118. package/docs/webapi/waitInUrl.mustache +2 -1
  119. package/docs/webapi/waitNumberOfVisibleElements.mustache +2 -1
  120. package/docs/webapi/waitToHide.mustache +2 -1
  121. package/docs/webapi/waitUrlEquals.mustache +2 -1
  122. package/lib/command/definitions.js +9 -0
  123. package/lib/command/run.js +2 -2
  124. package/lib/command/workers/runTests.js +40 -0
  125. package/lib/helper/ApiDataFactory.js +4 -3
  126. package/lib/helper/Appium.js +2 -7
  127. package/lib/helper/GraphQL.js +4 -2
  128. package/lib/helper/GraphQLDataFactory.js +3 -3
  129. package/lib/helper/JSONResponse.js +1 -1
  130. package/lib/helper/Playwright.js +28 -17
  131. package/lib/helper/REST.js +5 -2
  132. package/lib/helper/WebDriver.js +4 -0
  133. package/lib/interfaces/bdd.js +5 -0
  134. package/lib/listener/steps.js +1 -0
  135. package/lib/plugin/fakerTransform.js +1 -1
  136. package/lib/plugin/stepByStepReport.js +8 -6
  137. package/lib/workers.js +12 -0
  138. package/package.json +3 -3
  139. package/typings/types.d.ts +578 -109
@@ -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);
@@ -896,6 +896,7 @@ class WebDriver extends Helper {
896
896
  * ```
897
897
  *
898
898
  * @param {string} url url path or global url.
899
+ * @return {void} automatically synchronized promise with recorder #!
899
900
  *
900
901
  */
901
902
  amOnPage(url) {
@@ -933,8 +934,9 @@ class WebDriver extends Helper {
933
934
  * I.click({css: 'nav a.login'});
934
935
  * ```
935
936
  *
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.
937
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
938
+ * @param {?CodeceptJS.LocatorOrString | null} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
939
+ * [!] returns a _promise_ which is synchronized internally by recorder
938
940
  *
939
941
  *
940
942
  * {{ react }}
@@ -979,8 +981,9 @@ class WebDriver extends Helper {
979
981
  * I.forceClick({css: 'nav a.login'});
980
982
  * ```
981
983
  *
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.
984
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
985
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
986
+ * [!] returns a _promise_ which is synchronized internally by recorder
984
987
  *
985
988
  *
986
989
  * {{ react }}
@@ -1017,9 +1020,9 @@ class WebDriver extends Helper {
1017
1020
  * I.doubleClick('.btn.edit');
1018
1021
  * ```
1019
1022
  *
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.
1022
- *
1023
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1024
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1025
+ * [!] returns a _promise_ which is synchronized internally by recorder
1023
1026
  *
1024
1027
  * {{ react }}
1025
1028
  */
@@ -1049,9 +1052,9 @@ class WebDriver extends Helper {
1049
1052
  * I.rightClick('Click me', '.context');
1050
1053
  * ```
1051
1054
  *
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.
1054
- *
1055
+ * @param {CodeceptJS.LocatorOrString} locator clickable element located by CSS|XPath|strict locator.
1056
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1057
+ * [!] returns a _promise_ which is synchronized internally by recorder
1055
1058
  *
1056
1059
  * {{ react }}
1057
1060
  */
@@ -1092,9 +1095,9 @@ class WebDriver extends Helper {
1092
1095
  * I.forceRightClick('Menu');
1093
1096
  * ```
1094
1097
  *
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.
1097
- *
1098
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1099
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1100
+ * [!] returns a _promise_ which is synchronized internally by recorder
1098
1101
  *
1099
1102
  * {{ react }}
1100
1103
  */
@@ -1133,9 +1136,9 @@ class WebDriver extends Helper {
1133
1136
  * // or by strict locator
1134
1137
  * I.fillField({css: 'form#login input[name=username]'}, 'John');
1135
1138
  * ```
1136
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1137
- * @param {string | object} value text value to fill.
1138
- *
1139
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1140
+ * @param {CodeceptJS.StringOrSecret} value text value to fill.
1141
+ * [!] returns a _promise_ which is synchronized internally by recorder
1139
1142
  * {{ react }}
1140
1143
  * {{ custom }}
1141
1144
  *
@@ -1154,8 +1157,9 @@ class WebDriver extends Helper {
1154
1157
  * ```js
1155
1158
  * I.appendField('#myTextField', 'appended');
1156
1159
  * ```
1157
- * @param {string | object} field located by label|name|CSS|XPath|strict locator
1160
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator
1158
1161
  * @param {string} value text value to append.
1162
+ * [!] returns a _promise_ which is synchronized internally by recorder
1159
1163
  * {{ react }}
1160
1164
  */
1161
1165
  async appendField(field, value) {
@@ -1173,8 +1177,8 @@ class WebDriver extends Helper {
1173
1177
  * I.clearField('user[email]');
1174
1178
  * I.clearField('#email');
1175
1179
  * ```
1176
- * @param {string | object} editable field located by label|name|CSS|XPath|strict locator.
1177
- *
1180
+ * @param {LocatorOrString} editable field located by label|name|CSS|XPath|strict locator.
1181
+ * [!] returns a _promise_ which is synchronized internally by recorder
1178
1182
  *
1179
1183
  */
1180
1184
  async clearField(field) {
@@ -1203,9 +1207,9 @@ class WebDriver extends Helper {
1203
1207
  * ```js
1204
1208
  * I.selectOption('Which OS do you use?', ['Android', 'iOS']);
1205
1209
  * ```
1206
- * @param {string | object} select field located by label|name|CSS|XPath|strict locator.
1210
+ * @param {LocatorOrString} select field located by label|name|CSS|XPath|strict locator.
1207
1211
  * @param {string|Array<*>} option visible text or value of option.
1208
- *
1212
+ * [!] returns a _promise_ which is synchronized internally by recorder
1209
1213
  */
1210
1214
  async selectOption(select, option) {
1211
1215
  const res = await findFields.call(this, select);
@@ -1246,8 +1250,9 @@ class WebDriver extends Helper {
1246
1250
  * I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
1247
1251
  * ```
1248
1252
  *
1249
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1253
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1250
1254
  * @param {string} pathToFile local file path relative to codecept.json config file.
1255
+ * [!] returns a _promise_ which is synchronized internally by recorder
1251
1256
  * Appium: not tested
1252
1257
  */
1253
1258
  async attachFile(locator, pathToFile) {
@@ -1285,8 +1290,9 @@ class WebDriver extends Helper {
1285
1290
  * I.checkOption('I Agree to Terms and Conditions');
1286
1291
  * I.checkOption('agree', '//form');
1287
1292
  * ```
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.
1293
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1294
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1295
+ * [!] returns a _promise_ which is synchronized internally by recorder
1290
1296
  * Appium: not tested
1291
1297
  */
1292
1298
  async checkOption(field, context = null) {
@@ -1315,8 +1321,9 @@ class WebDriver extends Helper {
1315
1321
  * I.uncheckOption('I Agree to Terms and Conditions');
1316
1322
  * I.uncheckOption('agree', '//form');
1317
1323
  * ```
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.
1324
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1325
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1326
+ * [!] returns a _promise_ which is synchronized internally by recorder
1320
1327
  * Appium: not tested
1321
1328
  */
1322
1329
  async uncheckOption(field, context = null) {
@@ -1342,7 +1349,7 @@ class WebDriver extends Helper {
1342
1349
  * let pins = await I.grabTextFromAll('#pin li');
1343
1350
  * ```
1344
1351
  *
1345
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1352
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1346
1353
  * @returns {Promise<string[]>} attribute value
1347
1354
  *
1348
1355
  *
@@ -1363,7 +1370,7 @@ class WebDriver extends Helper {
1363
1370
  * ```
1364
1371
  * If multiple elements found returns first element.
1365
1372
  *
1366
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1373
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1367
1374
  * @returns {Promise<string>} attribute value
1368
1375
  *
1369
1376
  *
@@ -1386,7 +1393,7 @@ class WebDriver extends Helper {
1386
1393
  * let postHTMLs = await I.grabHTMLFromAll('.post');
1387
1394
  * ```
1388
1395
  *
1389
- * @param {string | object} element located by CSS|XPath|strict locator.
1396
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
1390
1397
  * @returns {Promise<string[]>} HTML code for an element
1391
1398
  *
1392
1399
  *
@@ -1407,7 +1414,7 @@ class WebDriver extends Helper {
1407
1414
  * let postHTML = await I.grabHTMLFrom('#post');
1408
1415
  * ```
1409
1416
  *
1410
- * @param {string | object} element located by CSS|XPath|strict locator.
1417
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
1411
1418
  * @returns {Promise<string>} HTML code for an element
1412
1419
  *
1413
1420
  *
@@ -1429,7 +1436,7 @@ class WebDriver extends Helper {
1429
1436
  * ```js
1430
1437
  * let inputs = await I.grabValueFromAll('//form/input');
1431
1438
  * ```
1432
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1439
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1433
1440
  * @returns {Promise<string[]>} attribute value
1434
1441
  *
1435
1442
  *
@@ -1450,7 +1457,7 @@ class WebDriver extends Helper {
1450
1457
  * ```js
1451
1458
  * let email = await I.grabValueFrom('input[name=email]');
1452
1459
  * ```
1453
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1460
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1454
1461
  * @returns {Promise<string>} attribute value
1455
1462
  *
1456
1463
  *
@@ -1473,7 +1480,7 @@ class WebDriver extends Helper {
1473
1480
  * const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
1474
1481
  * ```
1475
1482
  *
1476
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1483
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1477
1484
  * @param {string} cssProperty CSS property name.
1478
1485
  * @returns {Promise<string[]>} CSS value
1479
1486
  *
@@ -1494,7 +1501,7 @@ class WebDriver extends Helper {
1494
1501
  * const value = await I.grabCssPropertyFrom('h3', 'font-weight');
1495
1502
  * ```
1496
1503
  *
1497
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1504
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1498
1505
  * @param {string} cssProperty CSS property name.
1499
1506
  * @returns {Promise<string>} CSS value
1500
1507
  *
@@ -1517,7 +1524,7 @@ class WebDriver extends Helper {
1517
1524
  * ```js
1518
1525
  * let hints = await I.grabAttributeFromAll('.tooltip', 'title');
1519
1526
  * ```
1520
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1527
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1521
1528
  * @param {string} attr attribute name.
1522
1529
  * @returns {Promise<string[]>} attribute value
1523
1530
  *
@@ -1537,7 +1544,7 @@ class WebDriver extends Helper {
1537
1544
  * ```js
1538
1545
  * let hint = await I.grabAttributeFrom('#tooltip', 'title');
1539
1546
  * ```
1540
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1547
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1541
1548
  * @param {string} attr attribute name.
1542
1549
  * @returns {Promise<string>} attribute value
1543
1550
  *
@@ -1559,6 +1566,7 @@ class WebDriver extends Helper {
1559
1566
  * ```
1560
1567
  *
1561
1568
  * @param {string} text text value to check.
1569
+ * [!] returns a _promise_ which is synchronized internally by recorder
1562
1570
  */
1563
1571
  async seeInTitle(text) {
1564
1572
  const title = await this.browser.getTitle();
@@ -1566,14 +1574,14 @@ class WebDriver extends Helper {
1566
1574
  }
1567
1575
 
1568
1576
  /**
1569
- * Checks that title is equal to provided one.
1577
+ * Checks that title is equal to provided one.
1570
1578
  *
1571
- * ```js
1572
- * I.seeTitleEquals('Test title.');
1573
- * ```
1574
- *
1575
- * @param {string} text value to check.
1579
+ * ```js
1580
+ * I.seeTitleEquals('Test title.');
1581
+ * ```
1576
1582
  *
1583
+ * @param {string} text value to check.
1584
+ * [!] returns a _promise_ which is synchronized internally by recorder
1577
1585
  */
1578
1586
  async seeTitleEquals(text) {
1579
1587
  const title = await this.browser.getTitle();
@@ -1588,6 +1596,7 @@ class WebDriver extends Helper {
1588
1596
  * ```
1589
1597
  *
1590
1598
  * @param {string} text value to check.
1599
+ * [!] returns a _promise_ which is synchronized internally by recorder
1591
1600
  */
1592
1601
  async dontSeeInTitle(text) {
1593
1602
  const title = await this.browser.getTitle();
@@ -1620,7 +1629,8 @@ class WebDriver extends Helper {
1620
1629
  * I.see('Register', {css: 'form.register'}); // use strict locator
1621
1630
  * ```
1622
1631
  * @param {string} text expected on page.
1623
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1632
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1633
+ * [!] returns a _promise_ which is synchronized internally by recorder
1624
1634
  *
1625
1635
  * {{ react }}
1626
1636
  */
@@ -1636,7 +1646,8 @@ class WebDriver extends Helper {
1636
1646
  * ```
1637
1647
  *
1638
1648
  * @param {string} text element value to check.
1639
- * @param {(string | object)?} [context=null] element located by CSS|XPath|strict locator.
1649
+ * @param {CodeceptJS.LocatorOrString?} [context=null] element located by CSS|XPath|strict locator.
1650
+ * [!] returns a _promise_ which is synchronized internally by recorder
1640
1651
  */
1641
1652
  async seeTextEquals(text, context = null) {
1642
1653
  return proceedSee.call(this, 'assert', text, context, true);
@@ -1652,8 +1663,8 @@ class WebDriver extends Helper {
1652
1663
  * ```
1653
1664
  *
1654
1665
  * @param {string} text which is not present.
1655
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
1656
- *
1666
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
1667
+ * [!] returns a _promise_ which is synchronized internally by recorder
1657
1668
  *
1658
1669
  * {{ react }}
1659
1670
  */
@@ -1671,9 +1682,9 @@ class WebDriver extends Helper {
1671
1682
  * I.seeInField('form input[type=hidden]','hidden_value');
1672
1683
  * I.seeInField('#searchform input','Search');
1673
1684
  * ```
1674
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1685
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1675
1686
  * @param {string} value value to check.
1676
- *
1687
+ * [!] returns a _promise_ which is synchronized internally by recorder
1677
1688
  *
1678
1689
  */
1679
1690
  async seeInField(field, value) {
@@ -1689,8 +1700,9 @@ class WebDriver extends Helper {
1689
1700
  * I.dontSeeInField({ css: 'form input.email' }, 'user@user.com'); // field by CSS
1690
1701
  * ```
1691
1702
  *
1692
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1703
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1693
1704
  * @param {string} value value to check.
1705
+ * [!] returns a _promise_ which is synchronized internally by recorder
1694
1706
  *
1695
1707
  */
1696
1708
  async dontSeeInField(field, value) {
@@ -1706,8 +1718,8 @@ class WebDriver extends Helper {
1706
1718
  * I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
1707
1719
  * ```
1708
1720
  *
1709
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1710
- *
1721
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1722
+ * [!] returns a _promise_ which is synchronized internally by recorder
1711
1723
  * Appium: not tested
1712
1724
  */
1713
1725
  async seeCheckboxIsChecked(field) {
@@ -1723,8 +1735,8 @@ class WebDriver extends Helper {
1723
1735
  * I.dontSeeCheckboxIsChecked('agree'); // located by name
1724
1736
  * ```
1725
1737
  *
1726
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1727
- *
1738
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1739
+ * [!] returns a _promise_ which is synchronized internally by recorder
1728
1740
  * Appium: not tested
1729
1741
  */
1730
1742
  async dontSeeCheckboxIsChecked(field) {
@@ -1738,7 +1750,8 @@ class WebDriver extends Helper {
1738
1750
  * ```js
1739
1751
  * I.seeElement('#modal');
1740
1752
  * ```
1741
- * @param {string | object} locator located by CSS|XPath|strict locator.
1753
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1754
+ * [!] returns a _promise_ which is synchronized internally by recorder
1742
1755
  * {{ react }}
1743
1756
  *
1744
1757
  */
@@ -1756,7 +1769,8 @@ class WebDriver extends Helper {
1756
1769
  * I.dontSeeElement('.modal'); // modal is not shown
1757
1770
  * ```
1758
1771
  *
1759
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1772
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1773
+ * [!] returns a _promise_ which is synchronized internally by recorder
1760
1774
  * {{ react }}
1761
1775
  */
1762
1776
  async dontSeeElement(locator) {
@@ -1775,8 +1789,8 @@ class WebDriver extends Helper {
1775
1789
  * ```js
1776
1790
  * I.seeElementInDOM('#modal');
1777
1791
  * ```
1778
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1779
- *
1792
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1793
+ * [!] returns a _promise_ which is synchronized internally by recorder
1780
1794
  *
1781
1795
  */
1782
1796
  async seeElementInDOM(locator) {
@@ -1791,7 +1805,8 @@ class WebDriver extends Helper {
1791
1805
  * I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or not
1792
1806
  * ```
1793
1807
  *
1794
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1808
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1809
+ * [!] returns a _promise_ which is synchronized internally by recorder
1795
1810
  *
1796
1811
  */
1797
1812
  async dontSeeElementInDOM(locator) {
@@ -1806,6 +1821,7 @@ class WebDriver extends Helper {
1806
1821
  * I.seeInSource('<h1>Green eggs &amp; ham</h1>');
1807
1822
  * ```
1808
1823
  * @param {string} text value to check.
1824
+ * [!] returns a _promise_ which is synchronized internally by recorder
1809
1825
  *
1810
1826
  */
1811
1827
  async seeInSource(text) {
@@ -1873,7 +1889,7 @@ class WebDriver extends Helper {
1873
1889
  * ```
1874
1890
  *
1875
1891
  * @param {string} value to check.
1876
- *
1892
+ * [!] returns a _promise_ which is synchronized internally by recorder
1877
1893
  */
1878
1894
  async dontSeeInSource(text) {
1879
1895
  const source = await this.browser.getPageSource();
@@ -1889,9 +1905,9 @@ class WebDriver extends Helper {
1889
1905
  * I.seeNumberOfElements('#submitBtn', 1);
1890
1906
  * ```
1891
1907
  *
1892
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1908
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1893
1909
  * @param {number} num number of elements.
1894
- *
1910
+ * [!] returns a _promise_ which is synchronized internally by recorder
1895
1911
  * {{ react }}
1896
1912
  */
1897
1913
  async seeNumberOfElements(locator, num) {
@@ -1907,9 +1923,9 @@ class WebDriver extends Helper {
1907
1923
  * I.seeNumberOfVisibleElements('.buttons', 3);
1908
1924
  * ```
1909
1925
  *
1910
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1926
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1911
1927
  * @param {number} num number of elements.
1912
- *
1928
+ * [!] returns a _promise_ which is synchronized internally by recorder
1913
1929
  * {{ react }}
1914
1930
  */
1915
1931
  async seeNumberOfVisibleElements(locator, num) {
@@ -1924,8 +1940,9 @@ class WebDriver extends Helper {
1924
1940
  * I.seeCssPropertiesOnElements('h3', { 'font-weight': "bold"});
1925
1941
  * ```
1926
1942
  *
1927
- * @param {string | object} locator located by CSS|XPath|strict locator.
1943
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1928
1944
  * @param {object} cssProperties object with CSS properties and their values to check.
1945
+ * [!] returns a _promise_ which is synchronized internally by recorder
1929
1946
  */
1930
1947
  async seeCssPropertiesOnElements(locator, cssProperties) {
1931
1948
  const res = await this._locate(locator);
@@ -1966,8 +1983,9 @@ class WebDriver extends Helper {
1966
1983
  * I.seeAttributesOnElements('//form', { method: "post"});
1967
1984
  * ```
1968
1985
  *
1969
- * @param {string | object} locator located by CSS|XPath|strict locator.
1986
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1970
1987
  * @param {object} attributes attributes and their values to check.
1988
+ * [!] returns a _promise_ which is synchronized internally by recorder
1971
1989
  */
1972
1990
  async seeAttributesOnElements(locator, attributes) {
1973
1991
  const res = await this._locate(locator);
@@ -2001,7 +2019,7 @@ class WebDriver extends Helper {
2001
2019
  * let numOfElements = await I.grabNumberOfVisibleElements('p');
2002
2020
  * ```
2003
2021
  *
2004
- * @param {string | object} locator located by CSS|XPath|strict locator.
2022
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2005
2023
  * @returns {Promise<number>} number of visible elements
2006
2024
  */
2007
2025
  async grabNumberOfVisibleElements(locator) {
@@ -2021,6 +2039,7 @@ class WebDriver extends Helper {
2021
2039
  * ```
2022
2040
  *
2023
2041
  * @param {string} url a fragment to check
2042
+ * [!] returns a _promise_ which is synchronized internally by recorder
2024
2043
  *
2025
2044
  */
2026
2045
  async seeInCurrentUrl(url) {
@@ -2032,6 +2051,7 @@ class WebDriver extends Helper {
2032
2051
  * Checks that current url does not contain a provided fragment.
2033
2052
  *
2034
2053
  * @param {string} url value to check.
2054
+ * [!] returns a _promise_ which is synchronized internally by recorder
2035
2055
  *
2036
2056
  */
2037
2057
  async dontSeeInCurrentUrl(url) {
@@ -2050,6 +2070,7 @@ class WebDriver extends Helper {
2050
2070
  * ```
2051
2071
  *
2052
2072
  * @param {string} url value to check.
2073
+ * [!] returns a _promise_ which is synchronized internally by recorder
2053
2074
  *
2054
2075
  */
2055
2076
  async seeCurrentUrlEquals(url) {
@@ -2067,6 +2088,7 @@ class WebDriver extends Helper {
2067
2088
  * ```
2068
2089
  *
2069
2090
  * @param {string} url value to check.
2091
+ * [!] returns a _promise_ which is synchronized internally by recorder
2070
2092
  *
2071
2093
  */
2072
2094
  async dontSeeCurrentUrlEquals(url) {
@@ -2100,7 +2122,7 @@ class WebDriver extends Helper {
2100
2122
  *
2101
2123
  * @param {string|function} fn function to be executed in browser context.
2102
2124
  * @param {...any} args to be passed to function.
2103
- * @return {Promise<any>}
2125
+ * [!] returns a _promise_ which is synchronized internally by recorder
2104
2126
  *
2105
2127
  *
2106
2128
  *
@@ -2134,7 +2156,7 @@ class WebDriver extends Helper {
2134
2156
  *
2135
2157
  * @param {string|function} fn function to be executed in browser context.
2136
2158
  * @param {...any} args to be passed to function.
2137
- * @return {Promise<any>}
2159
+ * [!] returns a _promise_ which is synchronized internally by recorder
2138
2160
  *
2139
2161
  *
2140
2162
  */
@@ -2151,9 +2173,9 @@ class WebDriver extends Helper {
2151
2173
  * I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "center" });
2152
2174
  * ```
2153
2175
  *
2154
- * @param {string | object} locator located by CSS|XPath|strict locator.
2176
+ * @param {LocatorOrString} locator located by CSS|XPath|strict locator.
2155
2177
  * @param {ScrollIntoViewOptions} scrollIntoViewOptions see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView.
2156
- *
2178
+ * [!] returns a _promise_ which is synchronized internally by recorder
2157
2179
  *
2158
2180
  */
2159
2181
  async scrollIntoView(locator, scrollIntoViewOptions) {
@@ -2172,9 +2194,10 @@ class WebDriver extends Helper {
2172
2194
  * I.scrollTo('#submit', 5, 5);
2173
2195
  * ```
2174
2196
  *
2175
- * @param {string | object} locator located by CSS|XPath|strict locator.
2197
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2176
2198
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
2177
2199
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
2200
+ * [!] returns a _promise_ which is synchronized internally by recorder
2178
2201
  *
2179
2202
  */
2180
2203
  async scrollTo(locator, offsetX = 0, offsetY = 0) {
@@ -2213,10 +2236,10 @@ class WebDriver extends Helper {
2213
2236
  * I.moveCursorTo('#submit', 5,5);
2214
2237
  * ```
2215
2238
  *
2216
- * @param {string | object} locator located by CSS|XPath|strict locator.
2239
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2217
2240
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
2218
2241
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
2219
- *
2242
+ * [!] returns a _promise_ which is synchronized internally by recorder
2220
2243
  */
2221
2244
  async moveCursorTo(locator, xOffset, yOffset) {
2222
2245
  const res = await this._locate(withStrictLocator(locator), true);
@@ -2234,9 +2257,9 @@ class WebDriver extends Helper {
2234
2257
  * I.saveElementScreenshot(`#submit`,'debug.png');
2235
2258
  * ```
2236
2259
  *
2237
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2260
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2238
2261
  * @param {string} fileName file name to save.
2239
- *
2262
+ * [!] returns a _promise_ which is synchronized internally by recorder
2240
2263
  *
2241
2264
  */
2242
2265
  async saveElementScreenshot(locator, fileName) {
@@ -2262,6 +2285,7 @@ class WebDriver extends Helper {
2262
2285
  *
2263
2286
  * @param {string} fileName file name to save.
2264
2287
  * @param {boolean} [fullPage=false] (optional, `false` by default) flag to enable fullscreen screenshot mode.
2288
+ * [!] returns a _promise_ which is synchronized internally by recorder
2265
2289
  */
2266
2290
  async saveScreenshot(fileName, fullPage = false) {
2267
2291
  const outputFile = screenshotOutputFolder(fileName);
@@ -2316,7 +2340,7 @@ class WebDriver extends Helper {
2316
2340
  * ```
2317
2341
  *
2318
2342
  * @param {Cookie|Array<Cookie>} cookie a cookie object or array of cookie objects.
2319
- *
2343
+ * [!] returns a _promise_ which is synchronized internally by recorder
2320
2344
  *
2321
2345
  *
2322
2346
  * Uses Selenium's JSON [cookie
@@ -2336,6 +2360,7 @@ class WebDriver extends Helper {
2336
2360
  * ```
2337
2361
  *
2338
2362
  * @param {?string} [cookie=null] (optional, `null` by default) cookie name
2363
+ * [!] returns a _promise_ which is synchronized internally by recorder
2339
2364
  */
2340
2365
  async clearCookie(cookie) {
2341
2366
  return this.browser.deleteCookies(cookie);
@@ -2349,7 +2374,7 @@ class WebDriver extends Helper {
2349
2374
  * ```
2350
2375
  *
2351
2376
  * @param {string} name cookie name.
2352
- *
2377
+ * [!] returns a _promise_ which is synchronized internally by recorder
2353
2378
  */
2354
2379
  async seeCookie(name) {
2355
2380
  const cookie = await this.browser.getCookies([name]);
@@ -2364,6 +2389,7 @@ class WebDriver extends Helper {
2364
2389
  * ```
2365
2390
  *
2366
2391
  * @param {string} name cookie name.
2392
+ * [!] returns a _promise_ which is synchronized internally by recorder
2367
2393
  */
2368
2394
  async dontSeeCookie(name) {
2369
2395
  const cookie = await this.browser.getCookies([name]);
@@ -2459,7 +2485,7 @@ class WebDriver extends Helper {
2459
2485
  * ```
2460
2486
  *
2461
2487
  * @param {string} key name of key to press down.
2462
- *
2488
+ * [!] returns a _promise_ which is synchronized internally by recorder
2463
2489
  */
2464
2490
  async pressKeyDown(key) {
2465
2491
  key = getNormalizedKey.call(this, key);
@@ -2488,7 +2514,7 @@ class WebDriver extends Helper {
2488
2514
  * ```
2489
2515
  *
2490
2516
  * @param {string} key name of key to release.
2491
- *
2517
+ * [!] returns a _promise_ which is synchronized internally by recorder
2492
2518
  */
2493
2519
  async pressKeyUp(key) {
2494
2520
  key = getNormalizedKey.call(this, key);
@@ -2565,6 +2591,7 @@ class WebDriver extends Helper {
2565
2591
  * - `'Tab'`
2566
2592
  *
2567
2593
  * @param {string|string[]} key key or array of keys to press.
2594
+ * [!] returns a _promise_ which is synchronized internally by recorder
2568
2595
  *
2569
2596
  *
2570
2597
  * _Note:_ In case a text field or textarea is focused be aware that some browsers do not respect active modifier when combining modifier keys with other keys.
@@ -2625,7 +2652,7 @@ class WebDriver extends Helper {
2625
2652
  *
2626
2653
  * @param {string|string[]} key or array of keys to type.
2627
2654
  * @param {?number} [delay=null] (optional) delay in ms between key presses
2628
- *
2655
+ * [!] returns a _promise_ which is synchronized internally by recorder
2629
2656
  */
2630
2657
  async type(keys, delay = null) {
2631
2658
  if (!Array.isArray(keys)) {
@@ -2647,6 +2674,7 @@ class WebDriver extends Helper {
2647
2674
  *
2648
2675
  * @param {number} width width in pixels or `maximize`.
2649
2676
  * @param {number} height height in pixels.
2677
+ * [!] returns a _promise_ which is synchronized internally by recorder
2650
2678
  * Appium: not tested in web, in apps doesn't work
2651
2679
  */
2652
2680
  async resizeWindow(width, height) {
@@ -2681,9 +2709,9 @@ class WebDriver extends Helper {
2681
2709
  * I.dragAndDrop('#dragHandle', '#container');
2682
2710
  * ```
2683
2711
  *
2684
- * @param {string | object} srcElement located by CSS|XPath|strict locator.
2685
- * @param {string | object} destElement located by CSS|XPath|strict locator.
2686
- *
2712
+ * @param {LocatorOrString} srcElement located by CSS|XPath|strict locator.
2713
+ * @param {LocatorOrString} destElement located by CSS|XPath|strict locator.
2714
+ * [!] returns a _promise_ which is synchronized internally by recorder
2687
2715
  * Appium: not tested
2688
2716
  */
2689
2717
  async dragAndDrop(srcElement, destElement) {
@@ -2707,8 +2735,9 @@ class WebDriver extends Helper {
2707
2735
  * I.dragSlider('#slider', -70);
2708
2736
  * ```
2709
2737
  *
2710
- * @param {string | object} locator located by label|name|CSS|XPath|strict locator.
2738
+ * @param {CodeceptJS.LocatorOrString} locator located by label|name|CSS|XPath|strict locator.
2711
2739
  * @param {number} offsetX position to drag.
2740
+ * [!] returns a _promise_ which is synchronized internally by recorder
2712
2741
  */
2713
2742
  async dragSlider(locator, offsetX = 0) {
2714
2743
  const browser = this.browser;
@@ -2788,13 +2817,14 @@ class WebDriver extends Helper {
2788
2817
  }
2789
2818
 
2790
2819
  /**
2791
- * Close all tabs except for the current one.
2820
+ * Close all tabs except for the current one.
2792
2821
  *
2793
2822
  *
2794
- * ```js
2795
- * I.closeOtherTabs();
2796
- * ```
2823
+ * ```js
2824
+ * I.closeOtherTabs();
2825
+ * ```
2797
2826
  *
2827
+ * [!] returns a _promise_ which is synchronized internally by recorder
2798
2828
  */
2799
2829
  async closeOtherTabs() {
2800
2830
  const handles = await this.browser.getWindowHandles();
@@ -2816,6 +2846,7 @@ class WebDriver extends Helper {
2816
2846
  * ```
2817
2847
  *
2818
2848
  * @param {number} sec number of second to wait.
2849
+ * [!] returns a _promise_ which is synchronized internally by recorder
2819
2850
  */
2820
2851
  async wait(sec) {
2821
2852
  return new Promise(resolve => setTimeout(resolve, sec * 1000));
@@ -2825,8 +2856,9 @@ class WebDriver extends Helper {
2825
2856
  * Waits for element to become enabled (by default waits for 1sec).
2826
2857
  * Element can be located by CSS or XPath.
2827
2858
  *
2828
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2859
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2829
2860
  * @param {number} [sec=1] (optional) time in seconds to wait, 1 by default.
2861
+ * [!] returns a _promise_ which is synchronized internally by recorder
2830
2862
  */
2831
2863
  async waitForEnabled(locator, sec = null) {
2832
2864
  const aSec = sec || this.options.waitForTimeout;
@@ -2868,8 +2900,9 @@ class WebDriver extends Helper {
2868
2900
  * I.waitForElement('.btn.continue', 5); // wait for 5 secs
2869
2901
  * ```
2870
2902
  *
2871
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2903
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2872
2904
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2905
+ * [!] returns a _promise_ which is synchronized internally by recorder
2873
2906
  */
2874
2907
  async waitForElement(locator, sec = null) {
2875
2908
  const aSec = sec || this.options.waitForTimeout;
@@ -2894,8 +2927,9 @@ class WebDriver extends Helper {
2894
2927
  * I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2895
2928
  * ```
2896
2929
  *
2897
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2930
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2898
2931
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2932
+ * [!] returns a _promise_ which is synchronized internally by recorder
2899
2933
  */
2900
2934
  async waitForClickable(locator, waitTimeout) {
2901
2935
  waitTimeout = waitTimeout || this.options.waitForTimeout;
@@ -2918,6 +2952,7 @@ class WebDriver extends Helper {
2918
2952
  *
2919
2953
  * @param {string} urlPart value to check.
2920
2954
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2955
+ * [!] returns a _promise_ which is synchronized internally by recorder
2921
2956
  */
2922
2957
  async waitInUrl(urlPart, sec = null) {
2923
2958
  const client = this.browser;
@@ -2961,6 +2996,7 @@ class WebDriver extends Helper {
2961
2996
  *
2962
2997
  * @param {string} urlPart value to check.
2963
2998
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2999
+ * [!] returns a _promise_ which is synchronized internally by recorder
2964
3000
  */
2965
3001
  async waitUrlEquals(urlPart, sec = null) {
2966
3002
  const aSec = sec || this.options.waitForTimeout;
@@ -2994,7 +3030,8 @@ class WebDriver extends Helper {
2994
3030
  *
2995
3031
  * @param {string }text to wait for.
2996
3032
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2997
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator.
3033
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator.
3034
+ * [!] returns a _promise_ which is synchronized internally by recorder
2998
3035
  *
2999
3036
  */
3000
3037
  async waitForText(text, sec = null, context = null) {
@@ -3038,10 +3075,10 @@ class WebDriver extends Helper {
3038
3075
  * I.waitForValue('//input', "GoodValue");
3039
3076
  * ```
3040
3077
  *
3041
- * @param {string | object} field input field.
3078
+ * @param {LocatorOrString} field input field.
3042
3079
  * @param {string }value expected value.
3043
3080
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3044
- *
3081
+ * [!] returns a _promise_ which is synchronized internally by recorder
3045
3082
  */
3046
3083
  async waitForValue(field, value, sec = null) {
3047
3084
  const client = this.browser;
@@ -3084,9 +3121,9 @@ class WebDriver extends Helper {
3084
3121
  * I.waitForVisible('#popup');
3085
3122
  * ```
3086
3123
  *
3087
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3124
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3088
3125
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3089
- *
3126
+ * [!] returns a _promise_ which is synchronized internally by recorder
3090
3127
  *
3091
3128
  */
3092
3129
  async waitForVisible(locator, sec = null) {
@@ -3120,9 +3157,10 @@ class WebDriver extends Helper {
3120
3157
  * I.waitNumberOfVisibleElements('a', 3);
3121
3158
  * ```
3122
3159
  *
3123
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3160
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3124
3161
  * @param {number} num number of elements.
3125
3162
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3163
+ * [!] returns a _promise_ which is synchronized internally by recorder
3126
3164
  */
3127
3165
  async waitNumberOfVisibleElements(locator, num, sec = null) {
3128
3166
  const aSec = sec || this.options.waitForTimeout;
@@ -3156,8 +3194,9 @@ class WebDriver extends Helper {
3156
3194
  * I.waitForInvisible('#popup');
3157
3195
  * ```
3158
3196
  *
3159
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3197
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3160
3198
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3199
+ * [!] returns a _promise_ which is synchronized internally by recorder
3161
3200
  */
3162
3201
  async waitForInvisible(locator, sec = null) {
3163
3202
  const aSec = sec || this.options.waitForTimeout;
@@ -3185,8 +3224,9 @@ class WebDriver extends Helper {
3185
3224
  * I.waitToHide('#popup');
3186
3225
  * ```
3187
3226
  *
3188
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3227
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3189
3228
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3229
+ * [!] returns a _promise_ which is synchronized internally by recorder
3190
3230
  */
3191
3231
  async waitToHide(locator, sec = null) {
3192
3232
  return this.waitForInvisible(locator, sec);
@@ -3200,8 +3240,9 @@ class WebDriver extends Helper {
3200
3240
  * I.waitForDetached('#popup');
3201
3241
  * ```
3202
3242
  *
3203
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3243
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3204
3244
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3245
+ * [!] returns a _promise_ which is synchronized internally by recorder
3205
3246
  */
3206
3247
  async waitForDetached(locator, sec = null) {
3207
3248
  const aSec = sec || this.options.waitForTimeout;
@@ -3240,7 +3281,7 @@ class WebDriver extends Helper {
3240
3281
  * @param {string|function} fn to be executed in browser context.
3241
3282
  * @param {any[]|number} [argsOrSec] (optional, `1` by default) arguments for function or seconds.
3242
3283
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
3243
- *
3284
+ * [!] returns a _promise_ which is synchronized internally by recorder
3244
3285
  */
3245
3286
  async waitForFunction(fn, argsOrSec = null, sec = null) {
3246
3287
  let args = [];
@@ -3267,7 +3308,8 @@ class WebDriver extends Helper {
3267
3308
  * I.switchTo(); // switch back to main page
3268
3309
  * ```
3269
3310
  *
3270
- * @param {?string | object} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3311
+ * @param {?CodeceptJS.LocatorOrString} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3312
+ * [!] returns a _promise_ which is synchronized internally by recorder
3271
3313
  */
3272
3314
  async switchTo(locator) {
3273
3315
  this.browser.isInsideFrame = true;
@@ -3285,16 +3327,16 @@ class WebDriver extends Helper {
3285
3327
  }
3286
3328
 
3287
3329
  /**
3288
- * Switch focus to a particular tab by its number. It waits tabs loading and then switch tab.
3330
+ * Switch focus to a particular tab by its number. It waits tabs loading and then switch tab.
3289
3331
  *
3290
- * ```js
3291
- * I.switchToNextTab();
3292
- * I.switchToNextTab(2);
3293
- * ```
3294
- *
3295
- * @param {number} [num] (optional) number of tabs to switch forward, default: 1.
3296
- * @param {number | null} [sec] (optional) time in seconds to wait.
3332
+ * ```js
3333
+ * I.switchToNextTab();
3334
+ * I.switchToNextTab(2);
3335
+ * ```
3297
3336
  *
3337
+ * @param {number} [num] (optional) number of tabs to switch forward, default: 1.
3338
+ * @param {number | null} [sec] (optional) time in seconds to wait.
3339
+ * [!] returns a _promise_ which is synchronized internally by recorder
3298
3340
  */
3299
3341
  async switchToNextTab(num = 1, sec = null) {
3300
3342
  const aSec = sec || this.options.waitForTimeout;
@@ -3325,16 +3367,16 @@ class WebDriver extends Helper {
3325
3367
  }
3326
3368
 
3327
3369
  /**
3328
- * Switch focus to a particular tab by its number. It waits tabs loading and then switch tab.
3370
+ * Switch focus to a particular tab by its number. It waits tabs loading and then switch tab.
3329
3371
  *
3330
- * ```js
3331
- * I.switchToPreviousTab();
3332
- * I.switchToPreviousTab(2);
3333
- * ```
3334
- *
3335
- * @param {number} [num] (optional) number of tabs to switch backward, default: 1.
3336
- * @param {number?} [sec] (optional) time in seconds to wait.
3372
+ * ```js
3373
+ * I.switchToPreviousTab();
3374
+ * I.switchToPreviousTab(2);
3375
+ * ```
3337
3376
  *
3377
+ * @param {number} [num] (optional) number of tabs to switch backward, default: 1.
3378
+ * @param {number?} [sec] (optional) time in seconds to wait.
3379
+ * [!] returns a _promise_ which is synchronized internally by recorder
3338
3380
  */
3339
3381
  async switchToPreviousTab(num = 1, sec = null) {
3340
3382
  const aSec = sec || this.options.waitForTimeout;
@@ -3365,12 +3407,13 @@ class WebDriver extends Helper {
3365
3407
  }
3366
3408
 
3367
3409
  /**
3368
- * Close current tab.
3410
+ * Close current tab.
3369
3411
  *
3370
- * ```js
3371
- * I.closeCurrentTab();
3372
- * ```
3412
+ * ```js
3413
+ * I.closeCurrentTab();
3414
+ * ```
3373
3415
  *
3416
+ * [!] returns a _promise_ which is synchronized internally by recorder
3374
3417
  */
3375
3418
  async closeCurrentTab() {
3376
3419
  await this.browser.closeWindow();
@@ -3379,12 +3422,13 @@ class WebDriver extends Helper {
3379
3422
  }
3380
3423
 
3381
3424
  /**
3382
- * Open new tab and switch to it.
3425
+ * Open new tab and switch to it.
3383
3426
  *
3384
- * ```js
3385
- * I.openNewTab();
3386
- * ```
3427
+ * ```js
3428
+ * I.openNewTab();
3429
+ * ```
3387
3430
  *
3431
+ * [!] returns a _promise_ which is synchronized internally by recorder
3388
3432
  */
3389
3433
  async openNewTab(url = 'about:blank', windowName = null) {
3390
3434
  const client = this.browser;
@@ -3418,7 +3462,7 @@ class WebDriver extends Helper {
3418
3462
  * ```js
3419
3463
  * I.refreshPage();
3420
3464
  * ```
3421
- *
3465
+ * [!] returns a _promise_ which is synchronized internally by recorder
3422
3466
  */
3423
3467
  async refreshPage() {
3424
3468
  const client = this.browser;
@@ -3431,7 +3475,7 @@ class WebDriver extends Helper {
3431
3475
  * ```js
3432
3476
  * I.scrollPageToTop();
3433
3477
  * ```
3434
- *
3478
+ * [!] returns a _promise_ which is synchronized internally by recorder
3435
3479
  */
3436
3480
  scrollPageToTop() {
3437
3481
  const client = this.browser;
@@ -3448,7 +3492,7 @@ class WebDriver extends Helper {
3448
3492
  * ```js
3449
3493
  * I.scrollPageToBottom();
3450
3494
  * ```
3451
- *
3495
+ * [!] returns a _promise_ which is synchronized internally by recorder
3452
3496
  */
3453
3497
  scrollPageToBottom() {
3454
3498
  const client = this.browser;
@@ -3499,7 +3543,7 @@ class WebDriver extends Helper {
3499
3543
  * @param {number} latitude to set.
3500
3544
  * @param {number} longitude to set
3501
3545
  * @param {number=} altitude (optional, null by default) to set
3502
- *
3546
+ * [!] returns a _promise_ which is synchronized internally by recorder
3503
3547
  */
3504
3548
  async setGeoLocation(latitude, longitude, altitude = null) {
3505
3549
  if (altitude) {
@@ -3541,7 +3585,7 @@ class WebDriver extends Helper {
3541
3585
  * const width = await I.grabElementBoundingRect('h3', 'width');
3542
3586
  * // width == 527
3543
3587
  * ```
3544
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3588
+ * @param {LocatorOrString} locator element located by CSS|XPath|strict locator.
3545
3589
  * @param {string=} elementSize x, y, width or height of the given element.
3546
3590
  * @returns {Promise<DOMRect>|Promise<number>} Element bounding rectangle
3547
3591
  *
@@ -3561,6 +3605,8 @@ class WebDriver extends Helper {
3561
3605
 
3562
3606
  /**
3563
3607
  * Placeholder for ~ locator only test case write once run on both Appium and WebDriver.
3608
+ * @param {*} caps
3609
+ * @param {*} fn
3564
3610
  */
3565
3611
  /* eslint-disable */
3566
3612
  runOnIOS(caps, fn) {
@@ -3568,6 +3614,8 @@ class WebDriver extends Helper {
3568
3614
 
3569
3615
  /**
3570
3616
  * Placeholder for ~ locator only test case write once run on both Appium and WebDriver.
3617
+ * @param {*} caps
3618
+ * @param {*} fn
3571
3619
  */
3572
3620
  runOnAndroid(caps, fn) {
3573
3621
  }