codeceptjs 3.3.0-beta.4 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/CHANGELOG.md +43 -1
  2. package/README.md +26 -0
  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 +58 -43
  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 +99 -70
  12. package/docs/build/Playwright.js +187 -109
  13. package/docs/build/Protractor.js +70 -32
  14. package/docs/build/Puppeteer.js +141 -98
  15. package/docs/build/REST.js +4 -1
  16. package/docs/build/TestCafe.js +96 -65
  17. package/docs/build/WebDriver.js +183 -133
  18. package/docs/changelog.md +92 -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 +113 -15
  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 +131 -29
  29. package/docs/helpers/Playwright.md +424 -215
  30. package/docs/helpers/Puppeteer.md +229 -92
  31. package/docs/helpers/REST.md +1 -1
  32. package/docs/helpers/TestCafe.md +166 -62
  33. package/docs/helpers/WebDriver.md +254 -103
  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/fillField.mustache +1 -0
  62. package/docs/webapi/forceClick.mustache +1 -0
  63. package/docs/webapi/forceRightClick.mustache +1 -0
  64. package/docs/webapi/grabDataFromPerformanceTiming.mustache +2 -1
  65. package/docs/webapi/moveCursorTo.mustache +1 -0
  66. package/docs/webapi/openNewTab.mustache +6 -4
  67. package/docs/webapi/pressKey.mustache +2 -1
  68. package/docs/webapi/pressKeyDown.mustache +1 -0
  69. package/docs/webapi/pressKeyUp.mustache +1 -0
  70. package/docs/webapi/pressKeyWithKeyNormalization.mustache +1 -0
  71. package/docs/webapi/refreshPage.mustache +1 -0
  72. package/docs/webapi/resizeWindow.mustache +2 -1
  73. package/docs/webapi/rightClick.mustache +1 -0
  74. package/docs/webapi/saveElementScreenshot.mustache +1 -0
  75. package/docs/webapi/saveScreenshot.mustache +2 -1
  76. package/docs/webapi/say.mustache +2 -1
  77. package/docs/webapi/scrollIntoView.mustache +1 -0
  78. package/docs/webapi/scrollPageToBottom.mustache +1 -0
  79. package/docs/webapi/scrollPageToTop.mustache +1 -0
  80. package/docs/webapi/scrollTo.mustache +2 -1
  81. package/docs/webapi/see.mustache +2 -1
  82. package/docs/webapi/seeAttributesOnElements.mustache +2 -1
  83. package/docs/webapi/seeCheckboxIsChecked.mustache +1 -0
  84. package/docs/webapi/seeCookie.mustache +1 -0
  85. package/docs/webapi/seeCssPropertiesOnElements.mustache +2 -1
  86. package/docs/webapi/seeCurrentUrlEquals.mustache +2 -1
  87. package/docs/webapi/seeElement.mustache +2 -1
  88. package/docs/webapi/seeElementInDOM.mustache +1 -0
  89. package/docs/webapi/seeInCurrentUrl.mustache +2 -1
  90. package/docs/webapi/seeInField.mustache +1 -0
  91. package/docs/webapi/seeInPopup.mustache +1 -0
  92. package/docs/webapi/seeInSource.mustache +2 -1
  93. package/docs/webapi/seeInTitle.mustache +2 -1
  94. package/docs/webapi/seeNumberOfElements.mustache +1 -0
  95. package/docs/webapi/seeNumberOfVisibleElements.mustache +1 -0
  96. package/docs/webapi/seeTextEquals.mustache +2 -1
  97. package/docs/webapi/seeTitleEquals.mustache +6 -5
  98. package/docs/webapi/selectOption.mustache +1 -0
  99. package/docs/webapi/setCookie.mustache +1 -0
  100. package/docs/webapi/setGeoLocation.mustache +1 -0
  101. package/docs/webapi/switchTo.mustache +2 -1
  102. package/docs/webapi/switchToNextTab.mustache +8 -7
  103. package/docs/webapi/switchToPreviousTab.mustache +8 -7
  104. package/docs/webapi/type.mustache +1 -0
  105. package/docs/webapi/uncheckOption.mustache +2 -1
  106. package/docs/webapi/wait.mustache +2 -1
  107. package/docs/webapi/waitForClickable.mustache +2 -1
  108. package/docs/webapi/waitForDetached.mustache +2 -1
  109. package/docs/webapi/waitForElement.mustache +2 -1
  110. package/docs/webapi/waitForEnabled.mustache +2 -1
  111. package/docs/webapi/waitForFunction.mustache +1 -0
  112. package/docs/webapi/waitForInvisible.mustache +2 -1
  113. package/docs/webapi/waitForText.mustache +2 -1
  114. package/docs/webapi/waitForValue.mustache +1 -0
  115. package/docs/webapi/waitForVisible.mustache +1 -0
  116. package/docs/webapi/waitInUrl.mustache +2 -1
  117. package/docs/webapi/waitNumberOfVisibleElements.mustache +2 -1
  118. package/docs/webapi/waitToHide.mustache +2 -1
  119. package/docs/webapi/waitUrlEquals.mustache +2 -1
  120. package/lib/command/definitions.js +9 -0
  121. package/lib/command/run.js +2 -2
  122. package/lib/command/workers/runTests.js +40 -0
  123. package/lib/helper/ApiDataFactory.js +4 -3
  124. package/lib/helper/Appium.js +7 -2
  125. package/lib/helper/GraphQL.js +4 -2
  126. package/lib/helper/GraphQLDataFactory.js +3 -3
  127. package/lib/helper/JSONResponse.js +1 -1
  128. package/lib/helper/Playwright.js +49 -13
  129. package/lib/helper/REST.js +4 -1
  130. package/lib/helper/WebDriver.js +6 -0
  131. package/lib/interfaces/bdd.js +5 -0
  132. package/lib/listener/steps.js +1 -0
  133. package/lib/plugin/fakerTransform.js +1 -1
  134. package/lib/plugin/stepByStepReport.js +8 -6
  135. package/lib/workers.js +12 -0
  136. package/package.json +4 -3
  137. package/typings/types.d.ts +598 -600
@@ -92,6 +92,7 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright
92
92
  * * `waitForTimeout`: (optional) default wait* timeout in ms. Default: 1000.
93
93
  * * `basicAuth`: (optional) the basic authentication to pass to base url. Example: {username: 'username', password: 'password'}
94
94
  * * `windowSize`: (optional) default window size. Set a dimension like `640x480`.
95
+ * * `colorScheme`: (optional) default color scheme. Possible values: `dark` | `light` | `no-preference`.
95
96
  * * `userAgent`: (optional) user-agent string.
96
97
  * * `locale`: (optional) locale string. Example: 'en-GB', 'de-DE', 'fr-FR', ...
97
98
  * * `manualStart`: (optional, default: false) - do not start browser before a test, start it manually inside a helper with `this.helpers["Playwright"]._startBrowser()`.
