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.
- package/CHANGELOG.md +85 -0
- package/README.md +11 -9
- package/bin/codecept.js +1 -1
- package/docs/ai.md +248 -0
- package/docs/build/Appium.js +47 -7
- package/docs/build/JSONResponse.js +4 -4
- package/docs/build/Nightmare.js +3 -1
- package/docs/build/OpenAI.js +122 -0
- package/docs/build/Playwright.js +234 -54
- package/docs/build/Protractor.js +3 -1
- package/docs/build/Puppeteer.js +101 -12
- package/docs/build/REST.js +15 -5
- package/docs/build/TestCafe.js +61 -2
- package/docs/build/WebDriver.js +85 -5
- package/docs/changelog.md +85 -0
- package/docs/helpers/Appium.md +152 -147
- package/docs/helpers/JSONResponse.md +4 -4
- package/docs/helpers/Nightmare.md +2 -0
- package/docs/helpers/OpenAI.md +70 -0
- package/docs/helpers/Playwright.md +228 -151
- package/docs/helpers/Puppeteer.md +153 -101
- package/docs/helpers/REST.md +6 -5
- package/docs/helpers/TestCafe.md +97 -49
- package/docs/helpers/WebDriver.md +159 -107
- package/docs/mobile.md +49 -2
- package/docs/parallel.md +56 -0
- package/docs/plugins.md +87 -33
- package/docs/secrets.md +6 -0
- package/docs/tutorial.md +2 -2
- package/docs/webapi/appendField.mustache +2 -0
- package/docs/webapi/blur.mustache +17 -0
- package/docs/webapi/focus.mustache +12 -0
- package/docs/webapi/type.mustache +3 -0
- package/lib/ai.js +171 -0
- package/lib/cli.js +10 -2
- package/lib/codecept.js +4 -0
- package/lib/command/dryRun.js +9 -1
- package/lib/command/generate.js +46 -3
- package/lib/command/init.js +23 -1
- package/lib/command/interactive.js +15 -1
- package/lib/command/run-workers.js +2 -1
- package/lib/container.js +13 -3
- package/lib/event.js +2 -0
- package/lib/helper/Appium.js +45 -7
- package/lib/helper/JSONResponse.js +4 -4
- package/lib/helper/Nightmare.js +1 -1
- package/lib/helper/OpenAI.js +122 -0
- package/lib/helper/Playwright.js +200 -45
- package/lib/helper/Protractor.js +1 -1
- package/lib/helper/Puppeteer.js +67 -12
- package/lib/helper/REST.js +15 -5
- package/lib/helper/TestCafe.js +30 -2
- package/lib/helper/WebDriver.js +51 -5
- package/lib/helper/scripts/blurElement.js +17 -0
- package/lib/helper/scripts/focusElement.js +17 -0
- package/lib/helper/scripts/highlightElement.js +20 -0
- package/lib/html.js +258 -0
- package/lib/interfaces/gherkin.js +8 -0
- package/lib/listener/retry.js +2 -1
- package/lib/pause.js +73 -17
- package/lib/plugin/debugErrors.js +67 -0
- package/lib/plugin/fakerTransform.js +4 -6
- package/lib/plugin/heal.js +177 -0
- package/lib/plugin/screenshotOnFail.js +11 -2
- package/lib/recorder.js +11 -8
- package/lib/secret.js +5 -4
- package/lib/step.js +6 -1
- package/lib/ui.js +4 -3
- package/lib/utils.js +17 -0
- package/lib/workers.js +57 -9
- package/package.json +25 -16
- package/translations/ja-JP.js +9 -9
- package/typings/index.d.ts +43 -9
- package/typings/promiseBasedTypes.d.ts +242 -25
- 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]**
|
|
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][
|
|
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][
|
|
37
|
-
- `smartWait` **([boolean][
|
|
38
|
-
- `disableScreenshots` **[boolean][
|
|
39
|
-
- `fullPageScreenshots` **[boolean][
|
|
40
|
-
- `uniqueScreenshotNames` **[boolean][
|
|
41
|
-
- `keepBrowserState` **[boolean][
|
|
42
|
-
- `keepCookies` **[boolean][
|
|
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][
|
|
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][
|
|
47
|
-
- `timeouts` **[object][16]?** [WebDriver timeouts][
|
|
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
|
|
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
|
|
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
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
875
|
-
- `fn` **([string][17] | [function][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
1317
|
-
- `offsetY` **[number][
|
|
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`][
|
|
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][
|
|
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`][
|
|
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`][
|
|
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][
|
|
1453
|
-
- `height` **[number][
|
|
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][
|
|
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][
|
|
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][
|
|
1587
|
-
- `offsetY` **[number][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
1907
|
-
- `longitude` **[number][
|
|
1908
|
-
- `altitude` **[number][
|
|
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][
|
|
1937
|
-
- `sec` **([number][
|
|
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][
|
|
1952
|
-
- `sec` **[number][
|
|
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`][
|
|
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][
|
|
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][
|
|
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][
|
|
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`][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
2127
|
-
- `argsOrSec` **([Array][
|
|
2128
|
-
- `sec` **[number][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
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][
|
|
2220
|
-
- `sec` **[number][
|
|
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][
|
|
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][
|
|
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://
|
|
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
|
-
[
|
|
2343
|
+
[23]: https://vuejs.org/v2/api/#Vue-nextTick
|
|
2292
2344
|
|
|
2293
|
-
[
|
|
2345
|
+
[24]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
|
|
2294
2346
|
|
|
2295
|
-
[
|
|
2347
|
+
[25]: http://webdriver.io/api/protocol/execute.html
|
|
2296
2348
|
|
|
2297
|
-
[
|
|
2349
|
+
[26]: https://playwright.dev/docs/api/class-locator#locator-focus
|
|
2298
2350
|
|
|
2299
|
-
[
|
|
2351
|
+
[27]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
|
|
2300
2352
|
|
|
2301
|
-
[
|
|
2353
|
+
[28]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
|
|
2302
2354
|
|
|
2303
|
-
[
|
|
2355
|
+
[29]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
|
|
2304
2356
|
|
|
2305
|
-
[
|
|
2357
|
+
[30]: #fillfield
|
|
2306
2358
|
|
|
2307
|
-
[
|
|
2359
|
+
[31]: #click
|
|
2308
2360
|
|
|
2309
|
-
[
|
|
2361
|
+
[32]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
|
|
2310
2362
|
|
|
2311
|
-
[
|
|
2363
|
+
[33]: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
|
|
2312
2364
|
|
|
2313
|
-
[
|
|
2365
|
+
[34]: https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
|
|
2314
2366
|
|
|
2315
|
-
[
|
|
2367
|
+
[35]: https://webdriver.io/docs/api.html
|
|
2316
2368
|
|
|
2317
|
-
[
|
|
2369
|
+
[36]: http://codecept.io/acceptance/#smartwait
|
|
2318
2370
|
|
|
2319
|
-
[
|
|
2371
|
+
[37]: http://webdriver.io/docs/timeouts.html
|