codeceptjs 3.4.1 → 3.5.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 (75) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +11 -9
  3. package/bin/codecept.js +1 -1
  4. package/docs/ai.md +248 -0
  5. package/docs/build/Appium.js +47 -7
  6. package/docs/build/JSONResponse.js +4 -4
  7. package/docs/build/Nightmare.js +3 -1
  8. package/docs/build/OpenAI.js +122 -0
  9. package/docs/build/Playwright.js +234 -54
  10. package/docs/build/Protractor.js +3 -1
  11. package/docs/build/Puppeteer.js +101 -12
  12. package/docs/build/REST.js +15 -5
  13. package/docs/build/TestCafe.js +61 -2
  14. package/docs/build/WebDriver.js +85 -5
  15. package/docs/changelog.md +85 -0
  16. package/docs/helpers/Appium.md +152 -147
  17. package/docs/helpers/JSONResponse.md +4 -4
  18. package/docs/helpers/Nightmare.md +2 -0
  19. package/docs/helpers/OpenAI.md +70 -0
  20. package/docs/helpers/Playwright.md +228 -151
  21. package/docs/helpers/Puppeteer.md +153 -101
  22. package/docs/helpers/REST.md +6 -5
  23. package/docs/helpers/TestCafe.md +97 -49
  24. package/docs/helpers/WebDriver.md +159 -107
  25. package/docs/mobile.md +49 -2
  26. package/docs/parallel.md +56 -0
  27. package/docs/plugins.md +87 -33
  28. package/docs/secrets.md +6 -0
  29. package/docs/tutorial.md +2 -2
  30. package/docs/webapi/appendField.mustache +2 -0
  31. package/docs/webapi/blur.mustache +17 -0
  32. package/docs/webapi/focus.mustache +12 -0
  33. package/docs/webapi/type.mustache +3 -0
  34. package/lib/ai.js +171 -0
  35. package/lib/cli.js +10 -2
  36. package/lib/codecept.js +4 -0
  37. package/lib/command/dryRun.js +9 -1
  38. package/lib/command/generate.js +46 -3
  39. package/lib/command/init.js +23 -1
  40. package/lib/command/interactive.js +15 -1
  41. package/lib/command/run-workers.js +2 -1
  42. package/lib/container.js +13 -3
  43. package/lib/event.js +2 -0
  44. package/lib/helper/Appium.js +45 -7
  45. package/lib/helper/JSONResponse.js +4 -4
  46. package/lib/helper/Nightmare.js +1 -1
  47. package/lib/helper/OpenAI.js +122 -0
  48. package/lib/helper/Playwright.js +200 -45
  49. package/lib/helper/Protractor.js +1 -1
  50. package/lib/helper/Puppeteer.js +67 -12
  51. package/lib/helper/REST.js +15 -5
  52. package/lib/helper/TestCafe.js +30 -2
  53. package/lib/helper/WebDriver.js +51 -5
  54. package/lib/helper/scripts/blurElement.js +17 -0
  55. package/lib/helper/scripts/focusElement.js +17 -0
  56. package/lib/helper/scripts/highlightElement.js +20 -0
  57. package/lib/html.js +258 -0
  58. package/lib/interfaces/gherkin.js +8 -0
  59. package/lib/listener/retry.js +2 -1
  60. package/lib/pause.js +73 -17
  61. package/lib/plugin/debugErrors.js +67 -0
  62. package/lib/plugin/fakerTransform.js +4 -6
  63. package/lib/plugin/heal.js +177 -0
  64. package/lib/plugin/screenshotOnFail.js +11 -2
  65. package/lib/recorder.js +11 -8
  66. package/lib/secret.js +5 -4
  67. package/lib/step.js +6 -1
  68. package/lib/ui.js +4 -3
  69. package/lib/utils.js +17 -0
  70. package/lib/workers.js +57 -9
  71. package/package.json +25 -16
  72. package/translations/ja-JP.js +9 -9
  73. package/typings/index.d.ts +43 -9
  74. package/typings/promiseBasedTypes.d.ts +242 -25
  75. package/typings/types.d.ts +260 -35
@@ -27,24 +27,25 @@ Type: [object][16]
27
27
  ### Properties
28
28
 
29
29
  - `url` **[string][17]** base url of website to be tested.
30
- - `browser` **[string][17]** browser in which to perform testing.
30
+ - `browser` **[string][17]** Browser in which to perform testing.
31
31
  - `basicAuth` **[string][17]?** (optional) the basic authentication to pass to base url. Example: {username: 'username', password: 'password'}
32
32
  - `host` **[string][17]?** WebDriver host to connect.
33
- - `port` **[number][20]?** WebDriver port to connect.
33
+ - `port` **[number][22]?** WebDriver port to connect.
34
34
  - `protocol` **[string][17]?** protocol for WebDriver server.
35
35
  - `path` **[string][17]?** path to WebDriver server.