@@ -212,7 +213,7 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright
212
213
  * }
213
214
  * ```
214
215
  *
215
- * #### Example #7: Launch test with a specifc user locale
216
+ * #### Example #7: Launch test with a specific user locale
216
217
  *
217
218
  * ```js
218
219
  * {
@@ -225,6 +226,19 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright
225
226
  * }
226
227
  * ```
227
228
  *
229
+ * * #### Example #8: Launch test with a specific color scheme
230
+ *
231
+ * ```js
232
+ * {
233
+ * helpers: {
234
+ * Playwright : {
235
+ * url: "http://localhost",
236
+ * colorScheme: "dark",
237
+ * }
238
+ * }
239
+ * }
240
+ * ```
241
+ *
228
242
  * Note: When connecting to remote browser `show` and specific `chrome` options (e.g. `headless` or `devtools`) are ignored.
229
243
  *
230
244
  * ## Access From Helpers
@@ -273,7 +287,7 @@ class Playwright extends Helper {
273
287
  waitForAction: 100,
274
288
  waitForTimeout: 1000,
275
289
  pressKeyDelay: 10,
276
- timeout: 1000,
290
+ timeout: 5000,
277
291
  fullPageScreenshots: false,
278
292
  disableScreenshots: false,
279
293
  ignoreLog: ['warning', 'log'],
@@ -411,6 +425,7 @@ class Playwright extends Helper {
411
425
  if (this.storageState) contextOptions.storageState = this.storageState;
412
426
  if (this.options.userAgent) contextOptions.userAgent = this.options.userAgent;
413
427
  if (this.options.locale) contextOptions.locale = this.options.locale;
428
+ if (this.options.colorScheme) contextOptions.colorScheme = this.options.colorScheme;
414
429
  if (!this.browserContext || !restartsSession()) {
415
430
  this.browserContext = await this.browser.newContext(contextOptions); // Adding the HTTPSError ignore in the context so that we can ignore those errors
416
431
  }
@@ -539,6 +554,7 @@ class Playwright extends Helper {
539
554
  *
540
555
  * @param {string} description used to show in logs.
541
556
  * @param {function} fn async function that executed with Playwright helper as argument
557
+ * @return {Promise<any>}
542
558
  */
543
559
  usePlaywrightTo(description, fn) {
544
560
  return this._useTo(...arguments);
@@ -553,6 +569,7 @@ class Playwright extends Helper {
553
569
  * I.click('#triggerPopup');
554
570
  * I.acceptPopup();
555
571
  * ```
572
+ * @return {Promise<any>}
556
573
  */
557
574
  amAcceptingPopups() {
558
575
  popupStore.actionType = 'accept';
@@ -562,6 +579,7 @@ class Playwright extends Helper {
562
579
  * Accepts the active JavaScript native popup window, as created by window.alert|window.confirm|window.prompt.
563
580
  * Don't confuse popups with modal windows, as created by [various
564
581
  * libraries](http://jster.net/category/windows-modals-popups).
582
+ * @return {Promise<any>}
565
583
  */
566
584
  acceptPopup() {
567
585
  popupStore.assertPopupActionType('accept');
@@ -576,6 +594,7 @@ class Playwright extends Helper {
576
594
  * I.click('#triggerPopup');
577
595
  * I.cancelPopup();
578
596
  * ```
597
+ * @return {Promise<any>}
579
598
  */
580
599
  amCancellingPopups() {
581
600
  popupStore.actionType = 'cancel';
@@ -583,6 +602,7 @@ class Playwright extends Helper {
583
602
 
584
603
  /**
585
604
  * Dismisses the active JavaScript popup, as created by window.alert|window.confirm|window.prompt.
605
+ * @return {Promise<any>}
586
606
  */
587
607
  cancelPopup() {
588
608
  popupStore.assertPopupActionType('cancel');
@@ -596,7 +616,7 @@ class Playwright extends Helper {
596
616
  * I.seeInPopup('Popup text');
597
617
  * ```
598
618
  * @param {string} text value to check.
599
- *
619
+ * @return {Promise<any>}
600
620
  */
601
621
  async seeInPopup(text) {
602
622
  popupStore.assertPopupVisible();
@@ -607,6 +627,7 @@ class Playwright extends Helper {
607
627
  /**
608
628
  * Set current page
609
629
  * @param {object} page page to set
630
+ * @return {Promise<any>}
610
631
  */
611
632
  async _setPage(page) {
612
633
  page = await page;
@@ -631,6 +652,7 @@ class Playwright extends Helper {
631
652
  /**
632
653
  * Add the 'dialog' event listener to a page
633
654
  * @page {playwright.Page}
655
+ * @return {Promise<any>}
634
656
  *
635
657
  * The popup listener handles the dialog with the predefined action when it appears on the page.
636
658
  * It also saves a reference to the object which is used in seeInPopup.
@@ -661,6 +683,7 @@ class Playwright extends Helper {
661
683
 
662
684
  /**
663
685
  * Gets page URL including hash.
686
+ * @return {Promise<any>}
664
687
  */
665
688
  async _getPageUrl() {
666
689
  return this.executeScript(() => window.location.href);
@@ -777,6 +800,7 @@ class Playwright extends Helper {
777
800
  * ```
778
801
  *
779
802
  * @param {string} url url path or global url.
803
+ * @return {Promise<any>}
780
804
  */
781
805
  async amOnPage(url) {
782
806
  if (this.isElectron) {
@@ -814,6 +838,7 @@ class Playwright extends Helper {
814
838
  *
815
839
  * @param {number} width width in pixels or `maximize`.
816
840
  * @param {number} height height in pixels.
841
+ * @return {Promise<any>}
817
842
  *
818
843
  * Unlike other drivers Playwright changes the size of a viewport, not the window!
819
844
  * Playwright does not control the window of a browser so it can't adjust its real size.
@@ -846,6 +871,7 @@ class Playwright extends Helper {
846
871
  * ```
847
872
  *
848
873
  * @param {object} customHeaders headers to set
874
+ * @return {Promise<any>}
849
875
  */
850
876
  async haveRequestHeaders(customHeaders) {
851
877
  if (!customHeaders) {
@@ -863,10 +889,10 @@ class Playwright extends Helper {
863
889
  * I.moveCursorTo('#submit', 5,5);
864
890
  * ```
865
891
  *
866
- * @param {string | object} locator located by CSS|XPath|strict locator.
892
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
867
893
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
868
894
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
869
- *
895
+ * @return {Promise<any>}
870
896
  *
871
897
  */
872
898
  async moveCursorTo(locator, offsetX = 0, offsetY = 0) {
@@ -886,11 +912,11 @@ class Playwright extends Helper {
886
912
  * I.dragAndDrop('#dragHandle', '#container');
887
913
  * ```
888
914
  *
889
- * @param {string | object} srcElement located by CSS|XPath|strict locator.
890
- * @param {string | object} destElement located by CSS|XPath|strict locator.
891
- *
915
+ * @param {LocatorOrString} srcElement located by CSS|XPath|strict locator.
916
+ * @param {LocatorOrString} destElement located by CSS|XPath|strict locator.
917
+ * @return {Promise<any>}
892
918
  *
893
- * [Additional options](https://playwright.dev/docs/api/class-page#page-drag-and-drop) can be passed as 3rd argument.
919
+ * @param {any} [options] [Additional options](https://playwright.dev/docs/api/class-page#page-drag-and-drop) can be passed as 3rd argument.
894
920
  *
895
921
  * ```js
896
922
  * // specify coordinates for source position
@@ -912,7 +938,7 @@ class Playwright extends Helper {
912
938
  * ```js
913
939
  * I.refreshPage();
914
940
  * ```
915
- *
941
+ * @return {Promise<any>}
916
942
  */
917
943
  async refreshPage() {
918
944
  return this.page.reload({ timeout: this.options.getPageTimeout, waitUntil: this.options.waitForNavigation });
@@ -924,7 +950,7 @@ class Playwright extends Helper {
924
950
  * ```js
925
951
  * I.scrollPageToTop();
926
952
  * ```
927
- *
953
+ * @return {Promise<any>}
928
954
  */
929
955
  scrollPageToTop() {
930
956
  return this.executeScript(() => {
@@ -938,9 +964,9 @@ class Playwright extends Helper {
938
964
  * ```js
939
965
  * I.scrollPageToBottom();
940
966
  * ```
941
- *
967
+ * @return {Promise<any>}
942
968
  */
943
- scrollPageToBottom() {
969
+ async scrollPageToBottom() {
944
970
  return this.executeScript(() => {
945
971
  const body = document.body;
946
972
  const html = document.documentElement;
@@ -960,9 +986,10 @@ class Playwright extends Helper {
960
986
  * I.scrollTo('#submit', 5, 5);
961
987
  * ```
962
988
  *
963
- * @param {string | object} locator located by CSS|XPath|strict locator.
989
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
964
990
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
965
991
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
992
+ * @return {Promise<any>}
966
993
  */
967
994
  async scrollTo(locator, offsetX = 0, offsetY = 0) {
968
995
  if (typeof locator === 'number' && typeof offsetX === 'number') {
@@ -991,6 +1018,7 @@ class Playwright extends Helper {
991
1018
  * ```
992
1019
  *
993
1020
  * @param {string} text text value to check.
1021
+ * @return {Promise<any>}
994
1022
  */
995
1023
  async seeInTitle(text) {
996
1024
  const title = await this.page.title();
@@ -1021,14 +1049,14 @@ class Playwright extends Helper {
1021
1049
  }
1022
1050
 
1023
1051
  /**
1024
- * Checks that title is equal to provided one.
1052
+ * Checks that title is equal to provided one.
1025
1053
  *
1026
- * ```js
1027
- * I.seeTitleEquals('Test title.');
1028
- * ```
1029
- *
1030
- * @param {string} text value to check.
1054
+ * ```js
1055
+ * I.seeTitleEquals('Test title.');
1056
+ * ```
1031
1057
  *
1058
+ * @param {string} text value to check.
1059
+ * @return {Promise<any>}
1032
1060
  */
1033
1061
  async seeTitleEquals(text) {
1034
1062
  const title = await this.page.title();
@@ -1043,6 +1071,7 @@ class Playwright extends Helper {
1043
1071
  * ```
1044
1072
  *
1045
1073
  * @param {string} text value to check.
1074
+ * @return {Promise<any>}
1046
1075
  */
1047
1076
  async dontSeeInTitle(text) {
1048
1077
  const title = await this.page.title();
@@ -1070,8 +1099,7 @@ class Playwright extends Helper {
1070
1099
  * ```js
1071
1100
  * const elements = await this.helpers['Playwright']._locate({name: 'password'});
1072
1101
  * ```
1073
- *
1074
- *
1102
+ * @return {Promise<any>}
1075
1103
  */
1076
1104
  async _locate(locator) {
1077
1105
  const context = await this.context || await this._getContext();
@@ -1085,6 +1113,7 @@ class Playwright extends Helper {
1085
1113
  * ```js
1086
1114
  * this.helpers['Playwright']._locateCheckable('I agree with terms and conditions').then // ...
1087
1115
  * ```
1116
+ * @return {Promise<any>}
1088
1117
  */
1089
1118
  async _locateCheckable(locator, providedContext = null) {
1090
1119
  const context = providedContext || await this._getContext();
@@ -1099,6 +1128,7 @@ class Playwright extends Helper {
1099
1128
  * ```js
1100
1129
  * this.helpers['Playwright']._locateClickable('Next page').then // ...
1101
1130
  * ```
1131
+ * @return {Promise<any>}
1102
1132
  */
1103
1133
  async _locateClickable(locator) {
1104
1134
  const context = await this._getContext();
@@ -1111,6 +1141,7 @@ class Playwright extends Helper {
1111
1141
  * ```js
1112
1142
  * this.helpers['Playwright']._locateFields('Your email').then // ...
1113
1143
  * ```
1144
+ * @return {Promise<any>}
1114
1145
  */
1115
1146
  async _locateFields(locator) {
1116
1147
  return findFields.call(this, locator);
@@ -1125,6 +1156,7 @@ class Playwright extends Helper {
1125
1156
  * ```
1126
1157
  *
1127
1158
  * @param {number} [num=1]
1159
+ * @return {Promise<any>}
1128
1160
  */
1129
1161
  async switchToNextTab(num = 1) {
1130
1162
  if (this.isElectron) {
@@ -1151,6 +1183,7 @@ class Playwright extends Helper {
1151
1183
  * I.switchToPreviousTab(2);
1152
1184
  * ```
1153
1185
  * @param {number} [num=1]
1186
+ * @return {Promise<any>}
1154
1187
  */
1155
1188
  async switchToPreviousTab(num = 1) {
1156
1189
  if (this.isElectron) {
@@ -1175,6 +1208,7 @@ class Playwright extends Helper {
1175
1208
  * ```js
1176
1209
  * I.closeCurrentTab();
1177
1210
  * ```
1211
+ * @return {Promise<any>}
1178
1212
  */
1179
1213
  async closeCurrentTab() {
1180
1214
  if (this.isElectron) {
@@ -1192,6 +1226,7 @@ class Playwright extends Helper {
1192
1226
  * ```js
1193
1227
  * I.closeOtherTabs();
1194
1228
  * ```
1229
+ * @return {Promise<any>}
1195
1230
  */
1196
1231
  async closeOtherTabs() {
1197
1232
  const pages = await this.browserContext.pages();
@@ -1216,6 +1251,7 @@ class Playwright extends Helper {
1216
1251
  * // enable mobile
1217
1252
  * I.openNewTab({ isMobile: true });
1218
1253
  * ```
1254
+ * @return {Promise<any>}
1219
1255
  */
1220
1256
  async openNewTab(options) {
1221
1257
  if (this.isElectron) {
@@ -1248,7 +1284,8 @@ class Playwright extends Helper {
1248
1284
  * ```js
1249
1285
  * I.seeElement('#modal');
1250
1286
  * ```
1251
- * @param {string | object} locator located by CSS|XPath|strict locator.
1287
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1288
+ * @return {Promise<any>}
1252
1289
  *
1253
1290
  */
1254
1291
  async seeElement(locator) {
@@ -1264,7 +1301,8 @@ class Playwright extends Helper {
1264
1301
  * I.dontSeeElement('.modal'); // modal is not shown
1265
1302
  * ```
1266
1303
  *
1267
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1304
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1305
+ * @return {Promise<any>}
1268
1306
  *
1269
1307
  */
1270
1308
  async dontSeeElement(locator) {
@@ -1280,8 +1318,8 @@ class Playwright extends Helper {
1280
1318
  * ```js
1281
1319
  * I.seeElementInDOM('#modal');
1282
1320
  * ```
1283
- * @param {string | object} locator element located by CSS|XPath|strict locator.
1284
- *
1321
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1322
+ * @return {Promise<any>}
1285
1323
  */
1286
1324
  async seeElementInDOM(locator) {
1287
1325
  const els = await this._locate(locator);
@@ -1295,7 +1333,8 @@ class Playwright extends Helper {
1295
1333
  * I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or not
1296
1334
  * ```
1297
1335
  *
1298
- * @param {string | object} locator located by CSS|XPath|Strict locator.
1336
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1337
+ * @return {Promise<any>}
1299
1338
  */
1300
1339
  async dontSeeElementInDOM(locator) {
1301
1340
  const els = await this._locate(locator);
@@ -1317,6 +1356,7 @@ class Playwright extends Helper {
1317
1356
  * ```
1318
1357
  *
1319
1358
  * @param {string} [fileName] set filename for downloaded file
1359
+ * @return {Promise<void>}
1320
1360
  */
1321
1361
  async handleDownloads(fileName = 'downloads') {
1322
1362
  this.page.waitForEvent('download').then(async (download) => {
@@ -1355,11 +1395,12 @@ class Playwright extends Helper {
1355
1395
  * I.click({css: 'nav a.login'});
1356
1396
  * ```
1357
1397
  *
1358
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1359
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1398
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1399
+ * @param {?CodeceptJS.LocatorOrString | null} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1400
+ * @return {Promise<any>}
1360
1401
  *
1361
1402
  *
1362
- * [Additional options](https://playwright.dev/docs/api/class-page#page-click) for click available as 3rd argument.
1403
+ * @param {any} [opts] [Additional options](https://playwright.dev/docs/api/class-page#page-click) for click available as 3rd argument.
1363
1404
  *
1364
1405
  * Examples:
1365
1406
  *
@@ -1378,6 +1419,7 @@ class Playwright extends Helper {
1378
1419
 
1379
1420
  /**
1380
1421
  * Clicks link and waits for navigation (deprecated)
1422
+ * @return {Promise<any>}
1381
1423
  */
1382
1424
  async clickLink(locator, context = null) {
1383
1425
  console.log('clickLink deprecated: Playwright automatically waits for navigation to happen.');
@@ -1411,8 +1453,9 @@ class Playwright extends Helper {
1411
1453
  * I.forceClick({css: 'nav a.login'});
1412
1454
  * ```
1413
1455
  *
1414
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1415
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1456
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1457
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1458
+ * @return {Promise<any>}
1416
1459
  *
1417
1460
  */
1418
1461
  async forceClick(locator, context = null) {
@@ -1430,9 +1473,9 @@ class Playwright extends Helper {
1430
1473
  * I.doubleClick('.btn.edit');
1431
1474
  * ```
1432
1475
  *
1433
- * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1434
- * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1435
- *
1476
+ * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1477
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1478
+ * @return {Promise<any>}
1436
1479
  *
1437
1480
  *
1438
1481
  */
@@ -1452,9 +1495,9 @@ class Playwright extends Helper {
1452
1495
  * I.rightClick('Click me', '.context');
1453
1496
  * ```
1454
1497
  *
1455
- * @param {string | object} locator clickable element located by CSS|XPath|strict locator.
1456
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1457
- *
1498
+ * @param {CodeceptJS.LocatorOrString} locator clickable element located by CSS|XPath|strict locator.
1499
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1500
+ * @return {Promise<any>}
1458
1501
  *
1459
1502
  *
1460
1503
  */
@@ -1473,8 +1516,9 @@ class Playwright extends Helper {
1473
1516
  * I.checkOption('I Agree to Terms and Conditions');
1474
1517
  * I.checkOption('agree', '//form');
1475
1518
  * ```
1476
- * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1477
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1519
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1520
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1521
+ * @return {Promise<any>}
1478
1522
  *
1479
1523
  * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-check) for check available as 3rd argument.
1480
1524
  *
@@ -1503,8 +1547,9 @@ class Playwright extends Helper {
1503
1547
  * I.uncheckOption('I Agree to Terms and Conditions');
1504
1548
  * I.uncheckOption('agree', '//form');
1505
1549
  * ```
1506
- * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1507
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1550
+ * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1551
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1552
+ * @return {Promise<any>}
1508
1553
  *
1509
1554
  * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-uncheck) for uncheck available as 3rd argument.
1510
1555
  *
@@ -1531,8 +1576,8 @@ class Playwright extends Helper {
1531
1576
  * I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
1532
1577
  * ```
1533
1578
  *
1534
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1535
- *
1579
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1580
+ * @return {Promise<any>}
1536
1581
  */
1537
1582
  async seeCheckboxIsChecked(field) {
1538
1583
  return proceedIsChecked.call(this, 'assert', field);
@@ -1547,8 +1592,8 @@ class Playwright extends Helper {
1547
1592
  * I.dontSeeCheckboxIsChecked('agree'); // located by name
1548
1593
  * ```
1549
1594
  *
1550
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1551
- *
1595
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1596
+ * @return {Promise<any>}
1552
1597
  */
1553
1598
  async dontSeeCheckboxIsChecked(field) {
1554
1599
  return proceedIsChecked.call(this, 'negate', field);
@@ -1566,7 +1611,7 @@ class Playwright extends Helper {
1566
1611
  * ```
1567
1612
  *
1568
1613
  * @param {string} key name of key to press down.
1569
- *
1614
+ * @return {Promise<any>}
1570
1615
  */
1571
1616
  async pressKeyDown(key) {
1572
1617
  key = getNormalizedKey.call(this, key);
@@ -1586,7 +1631,7 @@ class Playwright extends Helper {
1586
1631
  * ```
1587
1632
  *
1588
1633
  * @param {string} key name of key to release.
1589
- *
1634
+ * @return {Promise<any>}
1590
1635
  */
1591
1636
  async pressKeyUp(key) {
1592
1637
  key = getNormalizedKey.call(this, key);
@@ -1654,6 +1699,7 @@ class Playwright extends Helper {
1654
1699
  * - `'Tab'`
1655
1700
  *
1656
1701
  * @param {string|string[]} key key or array of keys to press.
1702
+ * @return {Promise<any>}
1657
1703
  *
1658
1704
  *
1659
1705
  * _Note:_ Shortcuts like `'Meta'` + `'A'` do not work on macOS ([GoogleChrome/Puppeteer#1313](https://github.com/GoogleChrome/puppeteer/issues/1313)).
@@ -1701,7 +1747,7 @@ class Playwright extends Helper {
1701
1747
  *
1702
1748
  * @param {string|string[]} key or array of keys to type.
1703
1749
  * @param {?number} [delay=null] (optional) delay in ms between key presses
1704
- *
1750
+ * @return {Promise<any>}
1705
1751
  */
1706
1752
  async type(keys, delay = null) {
1707
1753
  if (!Array.isArray(keys)) {
@@ -1728,9 +1774,9 @@ class Playwright extends Helper {
1728
1774
  * // or by strict locator
1729
1775
  * I.fillField({css: 'form#login input[name=username]'}, 'John');
1730
1776
  * ```
1731
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1732
- * @param {string | object} value text value to fill.
1733
- *
1777
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1778
+ * @param {CodeceptJS.StringOrSecret} value text value to fill.
1779
+ * @return {Promise<any>}
1734
1780
  *
1735
1781
  */
1736
1782
  async fillField(field, value) {
@@ -1756,8 +1802,8 @@ class Playwright extends Helper {
1756
1802
  * I.clearField('user[email]');
1757
1803
  * I.clearField('#email');
1758
1804
  * ```
1759
- * @param {string | object} editable field located by label|name|CSS|XPath|strict locator.
1760
- *
1805
+ * @param {LocatorOrString} editable field located by label|name|CSS|XPath|strict locator.
1806
+ * @return {Promise<any>}
1761
1807
  */
1762
1808
  async clearField(field) {
1763
1809
  return this.fillField(field, '');
@@ -1770,8 +1816,9 @@ class Playwright extends Helper {
1770
1816
  * ```js
1771
1817
  * I.appendField('#myTextField', 'appended');
1772
1818
  * ```
1773
- * @param {string | object} field located by label|name|CSS|XPath|strict locator
1819
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator
1774
1820
  * @param {string} value text value to append.
1821
+ * @return {Promise<any>}
1775
1822
  *
1776
1823
  *
1777
1824
  */
@@ -1793,9 +1840,9 @@ class Playwright extends Helper {
1793
1840
  * I.seeInField('form input[type=hidden]','hidden_value');
1794
1841
  * I.seeInField('#searchform input','Search');
1795
1842
  * ```
1796
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1843
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1797
1844
  * @param {string} value value to check.
1798
- *
1845
+ * @return {Promise<any>}
1799
1846
  */
1800
1847
  async seeInField(field, value) {
1801
1848
  return proceedSeeInField.call(this, 'assert', field, value);
@@ -1810,8 +1857,9 @@ class Playwright extends Helper {
1810
1857
  * I.dontSeeInField({ css: 'form input.email' }, 'user@user.com'); // field by CSS
1811
1858
  * ```
1812
1859
  *
1813
- * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1860
+ * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1814
1861
  * @param {string} value value to check.
1862
+ * @return {Promise<any>}
1815
1863
  */
1816
1864
  async dontSeeInField(field, value) {
1817
1865
  return proceedSeeInField.call(this, 'negate', field, value);
@@ -1827,8 +1875,9 @@ class Playwright extends Helper {
1827
1875
  * I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
1828
1876
  * ```
1829
1877
  *
1830
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1878
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1831
1879
  * @param {string} pathToFile local file path relative to codecept.json config file.
1880
+ * @return {Promise<any>}
1832
1881
  *
1833
1882
  */
1834
1883
  async attachFile(locator, pathToFile) {
@@ -1862,9 +1911,9 @@ class Playwright extends Helper {
1862
1911
  * ```js
1863
1912
  * I.selectOption('Which OS do you use?', ['Android', 'iOS']);
1864
1913
  * ```
1865
- * @param {string | object} select field located by label|name|CSS|XPath|strict locator.
1914
+ * @param {LocatorOrString} select field located by label|name|CSS|XPath|strict locator.
1866
1915
  * @param {string|Array<*>} option visible text or value of option.
1867
- *
1916
+ * @return {Promise<any>}
1868
1917
  */
1869
1918
  async selectOption(select, option) {
1870
1919
  const els = await findFields.call(this, select);
@@ -1903,7 +1952,7 @@ class Playwright extends Helper {
1903
1952
  * let numOfElements = await I.grabNumberOfVisibleElements('p');
1904
1953
  * ```
1905
1954
  *
1906
- * @param {string | object} locator located by CSS|XPath|strict locator.
1955
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1907
1956
  * @returns {Promise<number>} number of visible elements
1908
1957
  *
1909
1958
  */
@@ -1921,6 +1970,7 @@ class Playwright extends Helper {
1921
1970
  * ```
1922
1971
  *
1923
1972
  * @param {string} url a fragment to check
1973
+ * @return {Promise<any>}
1924
1974
  */
1925
1975
  async seeInCurrentUrl(url) {
1926
1976
  stringIncludes('url').assert(url, await this._getPageUrl());
@@ -1930,6 +1980,7 @@ class Playwright extends Helper {
1930
1980
  * Checks that current url does not contain a provided fragment.
1931
1981
  *
1932
1982
  * @param {string} url value to check.
1983
+ * @return {Promise<any>}
1933
1984
  */
1934
1985
  async dontSeeInCurrentUrl(url) {
1935
1986
  stringIncludes('url').negate(url, await this._getPageUrl());
@@ -1946,6 +1997,7 @@ class Playwright extends Helper {
1946
1997
  * ```
1947
1998
  *
1948
1999
  * @param {string} url value to check.
2000
+ * @return {Promise<any>}
1949
2001
  */
1950
2002
  async seeCurrentUrlEquals(url) {
1951
2003
  urlEquals(this.options.url).assert(url, await this._getPageUrl());
@@ -1961,6 +2013,7 @@ class Playwright extends Helper {
1961
2013
  * ```
1962
2014
  *
1963
2015
  * @param {string} url value to check.
2016
+ * @return {Promise<any>}
1964
2017
  */
1965
2018
  async dontSeeCurrentUrlEquals(url) {
1966
2019
  urlEquals(this.options.url).negate(url, await this._getPageUrl());
@@ -1976,7 +2029,8 @@ class Playwright extends Helper {
1976
2029
  * I.see('Register', {css: 'form.register'}); // use strict locator
1977
2030
  * ```
1978
2031
  * @param {string} text expected on page.
1979
- * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
2032
+ * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
2033
+ * @return {Promise<any>}
1980
2034
  *
1981
2035
  *
1982
2036
  */
@@ -1992,7 +2046,8 @@ class Playwright extends Helper {
1992
2046
  * ```
1993
2047
  *
1994
2048
  * @param {string} text element value to check.
1995
- * @param {(string | object)?} [context=null] element located by CSS|XPath|strict locator.
2049
+ * @param {CodeceptJS.LocatorOrString?} [context=null] element located by CSS|XPath|strict locator.
2050
+ * @return {Promise<any>}
1996
2051
  */
1997
2052
  async seeTextEquals(text, context = null) {
1998
2053
  return proceedSee.call(this, 'assert', text, context, true);
@@ -2008,8 +2063,8 @@ class Playwright extends Helper {
2008
2063
  * ```
2009
2064
  *
2010
2065
  * @param {string} text which is not present.
2011
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
2012
- *
2066
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
2067
+ * @return {Promise<any>}
2013
2068
  *
2014
2069
  *
2015
2070
  */
@@ -2068,6 +2123,7 @@ class Playwright extends Helper {
2068
2123
  * I.seeInSource('<h1>Green eggs &amp; ham</h1>');
2069
2124
  * ```
2070
2125
  * @param {string} text value to check.
2126
+ * @return {Promise<any>}
2071
2127
  */
2072
2128
  async seeInSource(text) {
2073
2129
  const source = await this.page.content();
@@ -2082,7 +2138,7 @@ class Playwright extends Helper {
2082
2138
  * ```
2083
2139
  *
2084
2140
  * @param {string} value to check.
2085
- *
2141
+ * @return {Promise<any>}
2086
2142
  */
2087
2143
  async dontSeeInSource(text) {
2088
2144
  const source = await this.page.content();
@@ -2098,9 +2154,9 @@ class Playwright extends Helper {
2098
2154
  * I.seeNumberOfElements('#submitBtn', 1);
2099
2155
  * ```
2100
2156
  *
2101
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2157
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2102
2158
  * @param {number} num number of elements.
2103
- *
2159
+ * @return {Promise<any>}
2104
2160
  *
2105
2161
  *
2106
2162
  */
@@ -2117,9 +2173,9 @@ class Playwright extends Helper {
2117
2173
  * I.seeNumberOfVisibleElements('.buttons', 3);
2118
2174
  * ```
2119
2175
  *
2120
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2176
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2121
2177
  * @param {number} num number of elements.
2122
- *
2178
+ * @return {Promise<any>}
2123
2179
  *
2124
2180
  *
2125
2181
  */
@@ -2144,7 +2200,7 @@ class Playwright extends Helper {
2144
2200
  * ```
2145
2201
  *
2146
2202
  * @param {Cookie|Array<Cookie>} cookie a cookie object or array of cookie objects.
2147
- *
2203
+ * @return {Promise<any>}
2148
2204
  */
2149
2205
  async setCookie(cookie) {
2150
2206
  if (Array.isArray(cookie)) {
@@ -2161,7 +2217,7 @@ class Playwright extends Helper {
2161
2217
  * ```
2162
2218
  *
2163
2219
  * @param {string} name cookie name.
2164
- *
2220
+ * @return {Promise<any>}
2165
2221
  *
2166
2222
  */
2167
2223
  async seeCookie(name) {
@@ -2177,6 +2233,7 @@ class Playwright extends Helper {
2177
2233
  * ```
2178
2234
  *
2179
2235
  * @param {string} name cookie name.
2236
+ * @return {Promise<any>}
2180
2237
  */
2181
2238
  async dontSeeCookie(name) {
2182
2239
  const cookies = await this.browserContext.cookies();
@@ -2216,6 +2273,7 @@ class Playwright extends Helper {
2216
2273
  * ```
2217
2274
  *
2218
2275
  * @param {?string} [cookie=null] (optional, `null` by default) cookie name
2276
+ * @return {Promise<any>}
2219
2277
  */
2220
2278
  async clearCookie() {
2221
2279
  // Playwright currently doesn't support to delete a certain cookie
@@ -2281,7 +2339,7 @@ class Playwright extends Helper {
2281
2339
  * ```
2282
2340
  * If multiple elements found returns first element.
2283
2341
  *
2284
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2342
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2285
2343
  * @returns {Promise<string>} attribute value
2286
2344
  *
2287
2345
  *
@@ -2302,7 +2360,7 @@ class Playwright extends Helper {
2302
2360
  * let pins = await I.grabTextFromAll('#pin li');
2303
2361
  * ```
2304
2362
  *
2305
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2363
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2306
2364
  * @returns {Promise<string[]>} attribute value
2307
2365
  *
2308
2366
  *
@@ -2325,7 +2383,7 @@ class Playwright extends Helper {
2325
2383
  * ```js
2326
2384
  * let email = await I.grabValueFrom('input[name=email]');
2327
2385
  * ```
2328
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2386
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2329
2387
  * @returns {Promise<string>} attribute value
2330
2388
  *
2331
2389
  */
@@ -2343,7 +2401,7 @@ class Playwright extends Helper {
2343
2401
  * ```js
2344
2402
  * let inputs = await I.grabValueFromAll('//form/input');
2345
2403
  * ```
2346
- * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2404
+ * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2347
2405
  * @returns {Promise<string[]>} attribute value
2348
2406
  *
2349
2407
  */
@@ -2362,7 +2420,7 @@ class Playwright extends Helper {
2362
2420
  * let postHTML = await I.grabHTMLFrom('#post');
2363
2421
  * ```
2364
2422
  *
2365
- * @param {string | object} element located by CSS|XPath|strict locator.
2423
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
2366
2424
  * @returns {Promise<string>} HTML code for an element
2367
2425
  *
2368
2426
  */
@@ -2381,7 +2439,7 @@ class Playwright extends Helper {
2381
2439
  * let postHTMLs = await I.grabHTMLFromAll('.post');
2382
2440
  * ```
2383
2441
  *
2384
- * @param {string | object} element located by CSS|XPath|strict locator.
2442
+ * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
2385
2443
  * @returns {Promise<string[]>} HTML code for an element
2386
2444
  *
2387
2445
  */
@@ -2400,7 +2458,7 @@ class Playwright extends Helper {
2400
2458
  * const value = await I.grabCssPropertyFrom('h3', 'font-weight');
2401
2459
  * ```
2402
2460
  *
2403
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2461
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2404
2462
  * @param {string} cssProperty CSS property name.
2405
2463
  * @returns {Promise<string>} CSS value
2406
2464
  *
@@ -2421,7 +2479,7 @@ class Playwright extends Helper {
2421
2479
  * const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
2422
2480
  * ```
2423
2481
  *
2424
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2482
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2425
2483
  * @param {string} cssProperty CSS property name.
2426
2484
  * @returns {Promise<string[]>} CSS value
2427
2485
  *
@@ -2442,8 +2500,9 @@ class Playwright extends Helper {
2442
2500
  * I.seeCssPropertiesOnElements('h3', { 'font-weight': "bold"});
2443
2501
  * ```
2444
2502
  *
2445
- * @param {string | object} locator located by CSS|XPath|strict locator.
2503
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2446
2504
  * @param {object} cssProperties object with CSS properties and their values to check.
2505
+ * @return {Promise<any>}
2447
2506
  *
2448
2507
  */
2449
2508
  async seeCssPropertiesOnElements(locator, cssProperties) {
@@ -2487,8 +2546,9 @@ class Playwright extends Helper {
2487
2546
  * I.seeAttributesOnElements('//form', { method: "post"});
2488
2547
  * ```
2489
2548
  *
2490
- * @param {string | object} locator located by CSS|XPath|strict locator.
2549
+ * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2491
2550
  * @param {object} attributes attributes and their values to check.
2551
+ * @return {Promise<any>}
2492
2552
  *
2493
2553
  */
2494
2554
  async seeAttributesOnElements(locator, attributes) {
@@ -2525,8 +2585,9 @@ class Playwright extends Helper {
2525
2585
  * I.dragSlider('#slider', -70);
2526
2586
  * ```
2527
2587
  *
2528
- * @param {string | object} locator located by label|name|CSS|XPath|strict locator.
2588
+ * @param {CodeceptJS.LocatorOrString} locator located by label|name|CSS|XPath|strict locator.
2529
2589
  * @param {number} offsetX position to drag.
2590
+ * @return {Promise<any>}
2530
2591
  *
2531
2592
  */
2532
2593
  async dragSlider(locator, offsetX = 0) {
@@ -2555,7 +2616,7 @@ class Playwright extends Helper {
2555
2616
  * ```js
2556
2617
  * let hint = await I.grabAttributeFrom('#tooltip', 'title');
2557
2618
  * ```
2558
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2619
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2559
2620
  * @param {string} attr attribute name.
2560
2621
  * @returns {Promise<string>} attribute value
2561
2622
  *
@@ -2575,7 +2636,7 @@ class Playwright extends Helper {
2575
2636
  * ```js
2576
2637
  * let hints = await I.grabAttributeFromAll('.tooltip', 'title');
2577
2638
  * ```
2578
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2639
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2579
2640
  * @param {string} attr attribute name.
2580
2641
  * @returns {Promise<string[]>} attribute value
2581
2642
  *
@@ -2602,9 +2663,9 @@ class Playwright extends Helper {
2602
2663
  * I.saveElementScreenshot(`#submit`,'debug.png');
2603
2664
  * ```
2604
2665
  *
2605
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2666
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2606
2667
  * @param {string} fileName file name to save.
2607
- *
2668
+ * @return {Promise<any>}
2608
2669
  *
2609
2670
  */
2610
2671
  async saveElementScreenshot(locator, fileName) {
@@ -2630,6 +2691,7 @@ class Playwright extends Helper {
2630
2691
  *
2631
2692
  * @param {string} fileName file name to save.
2632
2693
  * @param {boolean} [fullPage=false] (optional, `false` by default) flag to enable fullscreen screenshot mode.
2694
+ * @return {Promise<any>}
2633
2695
  */
2634
2696
  async saveScreenshot(fileName, fullPage) {
2635
2697
  const fullPageOption = fullPage || this.options.fullPageScreenshots;
@@ -2706,7 +2768,7 @@ class Playwright extends Helper {
2706
2768
  test.artifacts = {};
2707
2769
  }
2708
2770
 
2709
- if (this.options.recordVideo && this.page.video()) {
2771
+ if (this.options.recordVideo && this.page && this.page.video()) {
2710
2772
  test.artifacts.video = await this.page.video().path();
2711
2773
  }
2712
2774
 
@@ -2718,7 +2780,7 @@ class Playwright extends Helper {
2718
2780
  }
2719
2781
 
2720
2782
  async _passed(test) {
2721
- if (this.options.recordVideo && this.page.video()) {
2783
+ if (this.options.recordVideo && this.page && this.page.video()) {
2722
2784
  if (this.options.keepVideoForPassedTests) {
2723
2785
  test.artifacts.video = await this.page.video().path();
2724
2786
  } else {
@@ -2745,6 +2807,7 @@ class Playwright extends Helper {
2745
2807
  * ```
2746
2808
  *
2747
2809
  * @param {number} sec number of second to wait.
2810
+ * @return {Promise<any>}
2748
2811
  */
2749
2812
  async wait(sec) {
2750
2813
  return new Promise(((done) => {
@@ -2756,8 +2819,9 @@ class Playwright extends Helper {
2756
2819
  * Waits for element to become enabled (by default waits for 1sec).
2757
2820
  * Element can be located by CSS or XPath.
2758
2821
  *
2759
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2822
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2760
2823
  * @param {number} [sec=1] (optional) time in seconds to wait, 1 by default.
2824
+ * @return {Promise<any>}
2761
2825
  */
2762
2826
  async waitForEnabled(locator, sec) {
2763
2827
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -2789,10 +2853,10 @@ class Playwright extends Helper {
2789
2853
  * I.waitForValue('//input', "GoodValue");
2790
2854
  * ```
2791
2855
  *
2792
- * @param {string | object} field input field.
2856
+ * @param {LocatorOrString} field input field.
2793
2857
  * @param {string }value expected value.
2794
2858
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2795
- *
2859
+ * @return {Promise<any>}
2796
2860
  */
2797
2861
  async waitForValue(field, value, sec) {
2798
2862
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -2825,9 +2889,10 @@ class Playwright extends Helper {
2825
2889
  * I.waitNumberOfVisibleElements('a', 3);
2826
2890
  * ```
2827
2891
  *
2828
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2892
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2829
2893
  * @param {number} num number of elements.
2830
2894
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2895
+ * @return {Promise<any>}
2831
2896
  *
2832
2897
  */
2833
2898
  async waitNumberOfVisibleElements(locator, num, sec) {
@@ -2866,8 +2931,9 @@ class Playwright extends Helper {
2866
2931
  * I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2867
2932
  * ```
2868
2933
  *
2869
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2934
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2870
2935
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2936
+ * @return {Promise<any>}
2871
2937
  */
2872
2938
  async waitForClickable(locator, waitTimeout) {
2873
2939
  console.log('I.waitForClickable is DEPRECATED: This is no longer needed, Playwright automatically waits for element to be clickable');
@@ -2883,8 +2949,9 @@ class Playwright extends Helper {
2883
2949
  * I.waitForElement('.btn.continue', 5); // wait for 5 secs
2884
2950
  * ```
2885
2951
  *
2886
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2952
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2887
2953
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
2954
+ * @return {Promise<any>}
2888
2955
  *
2889
2956
  */
2890
2957
  async waitForElement(locator, sec) {
@@ -2906,9 +2973,9 @@ class Playwright extends Helper {
2906
2973
  * I.waitForVisible('#popup');
2907
2974
  * ```
2908
2975
  *
2909
- * @param {string | object} locator element located by CSS|XPath|strict locator.
2976
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2910
2977
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
2911
- *
2978
+ * @return {Promise<any>}
2912
2979
  *
2913
2980
  * This method accepts [React selectors](https://codecept.io/react).
2914
2981
  */
@@ -2930,8 +2997,9 @@ class Playwright extends Helper {
2930
2997
  * I.waitForInvisible('#popup');
2931
2998
  * ```
2932
2999
  *
2933
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3000
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2934
3001
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3002
+ * @return {Promise<any>}
2935
3003
  */
2936
3004
  async waitForInvisible(locator, sec) {
2937
3005
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -2951,8 +3019,9 @@ class Playwright extends Helper {
2951
3019
  * I.waitToHide('#popup');
2952
3020
  * ```
2953
3021
  *
2954
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3022
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2955
3023
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3024
+ * @return {Promise<any>}
2956
3025
  */
2957
3026
  async waitToHide(locator, sec) {
2958
3027
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -2979,6 +3048,7 @@ class Playwright extends Helper {
2979
3048
  *
2980
3049
  * @param {string} urlPart value to check.
2981
3050
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3051
+ * @return {Promise<any>}
2982
3052
  */
2983
3053
  async waitInUrl(urlPart, sec = null) {
2984
3054
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3006,6 +3076,7 @@ class Playwright extends Helper {
3006
3076
  *
3007
3077
  * @param {string} urlPart value to check.
3008
3078
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3079
+ * @return {Promise<any>}
3009
3080
  */
3010
3081
  async waitUrlEquals(urlPart, sec = null) {
3011
3082
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3040,7 +3111,8 @@ class Playwright extends Helper {
3040
3111
  *
3041
3112
  * @param {string }text to wait for.
3042
3113
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3043
- * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator.
3114
+ * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator.
3115
+ * @return {Promise<any>}
3044
3116
  */
3045
3117
  async waitForText(text, sec = null, context = null) {
3046
3118
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3080,6 +3152,7 @@ class Playwright extends Helper {
3080
3152
  *
3081
3153
  * @param {string|function} urlOrPredicate
3082
3154
  * @param {?number} [sec=null] seconds to wait
3155
+ * @return {Promise<any>}
3083
3156
  */
3084
3157
  async waitForRequest(urlOrPredicate, sec = null) {
3085
3158
  const timeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3096,6 +3169,7 @@ class Playwright extends Helper {
3096
3169
  *
3097
3170
  * @param {string|function} urlOrPredicate
3098
3171
  * @param {?number} [sec=null] number of seconds to wait
3172
+ * @return {Promise<any>}
3099
3173
  */
3100
3174
  async waitForResponse(urlOrPredicate, sec = null) {
3101
3175
  const timeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3110,7 +3184,8 @@ class Playwright extends Helper {
3110
3184
  * I.switchTo(); // switch back to main page
3111
3185
  * ```
3112
3186
  *
3113
- * @param {?string | object} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3187
+ * @param {?CodeceptJS.LocatorOrString} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3188
+ * @return {Promise<any>}
3114
3189
  */
3115
3190
  async switchTo(locator) {
3116
3191
  if (Number.isInteger(locator)) {
@@ -3168,7 +3243,7 @@ class Playwright extends Helper {
3168
3243
  * @param {string|function} fn to be executed in browser context.
3169
3244
  * @param {any[]|number} [argsOrSec] (optional, `1` by default) arguments for function or seconds.
3170
3245
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
3171
- *
3246
+ * @return {Promise<any>}
3172
3247
  */
3173
3248
  async waitForFunction(fn, argsOrSec = null, sec = null) {
3174
3249
  let args = [];
@@ -3190,6 +3265,7 @@ class Playwright extends Helper {
3190
3265
  * See [Playwright's reference](https://playwright.dev/docs/api/class-page?_highlight=waitfornavi#pagewaitfornavigationoptions)
3191
3266
  *
3192
3267
  * @param {*} opts
3268
+ * @return {Promise<any>}
3193
3269
  */
3194
3270
  async waitForNavigation(opts = {}) {
3195
3271
  opts = {
@@ -3215,8 +3291,9 @@ class Playwright extends Helper {
3215
3291
  * I.waitForDetached('#popup');
3216
3292
  * ```
3217
3293
  *
3218
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3294
+ * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3219
3295
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3296
+ * @return {Promise<any>}
3220
3297
  */
3221
3298
  async waitForDetached(locator, sec) {
3222
3299
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3262,6 +3339,7 @@ class Playwright extends Helper {
3262
3339
  * loadEventEnd: 241
3263
3340
  * }
3264
3341
  * ```
3342
+ * @return {Promise<any>}
3265
3343
  */
3266
3344
  async grabDataFromPerformanceTiming() {
3267
3345
  return perfTiming;
@@ -3285,7 +3363,7 @@ class Playwright extends Helper {
3285
3363
  * const width = await I.grabElementBoundingRect('h3', 'width');
3286
3364
  * // width == 527
3287
3365
  * ```
3288
- * @param {string | object} locator element located by CSS|XPath|strict locator.
3366
+ * @param {LocatorOrString} locator element located by CSS|XPath|strict locator.
3289
3367
  * @param {string=} elementSize x, y, width or height of the given element.
3290
3368
  * @returns {Promise<DOMRect>|Promise<number>} Element bounding rectangle
3291
3369
  *
@@ -3306,9 +3384,9 @@ class Playwright extends Helper {
3306
3384
  * ```
3307
3385
  * This method allows intercepting and mocking requests & responses. [Learn more about it](https://playwright.dev/docs/network#handle-requests)
3308
3386
  *
3309
- * @param {string} [url] URL, regex or pattern for to match URL
3387
+ * @param {string|RegExp} [url] URL, regex or pattern for to match URL
3310
3388
  * @param {function} [handler] a function to process request
3311
- *
3389
+ * @return {Promise<any>}
3312
3390
  */
3313
3391
  async mockRoute(url, handler) {
3314
3392
  return this.browserContext.route(...arguments);
@@ -3323,9 +3401,9 @@ class Playwright extends Helper {
3323
3401
  * ```
3324
3402
  * If no handler is passed, all mock requests for the rote are disabled.
3325
3403
  *
3326
- * @param {string} [url] URL, regex or pattern for to match URL
3404
+ * @param {string|RegExp} [url] URL, regex or pattern for to match URL
3327
3405
  * @param {function} [handler] a function to process request
3328
- *
3406
+ * @return {Promise<any>}
3329
3407
  */
3330
3408
  async stopMockingRoute(url, handler) {
3331
3409
  return this.browserContext.unroute(...arguments);