36
- - `restart` **[boolean][29]?** restart browser between tests.
37
- - `smartWait` **([boolean][29] | [number][20])?** **enables [SmartWait][33]**; wait for additional milliseconds for element to appear. Enable for 5 secs: "smartWait": 5000.
38
- - `disableScreenshots` **[boolean][29]?** don't save screenshots on failure.
39
- - `fullPageScreenshots` **[boolean][29]?** (optional - make full page screenshots on failure.
40
- - `uniqueScreenshotNames` **[boolean][29]?** option to prevent screenshot override if you have scenarios with the same name in different suites.
41
- - `keepBrowserState` **[boolean][29]?** keep browser state between tests when `restart` is set to false.
42
- - `keepCookies` **[boolean][29]?** keep cookies between tests when `restart` set to false.
36
+ - `restart` **[boolean][32]?** restart browser between tests.
37
+ - `smartWait` **([boolean][32] | [number][22])?** **enables [SmartWait][36]**; wait for additional milliseconds for element to appear. Enable for 5 secs: "smartWait": 5000.
38
+ - `disableScreenshots` **[boolean][32]?** don't save screenshots on failure.
39
+ - `fullPageScreenshots` **[boolean][32]?** (optional - make full page screenshots on failure.
40
+ - `uniqueScreenshotNames` **[boolean][32]?** option to prevent screenshot override if you have scenarios with the same name in different suites.
41
+ - `keepBrowserState` **[boolean][32]?** keep browser state between tests when `restart` is set to false.
42
+ - `keepCookies` **[boolean][32]?** keep cookies between tests when `restart` set to false.
43
43
  - `windowSize` **[string][17]?** default window size. Set to `maximize` or a dimension in the format `640x480`.
44
- - `waitForTimeout` **[number][20]?** sets default wait time in _ms_ for all `wait*` functions.
44
+ - `waitForTimeout` **[number][22]?** sets default wait time in _ms_ for all `wait*` functions.
45
45
  - `desiredCapabilities` **[object][16]?** Selenium's [desired capabilities][6].
46
- - `manualStart` **[boolean][29]?** do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriver"]._startBrowser()`.
47
- - `timeouts` **[object][16]?** [WebDriver timeouts][34] defined as hash.
46
+ - `manualStart` **[boolean][32]?** do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriver"]._startBrowser()`.
47
+ - `timeouts` **[object][16]?** [WebDriver timeouts][37] defined as hash.
48
+ - `highlightElement` **[boolean][32]?** highlight the interacting elements
48
49
 
49
50
 
50
51
 
@@ -382,7 +383,7 @@ this.helpers['WebDriver']._locate({name: 'password'}).then //...
382
383
 
383
384
  ### _locateCheckable
384
385
 
385
- Find a checkbox by providing human readable text:
386
+ Find a checkbox by providing human-readable text:
386
387
 
387
388
  ```js
388
389
  this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').then // ...
@@ -394,7 +395,7 @@ this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').
394
395
 
395
396
  ### _locateClickable
396
397
 
397
- Find a clickable element by providing human readable text:
398
+ Find a clickable element by providing human-readable text:
398
399
 
399
400
  ```js
400
401
  const els = await this.helpers.WebDriver._locateClickable('Next page');
@@ -408,7 +409,7 @@ const els = await this.helpers.WebDriver._locateClickable('Next page', '.pages')
408
409
 
409
410
  ### _locateFields
410
411
 
411
- Find field elements by providing human readable text:
412
+ Find field elements by providing human-readable text:
412
413
 
413
414
  ```js
414
415
  this.helpers['WebDriver']._locateFields('Your email').then // ...
@@ -464,6 +465,8 @@ Field is located by name, label, CSS or XPath
464
465
 
465
466
  ```js
466
467
  I.appendField('#myTextField', 'appended');
468
+ // typing secret
469
+ I.appendField('password', secret('123456'));
467
470
  ```
468
471
 
469
472
  #### Parameters
@@ -493,6 +496,29 @@ I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
493
496
  - `pathToFile` **[string][17]** local file path relative to codecept.conf.ts or codecept.conf.js config file.
494
497
  ⚠️ returns a _promise_ which is synchronized internally by recorderAppium: not tested
495
498
 
499
+ ### blur
500
+
501
+ Remove focus from a text input, button, etc.
502
+ Calls [blur][19] on the element.
503
+
504
+ Examples:
505
+
506
+ ```js
507
+ I.blur('.text-area')
508
+ ```
509
+
510
+ ```js
511
+ //element `#product-tile` is focused
512
+ I.see('#add-to-cart-btn');
513
+ I.blur('#product-tile')
514
+ I.dontSee('#add-to-cart-btn');
515
+ ```
516
+
517
+ #### Parameters
518
+
519
+ - `locator` **([string][17] | [object][16])** field located by label|name|CSS|XPath|strict locator.
520
+ - `options` **any?** Playwright only: [Additional options][20] for available options object as 2nd argument.
521
+
496
522
  ### cancelPopup
497
523
 
498
524
  Dismisses the active JavaScript popup, as created by window.alert|window.confirm|window.prompt.
@@ -603,7 +629,7 @@ I.closeOtherTabs();
603
629
 
604
630
  ### defineTimeout
605
631
 
606
- Set [WebDriver timeouts][19] in realtime.
632
+ Set [WebDriver timeouts][21] in realtime.
607
633
 
608
634
  Timeouts are expected to be passed as object:
609
635
 
@@ -810,7 +836,7 @@ I.dragSlider('#slider', -70);
810
836
  #### Parameters
811
837
 
812
838
  - `locator` **([string][17] | [object][16])** located by label|name|CSS|XPath|strict locator.
813
- - `offsetX` **[number][20]** position to drag.
839
+ - `offsetX` **[number][22]** position to drag.
814
840
  ⚠️ returns a _promise_ which is synchronized internally by recorder
815
841
 
816
842
  ### executeAsyncScript
@@ -818,7 +844,7 @@ I.dragSlider('#slider', -70);
818
844
  Executes async script on page.
819
845
  Provided function should execute a passed callback (as first argument) to signal it is finished.
820
846
 
821
- Example: In Vue.js to make components completely rendered we are waiting for [nextTick][21].
847
+ Example: In Vue.js to make components completely rendered we are waiting for [nextTick][23].
822
848
 
823
849
  ```js
824
850
  I.executeAsyncScript(function(done) {
@@ -840,7 +866,7 @@ let val = await I.executeAsyncScript(function(url, done) {
840
866
 
841
867
  - `args` **...any** to be passed to function.
842
868
  ⚠️ returns a _promise_ which is synchronized internally by recorder
843
- - `fn` **([string][17] | [function][22])** function to be executed in browser context.
869
+ - `fn` **([string][17] | [function][24])** function to be executed in browser context.
844
870
 
845
871
  ### executeScript
846
872
 
@@ -871,8 +897,8 @@ let date = await I.executeScript(function(el) {
871
897
  #### Parameters
872
898
 
873
899
  - `args` **...any** to be passed to function.
874
- ⚠️ returns a _promise_ which is synchronized internally by recorderWraps [execute][23] command.
875
- - `fn` **([string][17] | [function][22])** function to be executed in browser context.
900
+ ⚠️ returns a _promise_ which is synchronized internally by recorderWraps [execute][25] command.
901
+ - `fn` **([string][17] | [function][24])** function to be executed in browser context.
876
902
 
877
903
  ### fillField
878
904
 
@@ -901,6 +927,23 @@ This action supports [React locators](https://codecept.io/react#locators)
901
927
 
902
928
  {{ custom }}
903
929
 
930
+ ### focus
931
+
932
+ Calls [focus][19] on the matching element.
933
+
934
+ Examples:
935
+
936
+ ```js
937
+ I.dontSee('#add-to-cart-btn');
938
+ I.focus('#product-tile')
939
+ I.see('#add-to-cart-bnt');
940
+ ```
941
+
942
+ #### Parameters
943
+
944
+ - `locator` **([string][17] | [object][16])** field located by label|name|CSS|XPath|strict locator.
945
+ - `options` **any?** Playwright only: [Additional options][26] for available options object as 2nd argument.
946
+
904
947
  ### forceClick
905
948
 
906
949
  Perform an emulated click on a link or a button, given by a locator.
@@ -974,7 +1017,7 @@ Useful for referencing a specific handle when calling `I.switchToWindow(handle)`
974
1017
  const windows = await I.grabAllWindowHandles();
975
1018
  ```
976
1019
 
977
- Returns **[Promise][24]<[Array][25]<[string][17]>>**
1020
+ Returns **[Promise][27]<[Array][28]<[string][17]>>**
978
1021
 
979
1022
  ### grabAttributeFrom
980
1023
 
@@ -991,7 +1034,7 @@ let hint = await I.grabAttributeFrom('#tooltip', 'title');
991
1034
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
992
1035
  - `attr` **[string][17]** attribute name.
993
1036
 
994
- Returns **[Promise][24]<[string][17]>** attribute value
1037
+ Returns **[Promise][27]<[string][17]>** attribute value
995
1038
 
996
1039
  ### grabAttributeFromAll
997
1040
 
@@ -1007,7 +1050,7 @@ let hints = await I.grabAttributeFromAll('.tooltip', 'title');
1007
1050
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1008
1051
  - `attr` **[string][17]** attribute name.
1009
1052
 
1010
- Returns **[Promise][24]<[Array][25]<[string][17]>>** attribute value
1053
+ Returns **[Promise][27]<[Array][28]<[string][17]>>** attribute value
1011
1054
 
1012
1055
  ### grabBrowserLogs
1013
1056
 
@@ -1019,7 +1062,7 @@ let logs = await I.grabBrowserLogs();
1019
1062
  console.log(JSON.stringify(logs))
1020
1063
  ```
1021
1064
 
1022
- Returns **([Promise][24]<[Array][25]<[object][16]>> | [undefined][26])** all browser logs
1065
+ Returns **([Promise][27]<[Array][28]<[object][16]>> | [undefined][29])** all browser logs
1023
1066
 
1024
1067
  ### grabCookie
1025
1068
 
@@ -1036,7 +1079,7 @@ assert(cookie.value, '123456');
1036
1079
 
1037
1080
  - `name` **[string][17]?** cookie name.
1038
1081
 
1039
- Returns **([Promise][24]<[string][17]> | [Promise][24]<[Array][25]<[string][17]>>)** attribute value
1082
+ Returns **([Promise][27]<[string][17]> | [Promise][27]<[Array][28]<[string][17]>>)** attribute value
1040
1083
 
1041
1084
  ### grabCssPropertyFrom
1042
1085
 
@@ -1053,7 +1096,7 @@ const value = await I.grabCssPropertyFrom('h3', 'font-weight');
1053
1096
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1054
1097
  - `cssProperty` **[string][17]** CSS property name.
1055
1098
 
1056
- Returns **[Promise][24]<[string][17]>** CSS value
1099
+ Returns **[Promise][27]<[string][17]>** CSS value
1057
1100
 
1058
1101
  ### grabCssPropertyFromAll
1059
1102
 
@@ -1069,7 +1112,7 @@ const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
1069
1112
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1070
1113
  - `cssProperty` **[string][17]** CSS property name.
1071
1114
 
1072
- Returns **[Promise][24]<[Array][25]<[string][17]>>** CSS value
1115
+ Returns **[Promise][27]<[Array][28]<[string][17]>>** CSS value
1073
1116
 
1074
1117
  ### grabCurrentUrl
1075
1118
 
@@ -1081,7 +1124,7 @@ let url = await I.grabCurrentUrl();
1081
1124
  console.log(`Current URL is [${url}]`);
1082
1125
  ```
1083
1126
 
1084
- Returns **[Promise][24]<[string][17]>** current URL
1127
+ Returns **[Promise][27]<[string][17]>** current URL
1085
1128
 
1086
1129
  ### grabCurrentWindowHandle
1087
1130
 
@@ -1092,7 +1135,7 @@ Useful for referencing it when calling `I.switchToWindow(handle)`
1092
1135
  const window = await I.grabCurrentWindowHandle();
1093
1136
  ```
1094
1137
 
1095
- Returns **[Promise][24]<[string][17]>**
1138
+ Returns **[Promise][27]<[string][17]>**
1096
1139
 
1097
1140
  ### grabElementBoundingRect
1098
1141
 
@@ -1120,7 +1163,7 @@ const width = await I.grabElementBoundingRect('h3', 'width');
1120
1163
  - `prop`
1121
1164
  - `elementSize` **[string][17]?** x, y, width or height of the given element.
1122
1165
 
1123
- Returns **([Promise][24]<DOMRect> | [Promise][24]<[number][20]>)** Element bounding rectangle
1166
+ Returns **([Promise][27]<DOMRect> | [Promise][27]<[number][22]>)** Element bounding rectangle
1124
1167
 
1125
1168
  ### grabGeoLocation
1126
1169
 
@@ -1131,7 +1174,7 @@ Resumes test execution, so **should be used inside async function with `await`**
1131
1174
  let geoLocation = await I.grabGeoLocation();
1132
1175
  ```
1133
1176
 
1134
- Returns **[Promise][24]<{latitude: [number][20], longitude: [number][20], altitude: [number][20]}>**
1177
+ Returns **[Promise][27]<{latitude: [number][22], longitude: [number][22], altitude: [number][22]}>**
1135
1178
 
1136
1179
  ### grabHTMLFrom
1137
1180
 
@@ -1148,7 +1191,7 @@ let postHTML = await I.grabHTMLFrom('#post');
1148
1191
  - `locator`
1149
1192
  - `element` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1150
1193
 
1151
- Returns **[Promise][24]<[string][17]>** HTML code for an element
1194
+ Returns **[Promise][27]<[string][17]>** HTML code for an element
1152
1195
 
1153
1196
  ### grabHTMLFromAll
1154
1197
 
@@ -1164,7 +1207,7 @@ let postHTMLs = await I.grabHTMLFromAll('.post');
1164
1207
  - `locator`
1165
1208
  - `element` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1166
1209
 
1167
- Returns **[Promise][24]<[Array][25]<[string][17]>>** HTML code for an element
1210
+ Returns **[Promise][27]<[Array][28]<[string][17]>>** HTML code for an element
1168
1211
 
1169
1212
  ### grabNumberOfOpenTabs
1170
1213
 
@@ -1175,7 +1218,7 @@ Resumes test execution, so **should be used inside async function with `await`**
1175
1218
  let tabs = await I.grabNumberOfOpenTabs();
1176
1219
  ```
1177
1220
 
1178
- Returns **[Promise][24]<[number][20]>** number of open tabs
1221
+ Returns **[Promise][27]<[number][22]>** number of open tabs
1179
1222
 
1180
1223
  ### grabNumberOfVisibleElements
1181
1224
 
@@ -1190,7 +1233,7 @@ let numOfElements = await I.grabNumberOfVisibleElements('p');
1190
1233
 
1191
1234
  - `locator` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1192
1235
 
1193
- Returns **[Promise][24]<[number][20]>** number of visible elements
1236
+ Returns **[Promise][27]<[number][22]>** number of visible elements
1194
1237
 
1195
1238
  ### grabPageScrollPosition
1196
1239
 
@@ -1201,7 +1244,7 @@ Resumes test execution, so **should be used inside an async function with `await
1201
1244
  let { x, y } = await I.grabPageScrollPosition();
1202
1245
  ```
1203
1246
 
1204
- Returns **[Promise][24]<PageScrollPosition>** scroll position
1247
+ Returns **[Promise][27]<PageScrollPosition>** scroll position
1205
1248
 
1206
1249
  ### grabPopupText
1207
1250
 
@@ -1211,7 +1254,7 @@ Grab the text within the popup. If no popup is visible then it will return null.
1211
1254
  await I.grabPopupText();
1212
1255
  ```
1213
1256
 
1214
- Returns **[Promise][24]<[string][17]>**
1257
+ Returns **[Promise][27]<[string][17]>**
1215
1258
 
1216
1259
  ### grabSource
1217
1260
 
@@ -1222,7 +1265,7 @@ Resumes test execution, so **should be used inside async function with `await`**
1222
1265
  let pageSource = await I.grabSource();
1223
1266
  ```
1224
1267
 
1225
- Returns **[Promise][24]<[string][17]>** source code
1268
+ Returns **[Promise][27]<[string][17]>** source code
1226
1269
 
1227
1270
  ### grabTextFrom
1228
1271
 
@@ -1239,7 +1282,7 @@ If multiple elements found returns first element.
1239
1282
 
1240
1283
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1241
1284
 
1242
- Returns **[Promise][24]<[string][17]>** attribute value
1285
+ Returns **[Promise][27]<[string][17]>** attribute value
1243
1286
 
1244
1287
  ### grabTextFromAll
1245
1288
 
@@ -1254,7 +1297,7 @@ let pins = await I.grabTextFromAll('#pin li');
1254
1297
 
1255
1298
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1256
1299
 
1257
- Returns **[Promise][24]<[Array][25]<[string][17]>>** attribute value
1300
+ Returns **[Promise][27]<[Array][28]<[string][17]>>** attribute value
1258
1301
 
1259
1302
  ### grabTitle
1260
1303
 
@@ -1265,7 +1308,7 @@ Resumes test execution, so **should be used inside async with `await`** operator
1265
1308
  let title = await I.grabTitle();
1266
1309
  ```
1267
1310
 
1268
- Returns **[Promise][24]<[string][17]>** title
1311
+ Returns **[Promise][27]<[string][17]>** title
1269
1312
 
1270
1313
  ### grabValueFrom
1271
1314
 
@@ -1281,7 +1324,7 @@ let email = await I.grabValueFrom('input[name=email]');
1281
1324
 
1282
1325
  - `locator` **([string][17] | [object][16])** field located by label|name|CSS|XPath|strict locator.
1283
1326
 
1284
- Returns **[Promise][24]<[string][17]>** attribute value
1327
+ Returns **[Promise][27]<[string][17]>** attribute value
1285
1328
 
1286
1329
  ### grabValueFromAll
1287
1330
 
@@ -1296,7 +1339,7 @@ let inputs = await I.grabValueFromAll('//form/input');
1296
1339
 
1297
1340
  - `locator` **([string][17] | [object][16])** field located by label|name|CSS|XPath|strict locator.
1298
1341
 
1299
- Returns **[Promise][24]<[Array][25]<[string][17]>>** attribute value
1342
+ Returns **[Promise][27]<[Array][28]<[string][17]>>** attribute value
1300
1343
 
1301
1344
  ### moveCursorTo
1302
1345
 
@@ -1313,8 +1356,8 @@ I.moveCursorTo('#submit', 5,5);
1313
1356
  - `locator` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1314
1357
  - `xOffset`
1315
1358
  - `yOffset`
1316
- - `offsetX` **[number][20]** (optional, `0` by default) X-axis offset.
1317
- - `offsetY` **[number][20]** (optional, `0` by default) Y-axis offset.
1359
+ - `offsetX` **[number][22]** (optional, `0` by default) X-axis offset.
1360
+ - `offsetY` **[number][22]** (optional, `0` by default) Y-axis offset.
1318
1361
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1319
1362
 
1320
1363
  ### openNewTab
@@ -1336,7 +1379,7 @@ I.openNewTab();
1336
1379
 
1337
1380
  Presses a key in the browser (on a focused element).
1338
1381
 
1339
- _Hint:_ For populating text field or textarea, it is recommended to use [`fillField`][27].
1382
+ _Hint:_ For populating text field or textarea, it is recommended to use [`fillField`][30].
1340
1383
 
1341
1384
  ```js
1342
1385
  I.pressKey('Backspace');
@@ -1395,14 +1438,14 @@ Some of the supported key names are:
1395
1438
 
1396
1439
  #### Parameters
1397
1440
 
1398
- - `key` **([string][17] | [Array][25]<[string][17]>)** key or array of keys to press.
1441
+ - `key` **([string][17] | [Array][28]<[string][17]>)** key or array of keys to press.
1399
1442
  ⚠️ returns a _promise_ which is synchronized internally by recorder_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.
1400
1443
 
1401
1444
  ### pressKeyDown
1402
1445
 
1403
1446
  Presses a key in the browser and leaves it in a down state.
1404
1447
 
1405
- To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][28]).
1448
+ To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][31]).
1406
1449
 
1407
1450
  ```js
1408
1451
  I.pressKeyDown('Control');
@@ -1419,7 +1462,7 @@ I.pressKeyUp('Control');
1419
1462
 
1420
1463
  Releases a key in the browser which was previously set to a down state.
1421
1464
 
1422
- To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][28]).
1465
+ To make combinations with modifier key and user operation (e.g. `'Control'` + [`click`][31]).
1423
1466
 
1424
1467
  ```js
1425
1468
  I.pressKeyDown('Control');
@@ -1449,8 +1492,8 @@ First parameter can be set to `maximize`.
1449
1492
 
1450
1493
  #### Parameters
1451
1494
 
1452
- - `width` **[number][20]** width in pixels or `maximize`.
1453
- - `height` **[number][20]** height in pixels.
1495
+ - `width` **[number][22]** width in pixels or `maximize`.
1496
+ - `height` **[number][22]** height in pixels.
1454
1497
  ⚠️ returns a _promise_ which is synchronized internally by recorderAppium: not tested in web, in apps doesn't work
1455
1498
 
1456
1499
  ### rightClick
@@ -1531,7 +1574,7 @@ I.saveScreenshot('debug.png', true) //resizes to available scrollHeight and scro
1531
1574
  #### Parameters
1532
1575
 
1533
1576
  - `fileName` **[string][17]** file name to save.
1534
- - `fullPage` **[boolean][29]** (optional, `false` by default) flag to enable fullscreen screenshot mode.
1577
+ - `fullPage` **[boolean][32]** (optional, `false` by default) flag to enable fullscreen screenshot mode.
1535
1578
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1536
1579
 
1537
1580
  ### scrollIntoView
@@ -1547,7 +1590,7 @@ I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "cent
1547
1590
  #### Parameters
1548
1591
 
1549
1592
  - `locator` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1550
- - `scrollIntoViewOptions` **ScrollIntoViewOptions** see [https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView][30].
1593
+ - `scrollIntoViewOptions` **ScrollIntoViewOptions** see [https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView][33].
1551
1594
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1552
1595
 
1553
1596
  ### scrollPageToBottom
@@ -1583,8 +1626,8 @@ I.scrollTo('#submit', 5, 5);
1583
1626
  #### Parameters
1584
1627
 
1585
1628
  - `locator` **([string][17] | [object][16])** located by CSS|XPath|strict locator.
1586
- - `offsetX` **[number][20]** (optional, `0` by default) X-axis offset.
1587
- - `offsetY` **[number][20]** (optional, `0` by default) Y-axis offset.
1629
+ - `offsetX` **[number][22]** (optional, `0` by default) X-axis offset.
1630
+ - `offsetY` **[number][22]** (optional, `0` by default) Y-axis offset.
1588
1631
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1589
1632
 
1590
1633
  ### see
@@ -1790,7 +1833,7 @@ I.seeNumberOfElements('#submitBtn', 1);
1790
1833
  #### Parameters
1791
1834
 
1792
1835
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1793
- - `num` **[number][20]** number of elements.
1836
+ - `num` **[number][22]** number of elements.
1794
1837
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1795
1838
 
1796
1839
 
@@ -1809,7 +1852,7 @@ I.seeNumberOfVisibleElements('.buttons', 3);
1809
1852
  #### Parameters
1810
1853
 
1811
1854
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
1812
- - `num` **[number][20]** number of elements.
1855
+ - `num` **[number][22]** number of elements.
1813
1856
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1814
1857
 
1815
1858
 
@@ -1867,7 +1910,7 @@ I.selectOption('Which OS do you use?', ['Android', 'iOS']);
1867
1910
  #### Parameters
1868
1911
 
1869
1912
  - `select` **([string][17] | [object][16])** field located by label|name|CSS|XPath|strict locator.
1870
- - `option` **([string][17] | [Array][25]<any>)** visible text or value of option.
1913
+ - `option` **([string][17] | [Array][28]<any>)** visible text or value of option.
1871
1914
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1872
1915
 
1873
1916
  ### setCookie
@@ -1888,9 +1931,9 @@ I.setCookie([
1888
1931
 
1889
1932
  #### Parameters
1890
1933
 
1891
- - `cookie` **(Cookie | [Array][25]<Cookie>)** a cookie object or array of cookie objects.
1934
+ - `cookie` **(Cookie | [Array][28]<Cookie>)** a cookie object or array of cookie objects.
1892
1935
  ⚠️ returns a _promise_ which is synchronized internally by recorderUses Selenium's JSON [cookie
1893
- format][31].
1936
+ format][34].
1894
1937
 
1895
1938
  ### setGeoLocation
1896
1939
 
@@ -1903,9 +1946,9 @@ I.setGeoLocation(121.21, 11.56, 10);
1903
1946
 
1904
1947
  #### Parameters
1905
1948
 
1906
- - `latitude` **[number][20]** to set.
1907
- - `longitude` **[number][20]** to set
1908
- - `altitude` **[number][20]?** (optional, null by default) to set
1949
+ - `latitude` **[number][22]** to set.
1950
+ - `longitude` **[number][22]** to set
1951
+ - `altitude` **[number][22]?** (optional, null by default) to set
1909
1952
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1910
1953
 
1911
1954
  ### switchTo
@@ -1933,8 +1976,8 @@ I.switchToNextTab(2);
1933
1976
 
1934
1977
  #### Parameters
1935
1978
 
1936
- - `num` **[number][20]?** (optional) number of tabs to switch forward, default: 1.
1937
- - `sec` **([number][20] | null)?** (optional) time in seconds to wait.
1979
+ - `num` **[number][22]?** (optional) number of tabs to switch forward, default: 1.
1980
+ - `sec` **([number][22] | null)?** (optional) time in seconds to wait.
1938
1981
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1939
1982
 
1940
1983
  ### switchToPreviousTab
@@ -1948,8 +1991,8 @@ I.switchToPreviousTab(2);
1948
1991
 
1949
1992
  #### Parameters
1950
1993
 
1951
- - `num` **[number][20]?** (optional) number of tabs to switch backward, default: 1.
1952
- - `sec` **[number][20]??** (optional) time in seconds to wait.
1994
+ - `num` **[number][22]?** (optional) number of tabs to switch backward, default: 1.
1995
+ - `sec` **[number][22]??** (optional) time in seconds to wait.
1953
1996
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1954
1997
 
1955
1998
  ### switchToWindow
@@ -1974,7 +2017,7 @@ await I.switchToWindow( window );
1974
2017
 
1975
2018
  Types out the given text into an active field.
1976
2019
  To slow down typing use a second parameter, to set interval between key presses.
1977
- _Note:_ Should be used when [`fillField`][27] is not an option.
2020
+ _Note:_ Should be used when [`fillField`][30] is not an option.
1978
2021
 
1979
2022
  ```js
1980
2023
  // passing in a string
@@ -1985,14 +2028,17 @@ I.type('4141555311111111', 100);
1985
2028
 
1986
2029
  // passing in an array
1987
2030
  I.type(['T', 'E', 'X', 'T']);
2031
+
2032
+ // passing a secret
2033
+ I.type(secret('123456'));
1988
2034
  ```
1989
2035
 
1990
2036
  #### Parameters
1991
2037
 
1992
2038
  - `keys`
1993
- - `delay` **[number][20]?** (optional) delay in ms between key presses
2039
+ - `delay` **[number][22]?** (optional) delay in ms between key presses
1994
2040
  ⚠️ returns a _promise_ which is synchronized internally by recorder
1995
- - `key` **([string][17] | [Array][25]<[string][17]>)** or array of keys to type.
2041
+ - `key` **([string][17] | [Array][28]<[string][17]>)** or array of keys to type.
1996
2042
 
1997
2043
  ### uncheckOption
1998
2044
 
@@ -2015,12 +2061,12 @@ I.uncheckOption('agree', '//form');
2015
2061
 
2016
2062
  ### useWebDriverTo
2017
2063
 
2018
- Use [webdriverio][32] API inside a test.
2064
+ Use [webdriverio][35] API inside a test.
2019
2065
 
2020
2066
  First argument is a description of an action.
2021
2067
  Second argument is async function that gets this helper as parameter.
2022
2068
 
2023
- { [`browser`][32]) } object from WebDriver API is available.
2069
+ { [`browser`][35]) } object from WebDriver API is available.
2024
2070
 
2025
2071
  ```js
2026
2072
  I.useWebDriverTo('open multiple windows', async ({ browser }) {
@@ -2032,7 +2078,7 @@ I.useWebDriverTo('open multiple windows', async ({ browser }) {
2032
2078
  #### Parameters
2033
2079
 
2034
2080
  - `description` **[string][17]** used to show in logs.
2035
- - `fn` **[function][22]** async functuion that executed with WebDriver helper as argument
2081
+ - `fn` **[function][24]** async functuion that executed with WebDriver helper as argument
2036
2082
 
2037
2083
  ### wait
2038
2084
 
@@ -2044,7 +2090,7 @@ I.wait(2); // wait 2 secs
2044
2090
 
2045
2091
  #### Parameters
2046
2092
 
2047
- - `sec` **[number][20]** number of second to wait.
2093
+ - `sec` **[number][22]** number of second to wait.
2048
2094
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2049
2095
 
2050
2096
  ### waitForClickable
@@ -2061,7 +2107,7 @@ I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2061
2107
 
2062
2108
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2063
2109
  - `waitTimeout`
2064
- - `sec` **[number][20]?** (optional, `1` by default) time in seconds to wait
2110
+ - `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2065
2111
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2066
2112
 
2067
2113
  ### waitForDetached
@@ -2076,7 +2122,7 @@ I.waitForDetached('#popup');
2076
2122
  #### Parameters
2077
2123
 
2078
2124
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2079
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2125
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2080
2126
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2081
2127
 
2082
2128
  ### waitForElement
@@ -2092,7 +2138,7 @@ I.waitForElement('.btn.continue', 5); // wait for 5 secs
2092
2138
  #### Parameters
2093
2139
 
2094
2140
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2095
- - `sec` **[number][20]?** (optional, `1` by default) time in seconds to wait
2141
+ - `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2096
2142
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2097
2143
 
2098
2144
  ### waitForEnabled
@@ -2103,7 +2149,7 @@ Element can be located by CSS or XPath.
2103
2149
  #### Parameters
2104
2150
 
2105
2151
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2106
- - `sec` **[number][20]** (optional) time in seconds to wait, 1 by default.
2152
+ - `sec` **[number][22]** (optional) time in seconds to wait, 1 by default.
2107
2153
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2108
2154
 
2109
2155
  ### waitForFunction
@@ -2123,9 +2169,9 @@ I.waitForFunction((count) => window.requests == count, [3], 5) // pass args and
2123
2169
 
2124
2170
  #### Parameters
2125
2171
 
2126
- - `fn` **([string][17] | [function][22])** to be executed in browser context.
2127
- - `argsOrSec` **([Array][25]<any> | [number][20])?** (optional, `1` by default) arguments for function or seconds.
2128
- - `sec` **[number][20]?** (optional, `1` by default) time in seconds to wait
2172
+ - `fn` **([string][17] | [function][24])** to be executed in browser context.
2173
+ - `argsOrSec` **([Array][28]<any> | [number][22])?** (optional, `1` by default) arguments for function or seconds.
2174
+ - `sec` **[number][22]?** (optional, `1` by default) time in seconds to wait
2129
2175
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2130
2176
 
2131
2177
  ### waitForInvisible
@@ -2140,7 +2186,7 @@ I.waitForInvisible('#popup');
2140
2186
  #### Parameters
2141
2187
 
2142
2188
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2143
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2189
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2144
2190
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2145
2191
 
2146
2192
  ### waitForText
@@ -2157,7 +2203,7 @@ I.waitForText('Thank you, form has been submitted', 5, '#modal');
2157
2203
  #### Parameters
2158
2204
 
2159
2205
  - `text` **[string][17]** to wait for.
2160
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2206
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2161
2207
  - `context` **([string][17] | [object][16])?** (optional) element located by CSS|XPath|strict locator.
2162
2208
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2163
2209
 
@@ -2173,7 +2219,7 @@ I.waitForValue('//input', "GoodValue");
2173
2219
 
2174
2220
  - `field` **([string][17] | [object][16])** input field.
2175
2221
  - `value` **[string][17]** expected value.
2176
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2222
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2177
2223
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2178
2224
 
2179
2225
  ### waitForVisible
@@ -2188,7 +2234,7 @@ I.waitForVisible('#popup');
2188
2234
  #### Parameters
2189
2235
 
2190
2236
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2191
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2237
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2192
2238
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2193
2239
 
2194
2240
  ### waitInUrl
@@ -2202,7 +2248,7 @@ I.waitInUrl('/info', 2);
2202
2248
  #### Parameters
2203
2249
 
2204
2250
  - `urlPart` **[string][17]** value to check.
2205
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2251
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2206
2252
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2207
2253
 
2208
2254
  ### waitNumberOfVisibleElements
@@ -2216,8 +2262,8 @@ I.waitNumberOfVisibleElements('a', 3);
2216
2262
  #### Parameters
2217
2263
 
2218
2264
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2219
- - `num` **[number][20]** number of elements.
2220
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2265
+ - `num` **[number][22]** number of elements.
2266
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2221
2267
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2222
2268
 
2223
2269
  ### waitToHide
@@ -2232,7 +2278,7 @@ I.waitToHide('#popup');
2232
2278
  #### Parameters
2233
2279
 
2234
2280
  - `locator` **([string][17] | [object][16])** element located by CSS|XPath|strict locator.
2235
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2281
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2236
2282
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2237
2283
 
2238
2284
  ### waitUrlEquals
@@ -2247,7 +2293,7 @@ I.waitUrlEquals('http://127.0.0.1:8000/info');
2247
2293
  #### Parameters
2248
2294
 
2249
2295
  - `urlPart` **[string][17]** value to check.
2250
- - `sec` **[number][20]** (optional, `1` by default) time in seconds to wait
2296
+ - `sec` **[number][22]** (optional, `1` by default) time in seconds to wait
2251
2297
  ⚠️ returns a _promise_ which is synchronized internally by recorder
2252
2298
 
2253
2299
  [1]: http://webdriver.io/
@@ -2286,34 +2332,40 @@ I.waitUrlEquals('http://127.0.0.1:8000/info');
2286
2332
 
2287
2333
  [18]: http://jster.net/category/windows-modals-popups
2288
2334
 
2289
- [19]: https://webdriver.io/docs/timeouts.html
2335
+ [19]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
2336
+
2337
+ [20]: https://playwright.dev/docs/api/class-locator#locator-blur
2338
+
2339
+ [21]: https://webdriver.io/docs/timeouts.html
2340
+
2341
+ [22]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
2290
2342
 
2291
- [20]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
2343
+ [23]: https://vuejs.org/v2/api/#Vue-nextTick
2292
2344
 
2293
- [21]: https://vuejs.org/v2/api/#Vue-nextTick
2345
+ [24]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
2294
2346
 
2295
- [22]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
2347
+ [25]: http://webdriver.io/api/protocol/execute.html
2296
2348
 
2297
- [23]: http://webdriver.io/api/protocol/execute.html
2349
+ [26]: https://playwright.dev/docs/api/class-locator#locator-focus
2298
2350
 
2299
- [24]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
2351
+ [27]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
2300
2352
 
2301
- [25]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
2353
+ [28]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
2302
2354
 
2303
- [26]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
2355
+ [29]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
2304
2356
 
2305
- [27]: #fillfield
2357
+ [30]: #fillfield
2306
2358
 
2307
- [28]: #click
2359
+ [31]: #click
2308
2360
 
2309
- [29]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
2361
+ [32]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
2310
2362
 
2311
- [30]: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
2363
+ [33]: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
2312
2364
 
2313
- [31]: https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
2365
+ [34]: https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
2314
2366
 
2315
- [32]: https://webdriver.io/docs/api.html
2367
+ [35]: https://webdriver.io/docs/api.html
2316
2368
 
2317
- [33]: http://codecept.io/acceptance/#smartwait
2369
+ [36]: http://codecept.io/acceptance/#smartwait
2318
2370
 
2319
- [34]: http://webdriver.io/docs/timeouts.html
2371
+ [37]: http://webdriver.io/docs/timeouts.html