codeceptjs 4.2.0 → 4.2.1-beta.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 (63) hide show
  1. package/README.md +2 -0
  2. package/bin/codecept.js +11 -0
  3. package/docs/agents.md +26 -1
  4. package/docs/ai.md +57 -0
  5. package/docs/alternative-browsers.md +175 -148
  6. package/docs/assertions.md +74 -0
  7. package/docs/bootstrap.md +2 -0
  8. package/docs/commands.md +45 -0
  9. package/docs/configuration.md +37 -0
  10. package/docs/debugging.md +1 -1
  11. package/docs/helpers/ApiDataFactory.md +20 -20
  12. package/docs/helpers/Appium.md +1615 -670
  13. package/docs/helpers/Decision.md +146 -0
  14. package/docs/helpers/GraphQL.md +31 -31
  15. package/docs/helpers/GraphQLDataFactory.md +20 -20
  16. package/docs/helpers/Kitesurf.md +1808 -25
  17. package/docs/helpers/Lightpanda.md +139 -0
  18. package/docs/helpers/Obscura.md +1799 -74
  19. package/docs/helpers/Playwright.md +490 -428
  20. package/docs/helpers/Puppeteer.md +317 -255
  21. package/docs/helpers/REST.md +43 -43
  22. package/docs/helpers/WebDriver.md +237 -175
  23. package/docs/installation.md +16 -0
  24. package/docs/mcp.md +7 -1
  25. package/docs/parallel.md +35 -1
  26. package/docs/plugins/pause.md +2 -1
  27. package/docs/plugins/sitemap.md +48 -0
  28. package/docs/plugins.md +4 -0
  29. package/lib/ai.js +81 -2
  30. package/lib/codecept.js +32 -2
  31. package/lib/command/init.js +22 -0
  32. package/lib/command/initAgent.js +78 -0
  33. package/lib/command/run-multiple.js +3 -0
  34. package/lib/command/run-workers.js +10 -3
  35. package/lib/command/run.js +3 -2
  36. package/lib/command/utils.js +15 -0
  37. package/lib/command/workers/runTests.js +10 -10
  38. package/lib/container.js +4 -2
  39. package/lib/effects.js +19 -1
  40. package/lib/helper/CDPBrowser.js +349 -1384
  41. package/lib/helper/Decision.js +256 -0
  42. package/lib/helper/Kitesurf.js +3 -21
  43. package/lib/helper/Lightpanda.js +137 -0
  44. package/lib/helper/Obscura.js +21 -238
  45. package/lib/helper/Playwright.js +6 -4
  46. package/lib/helper/Puppeteer.js +12 -7
  47. package/lib/helper/WebDriver.js +2 -1
  48. package/lib/listener/result.js +4 -0
  49. package/lib/mocha/bdd.js +19 -1
  50. package/lib/plugin/junitReporter.js +4 -1
  51. package/lib/plugin/pause.js +4 -1
  52. package/lib/plugin/sitemap.js +228 -0
  53. package/lib/recorder.js +19 -18
  54. package/lib/result.js +16 -0
  55. package/lib/step/base.js +12 -0
  56. package/lib/utils.js +2 -10
  57. package/lib/webServer.js +193 -0
  58. package/lib/workers.js +118 -31
  59. package/package.json +4 -2
  60. package/typings/index.d.ts +60 -7
  61. package/typings/promiseBasedTypes.d.ts +772 -824
  62. package/typings/types.d.ts +866 -833
  63. package/docs/helpers/CDPBrowser.md +0 -2138
@@ -25,7 +25,7 @@ If you have a custom grid, use a cloud service, or prefer to run your own driver
25
25
 
26
26
  This helper should be configured in codecept.conf.js
27
27
 
28
- Type: [object][17]
28
+ Type: [object][19]
29
29
 
30
30
  ### Properties
31
31
 
@@ -46,9 +46,9 @@ Type: [object][17]
46
46
  * `keepCookies` **[boolean][34]?** keep cookies between tests when `restart` set to false.
47
47
  * `windowSize` **[string][18]?** default window size. Set to `maximize` or a dimension in the format `640x480`.
48
48
  * `waitForTimeout` **[number][23]?** sets default wait time in *ms* for all `wait*` functions.
49
- * `desiredCapabilities` **[object][17]?** Selenium's [desired capabilities][7].
49
+ * `desiredCapabilities` **[object][19]?** Selenium's [desired capabilities][7].
50
50
  * `manualStart` **[boolean][34]?** do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriver"]._startBrowser()`.
51
- * `timeouts` **[object][17]?** [WebDriver timeouts][40] defined as hash.
51
+ * `timeouts` **[object][19]?** [WebDriver timeouts][40] defined as hash.
52
52
  * `highlightElement` **[boolean][34]?** highlight the interacting elements. Default: false. Note: only activate under verbose mode (--verbose).
53
53
  * `logLevel` **[string][18]?** level of logging verbosity. Default: silent. Options: trace | debug | info | warn | error | silent. More info: [https://webdriver.io/docs/configuration/#loglevel][41]
54
54
 
@@ -412,95 +412,11 @@ const browser = WebDriver.browser
412
412
 
413
413
  * `config`  
414
414
 
415
- ### _isShadowLocator
416
-
417
- Check if locator is type of "Shadow"
418
-
419
- #### Parameters
420
-
421
- * `locator` **[object][17]** 
422
-
423
- ### _locate
424
-
425
- Get elements by different locator types, including strict locator.
426
- Should be used in custom helpers:
427
-
428
- ```js
429
- this.helpers['WebDriver']._locate({name: 'password'}).then //...
430
- ```
431
-
432
- #### Parameters
433
-
434
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
435
- * `smartWait`
436
-
437
- ### _locateByRole
438
-
439
- Locate elements by ARIA role using WebdriverIO accessibility selectors
440
-
441
- #### Parameters
442
-
443
- * `locator` **[object][17]** role locator object { role: string, text?: string, exact?: boolean }
444
-
445
- ### _locateCheckable
446
-
447
- Find a checkbox by providing human-readable text:
448
-
449
- ```js
450
- this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').then // ...
451
- ```
452
-
453
- #### Parameters
454
-
455
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
456
-
457
- ### _locateClickable
458
-
459
- Find a clickable element by providing human-readable text:
460
-
461
- ```js
462
- const els = await this.helpers.WebDriver._locateClickable('Next page');
463
- const els = await this.helpers.WebDriver._locateClickable('Next page', '.pages');
464
- ```
465
-
466
- #### Parameters
467
-
468
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
469
- * `context`  
470
-
471
- ### _locateFields
472
-
473
- Find field elements by providing human-readable text:
474
-
475
- ```js
476
- this.helpers['WebDriver']._locateFields('Your email').then // ...
477
- ```
478
-
479
- #### Parameters
480
-
481
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
482
-
483
- ### _locateShadow
484
-
485
- Locate Element within the Shadow Dom
486
-
487
- #### Parameters
488
-
489
- * `locator` **[object][17]** 
490
-
491
- ### _smartWait
492
-
493
- Smart Wait to locate an element
494
-
495
- #### Parameters
496
-
497
- * `locator` **[object][17]** 
498
-
499
415
  ### acceptPopup
500
416
 
501
417
  Accepts the active JavaScript native popup window, as created by window.alert|window.confirm|window.prompt.
502
418
  Don't confuse popups with modal windows, as created by [various
503
- libraries][19].
419
+ libraries][17].
504
420
 
505
421
  ### amOnPage
506
422
 
@@ -536,9 +452,9 @@ I.appendField('name', 'John', '.form-container');
536
452
 
537
453
  #### Parameters
538
454
 
539
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator
455
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator
540
456
  * `value` **[string][18]** text value to append.
541
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
457
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
542
458
 
543
459
  Returns **void** automatically synchronized promise through #recorder
544
460
 
@@ -568,9 +484,9 @@ I.attachFile('#dropzone', 'data/avatar.jpg');
568
484
 
569
485
  #### Parameters
570
486
 
571
- * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
487
+ * `locator` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
572
488
  * `pathToFile` **[string][18]** local file path relative to codecept.conf.ts or codecept.conf.js config file.
573
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
489
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
574
490
 
575
491
  Returns **void** automatically synchronized promise through #recorder
576
492
 
@@ -594,7 +510,7 @@ I.dontSee('#add-to-cart-btn');
594
510
 
595
511
  #### Parameters
596
512
 
597
- * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
513
+ * `locator` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
598
514
  * `options` **any?** Playwright only: [Additional options][21] for available options object as 2nd argument.
599
515
 
600
516
  Returns **void** automatically synchronized promise through #recorder
@@ -619,8 +535,19 @@ I.checkOption('agree', '//form');
619
535
 
620
536
  #### Parameters
621
537
 
622
- * `field` **([string][18] | [object][17])** checkbox located by label | name | CSS | XPath | strict locator.
623
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
538
+ * `field` **([string][18] | [object][19])** checkbox located by label | name | CSS | XPath | strict locator.
539
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
540
+
541
+ Returns **void** automatically synchronized promise through #recorder
542
+
543
+ ### clearClipboard
544
+
545
+ Clears the system clipboard.
546
+
547
+ ```js
548
+ I.clearClipboard();
549
+ I.seeClipboardEquals('');
550
+ ```
624
551
 
625
552
  Returns **void** automatically synchronized promise through #recorder
626
553
 
@@ -655,8 +582,8 @@ I.clearField('Email', '.form-container');
655
582
  #### Parameters
656
583
 
657
584
  * `field`  
658
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
659
- * `editable` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
585
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
586
+ * `editable` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
660
587
 
661
588
  Returns **void** automatically synchronized promise through #recorder.
662
589
 
@@ -694,8 +621,8 @@ I.click({role: 'button', name: 'Submit'});
694
621
 
695
622
  #### Parameters
696
623
 
697
- * `locator` **([string][18] | [object][17])** (optional, `'//body'` by default) clickable link or button located by text, or any element located by CSS|XPath|strict locator.
698
- * `context` **([string][18]? | [object][17] | null)** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
624
+ * `locator` **([string][18] | [object][19])** (optional, `'//body'` by default) clickable link or button located by text, or any element located by CSS|XPath|strict locator.
625
+ * `context` **([string][18]? | [object][19] | null)** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
699
626
 
700
627
  Returns **void** automatically synchronized promise through #recorder
701
628
 
@@ -715,7 +642,7 @@ I.clickXY('#someElement', 50, 30);
715
642
 
716
643
  #### Parameters
717
644
 
718
- * `locator` **([string][18] | [object][17] | [number][23])** Element to click on or X coordinate if no element.
645
+ * `locator` **([string][18] | [object][19] | [number][23])** Element to click on or X coordinate if no element.
719
646
  * `x` **[number][23]?** X coordinate relative to element's top-left, or Y coordinate if locator is a number.
720
647
  * `y` **[number][23]?** Y coordinate relative to element's top-left.
721
648
 
@@ -769,7 +696,7 @@ I.dontSee('Login', '.nav'); // no login inside .nav element
769
696
  #### Parameters
770
697
 
771
698
  * `text` **[string][18]** which is not present.
772
- * `context` **([string][18] | [object][17])?** (optional) element located by CSS|XPath|strict locator in which to perfrom search.
699
+ * `context` **([string][18] | [object][19])?** (optional) element located by CSS|XPath|strict locator in which to perfrom search.
773
700
 
774
701
  Returns **void** automatically synchronized promise through #recorder
775
702
 
@@ -786,7 +713,7 @@ I.dontSeeCheckboxIsChecked('agree'); // located by name
786
713
 
787
714
  #### Parameters
788
715
 
789
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
716
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
790
717
 
791
718
  Returns **void** automatically synchronized promise through #recorder
792
719
 
@@ -849,8 +776,8 @@ I.dontSeeElement('.modal', '#container');
849
776
 
850
777
  #### Parameters
851
778
 
852
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|Strict locator.
853
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
779
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|Strict locator.
780
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
854
781
 
855
782
  Returns **void** automatically synchronized promise through #recorder
856
783
 
@@ -864,7 +791,7 @@ I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or
864
791
 
865
792
  #### Parameters
866
793
 
867
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|Strict locator.
794
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|Strict locator.
868
795
 
869
796
  Returns **void** automatically synchronized promise through #recorder
870
797
 
@@ -894,9 +821,9 @@ I.dontSeeInField('Name', 'old_value', '.form-container');
894
821
 
895
822
  #### Parameters
896
823
 
897
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
898
- * `value` **([string][18] | [object][17])** value to check.
899
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
824
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
825
+ * `value` **([string][18] | [object][19])** value to check.
826
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
900
827
 
901
828
  Returns **void** automatically synchronized promise through #recorder
902
829
 
@@ -943,8 +870,8 @@ I.doubleClick('.btn.edit');
943
870
 
944
871
  #### Parameters
945
872
 
946
- * `locator` **([string][18] | [object][17])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
947
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
873
+ * `locator` **([string][18] | [object][19])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
874
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
948
875
 
949
876
  Returns **void** automatically synchronized promise through #recorder
950
877
 
@@ -959,8 +886,8 @@ I.dragAndDrop('#dragHandle', '#container');
959
886
 
960
887
  #### Parameters
961
888
 
962
- * `srcElement` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
963
- * `destElement` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
889
+ * `srcElement` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
890
+ * `destElement` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
964
891
 
965
892
  Returns **void** automatically synchronized promise through #recorder
966
893
 
@@ -976,7 +903,7 @@ I.dragSlider('#slider', -70);
976
903
 
977
904
  #### Parameters
978
905
 
979
- * `locator` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
906
+ * `locator` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
980
907
  * `offsetX` **[number][23]** position to drag.
981
908
 
982
909
  Returns **void** automatically synchronized promise through #recorder
@@ -1072,9 +999,9 @@ I.fillField('Name', 'John', '#section2');
1072
999
 
1073
1000
  #### Parameters
1074
1001
 
1075
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
1076
- * `value` **([string][18] | [object][17])** text value to fill.
1077
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1002
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
1003
+ * `value` **([string][18] | [object][19])** text value to fill.
1004
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1078
1005
 
1079
1006
  Returns **void** automatically synchronized promise through #recorder{{ custom }}
1080
1007
 
@@ -1092,7 +1019,7 @@ I.see('#add-to-cart-bnt');
1092
1019
 
1093
1020
  #### Parameters
1094
1021
 
1095
- * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1022
+ * `locator` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
1096
1023
  * `options` **any?** Playwright only: [Additional options][29] for available options object as 2nd argument.
1097
1024
 
1098
1025
  Returns **void** automatically synchronized promise through #recorder
@@ -1126,8 +1053,8 @@ I.forceClick({css: 'nav a.login'});
1126
1053
 
1127
1054
  #### Parameters
1128
1055
 
1129
- * `locator` **([string][18] | [object][17])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1130
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1056
+ * `locator` **([string][18] | [object][19])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1057
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1131
1058
 
1132
1059
  Returns **void** automatically synchronized promise through #recorder
1133
1060
 
@@ -1150,8 +1077,8 @@ I.forceRightClick('Menu');
1150
1077
 
1151
1078
  #### Parameters
1152
1079
 
1153
- * `locator` **([string][18] | [object][17])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1154
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1080
+ * `locator` **([string][18] | [object][19])** clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1081
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1155
1082
 
1156
1083
  Returns **void** automatically synchronized promise through #recorder
1157
1084
 
@@ -1178,7 +1105,7 @@ let hint = await I.grabAttributeFrom('#tooltip', 'title');
1178
1105
 
1179
1106
  #### Parameters
1180
1107
 
1181
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1108
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1182
1109
  * `attr` **[string][18]** attribute name.
1183
1110
 
1184
1111
  Returns **[Promise][24]<[string][18]>** attribute value
@@ -1194,7 +1121,7 @@ let hints = await I.grabAttributeFromAll('.tooltip', 'title');
1194
1121
 
1195
1122
  #### Parameters
1196
1123
 
1197
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1124
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1198
1125
  * `attr` **[string][18]** attribute name.
1199
1126
 
1200
1127
  Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
@@ -1209,7 +1136,7 @@ let logs = await I.grabBrowserLogs();
1209
1136
  console.log(JSON.stringify(logs))
1210
1137
  ```
1211
1138
 
1212
- Returns **([Promise][24]<[Array][30]<[object][17]>> | [undefined][31])** all browser logs
1139
+ Returns **([Promise][24]<[Array][30]<[object][19]>> | [undefined][31])** all browser logs
1213
1140
 
1214
1141
  ### grabCookie
1215
1142
 
@@ -1240,7 +1167,7 @@ const value = await I.grabCssPropertyFrom('h3', 'font-weight');
1240
1167
 
1241
1168
  #### Parameters
1242
1169
 
1243
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1170
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1244
1171
  * `cssProperty` **[string][18]** CSS property name.
1245
1172
 
1246
1173
  Returns **[Promise][24]<[string][18]>** CSS value
@@ -1256,7 +1183,7 @@ const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
1256
1183
 
1257
1184
  #### Parameters
1258
1185
 
1259
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1186
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1260
1187
  * `cssProperty` **[string][18]** CSS property name.
1261
1188
 
1262
1189
  Returns **[Promise][24]<[Array][30]<[string][18]>>** CSS value
@@ -1306,12 +1233,27 @@ const width = await I.grabElementBoundingRect('h3', 'width');
1306
1233
 
1307
1234
  #### Parameters
1308
1235
 
1309
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1236
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1310
1237
  * `prop` &#x20;
1311
1238
  * `elementSize` **[string][18]?** x, y, width or height of the given element.
1312
1239
 
1313
1240
  Returns **([Promise][24]<DOMRect> | [Promise][24]<[number][23]>)** Element bounding rectangle
1314
1241
 
1242
+ ### grabFromClipboard
1243
+
1244
+ Grabs the text content of the system clipboard and returns it to test.
1245
+ Resumes test execution, so **should be used inside async function with `await`** operator.
1246
+
1247
+ ```js
1248
+ I.click('Copy to clipboard');
1249
+ let url = await I.grabFromClipboard();
1250
+ ```
1251
+
1252
+ Reading the clipboard requires a secure context (`https` or `localhost`) and is supported
1253
+ in Chromium-based browsers, where read access is granted automatically.
1254
+
1255
+ Returns **[Promise][24]<[string][18]>** the system clipboard contents.
1256
+
1315
1257
  ### grabHTMLFrom
1316
1258
 
1317
1259
  Retrieves the innerHTML from an element located by CSS or XPath and returns it to test.
@@ -1325,7 +1267,7 @@ let postHTML = await I.grabHTMLFrom('#post');
1325
1267
  #### Parameters
1326
1268
 
1327
1269
  * `locator` &#x20;
1328
- * `element` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1270
+ * `element` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1329
1271
 
1330
1272
  Returns **[Promise][24]<[string][18]>** HTML code for an element
1331
1273
 
@@ -1341,7 +1283,7 @@ let postHTMLs = await I.grabHTMLFromAll('.post');
1341
1283
  #### Parameters
1342
1284
 
1343
1285
  * `locator` &#x20;
1344
- * `element` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1286
+ * `element` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1345
1287
 
1346
1288
  Returns **[Promise][24]<[Array][30]<[string][18]>>** HTML code for an element
1347
1289
 
@@ -1367,7 +1309,7 @@ let numOfElements = await I.grabNumberOfVisibleElements('p');
1367
1309
 
1368
1310
  #### Parameters
1369
1311
 
1370
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1312
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1371
1313
 
1372
1314
  Returns **[Promise][24]<[number][23]>** number of visible elements
1373
1315
 
@@ -1416,7 +1358,7 @@ If multiple elements found returns first element.
1416
1358
 
1417
1359
  #### Parameters
1418
1360
 
1419
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1361
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1420
1362
 
1421
1363
  Returns **[Promise][24]<[string][18]>** attribute value
1422
1364
 
@@ -1431,7 +1373,7 @@ let pins = await I.grabTextFromAll('#pin li');
1431
1373
 
1432
1374
  #### Parameters
1433
1375
 
1434
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1376
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1435
1377
 
1436
1378
  Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
1437
1379
 
@@ -1458,7 +1400,7 @@ let email = await I.grabValueFrom('input[name=email]');
1458
1400
 
1459
1401
  #### Parameters
1460
1402
 
1461
- * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1403
+ * `locator` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
1462
1404
 
1463
1405
  Returns **[Promise][24]<[string][18]>** attribute value
1464
1406
 
@@ -1473,7 +1415,7 @@ let inputs = await I.grabValueFromAll('//form/input');
1473
1415
 
1474
1416
  #### Parameters
1475
1417
 
1476
- * `locator` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
1418
+ * `locator` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
1477
1419
 
1478
1420
  Returns **[Promise][24]<[Array][30]<[string][18]>>** attribute value
1479
1421
 
@@ -1488,7 +1430,7 @@ const webElement = await I.grabWebElement('#button');
1488
1430
 
1489
1431
  #### Parameters
1490
1432
 
1491
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1433
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1492
1434
 
1493
1435
  Returns **[Promise][24]<any>** WebElement of being used Web helper
1494
1436
 
@@ -1503,7 +1445,7 @@ const webElements = await I.grabWebElements('#button');
1503
1445
 
1504
1446
  #### Parameters
1505
1447
 
1506
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1448
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1507
1449
 
1508
1450
  Returns **[Promise][24]<any>** WebElement of being used Web helper
1509
1451
 
@@ -1523,10 +1465,10 @@ I.moveCursorTo('#submit', '.container');
1523
1465
 
1524
1466
  #### Parameters
1525
1467
 
1526
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1468
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1527
1469
  * `xOffset` &#x20;
1528
1470
  * `yOffset` &#x20;
1529
- * `offsetX` **([number][23] | [string][18] | [object][17])** (optional, `0` by default) X-axis offset or context locator.
1471
+ * `offsetX` **([number][23] | [string][18] | [object][19])** (optional, `0` by default) X-axis offset or context locator.
1530
1472
  * `offsetY` **[number][23]** (optional, `0` by default) Y-axis offset.
1531
1473
 
1532
1474
  Returns **void** automatically synchronized promise through #recorder
@@ -1690,8 +1632,8 @@ I.rightClick('Click me', '.context');
1690
1632
 
1691
1633
  #### Parameters
1692
1634
 
1693
- * `locator` **([string][18] | [object][17])** clickable element located by CSS|XPath|strict locator.
1694
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS|XPath|strict locator.
1635
+ * `locator` **([string][18] | [object][19])** clickable element located by CSS|XPath|strict locator.
1636
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS|XPath|strict locator.
1695
1637
 
1696
1638
  Returns **void** automatically synchronized promise through #recorder
1697
1639
 
@@ -1732,7 +1674,7 @@ I.saveElementScreenshot(`#submit`,'debug.png');
1732
1674
 
1733
1675
  #### Parameters
1734
1676
 
1735
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1677
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1736
1678
  * `fileName` **[string][18]** file name to save.
1737
1679
 
1738
1680
  Returns **void** automatically synchronized promise through #recorder
@@ -1767,7 +1709,7 @@ I.scrollIntoView('#submit', { behavior: "smooth", block: "center", inline: "cent
1767
1709
 
1768
1710
  #### Parameters
1769
1711
 
1770
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1712
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1771
1713
  * `scrollIntoViewOptions` **(ScrollIntoViewOptions | [boolean][34])** either alignToTop=true|false or scrollIntoViewOptions. See [https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView][35].
1772
1714
 
1773
1715
  Returns **void** automatically synchronized promise through #recorder
@@ -1804,7 +1746,7 @@ I.scrollTo('#submit', 5, 5);
1804
1746
 
1805
1747
  #### Parameters
1806
1748
 
1807
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1749
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1808
1750
  * `offsetX` **[number][23]** (optional, `0` by default) X-axis offset.
1809
1751
  * `offsetY` **[number][23]** (optional, `0` by default) Y-axis offset.
1810
1752
 
@@ -1824,7 +1766,7 @@ I.see('Register', {css: 'form.register'}); // use strict locator
1824
1766
  #### Parameters
1825
1767
 
1826
1768
  * `text` **[string][18]** expected on page.
1827
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1769
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
1828
1770
 
1829
1771
  Returns **void** automatically synchronized promise through #recorder
1830
1772
 
@@ -1838,8 +1780,8 @@ I.seeAttributesOnElements('//form', { method: "post"});
1838
1780
 
1839
1781
  #### Parameters
1840
1782
 
1841
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1842
- * `attributes` **[object][17]** attributes and their values to check.
1783
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1784
+ * `attributes` **[object][19]** attributes and their values to check.
1843
1785
 
1844
1786
  Returns **void** automatically synchronized promise through #recorder
1845
1787
 
@@ -1856,7 +1798,25 @@ I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
1856
1798
 
1857
1799
  #### Parameters
1858
1800
 
1859
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
1801
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
1802
+
1803
+ Returns **void** automatically synchronized promise through #recorder
1804
+
1805
+ ### seeClipboardEquals
1806
+
1807
+ Checks that the system clipboard is equal to the given text.
1808
+
1809
+ ```js
1810
+ I.click('Copy to clipboard');
1811
+ I.seeClipboardEquals('https://codecept.io');
1812
+ ```
1813
+
1814
+ Reading the clipboard requires a secure context (`https` or `localhost`) and is supported
1815
+ in Chromium-based browsers, where read access is granted automatically.
1816
+
1817
+ #### Parameters
1818
+
1819
+ * `text` **[string][18]** value to check.
1860
1820
 
1861
1821
  Returns **void** automatically synchronized promise through #recorder
1862
1822
 
@@ -1884,8 +1844,8 @@ I.seeCssPropertiesOnElements('h3', { 'font-weight': "bold"});
1884
1844
 
1885
1845
  #### Parameters
1886
1846
 
1887
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1888
- * `cssProperties` **[object][17]** object with CSS properties and their values to check.
1847
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1848
+ * `cssProperties` **[object][19]** object with CSS properties and their values to check.
1889
1849
 
1890
1850
  Returns **void** automatically synchronized promise through #recorder
1891
1851
 
@@ -1940,8 +1900,8 @@ I.seeElement({role: 'dialog'});
1940
1900
 
1941
1901
  #### Parameters
1942
1902
 
1943
- * `locator` **([string][18] | [object][17])** located by CSS|XPath|strict locator.
1944
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1903
+ * `locator` **([string][18] | [object][19])** located by CSS|XPath|strict locator.
1904
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1945
1905
 
1946
1906
  Returns **void** automatically synchronized promise through #recorder
1947
1907
 
@@ -1956,7 +1916,25 @@ I.seeElementInDOM('#modal');
1956
1916
 
1957
1917
  #### Parameters
1958
1918
 
1959
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
1919
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
1920
+
1921
+ Returns **void** automatically synchronized promise through #recorder
1922
+
1923
+ ### seeInClipboard
1924
+
1925
+ Checks that the system clipboard contains the given text.
1926
+
1927
+ ```js
1928
+ I.click('Copy to clipboard');
1929
+ I.seeInClipboard('https://codecept.io');
1930
+ ```
1931
+
1932
+ Reading the clipboard requires a secure context (`https` or `localhost`) and is supported
1933
+ in Chromium-based browsers, where read access is granted automatically.
1934
+
1935
+ #### Parameters
1936
+
1937
+ * `text` **[string][18]** value to check.
1960
1938
 
1961
1939
  Returns **void** automatically synchronized promise through #recorder
1962
1940
 
@@ -1992,9 +1970,9 @@ I.seeInField('Name', 'John', '.form-container');
1992
1970
 
1993
1971
  #### Parameters
1994
1972
 
1995
- * `field` **([string][18] | [object][17])** located by label|name|CSS|XPath|strict locator.
1996
- * `value` **([string][18] | [object][17])** value to check.
1997
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1973
+ * `field` **([string][18] | [object][19])** located by label|name|CSS|XPath|strict locator.
1974
+ * `value` **([string][18] | [object][19])** value to check.
1975
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
1998
1976
 
1999
1977
  Returns **void** automatically synchronized promise through #recorder
2000
1978
 
@@ -2046,7 +2024,7 @@ I.seeNumberOfElements('#submitBtn', 1);
2046
2024
 
2047
2025
  #### Parameters
2048
2026
 
2049
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2027
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2050
2028
  * `num` **[number][23]** number of elements.
2051
2029
 
2052
2030
  Returns **void** automatically synchronized promise through #recorder
@@ -2062,7 +2040,7 @@ I.seeNumberOfVisibleElements('.buttons', 3);
2062
2040
 
2063
2041
  #### Parameters
2064
2042
 
2065
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2043
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2066
2044
  * `num` **[number][23]** number of elements.
2067
2045
 
2068
2046
  Returns **void** automatically synchronized promise through #recorder
@@ -2078,7 +2056,7 @@ I.seeTextEquals('text', 'h1');
2078
2056
  #### Parameters
2079
2057
 
2080
2058
  * `text` **[string][18]** element value to check.
2081
- * `context` **([string][18] | [object][17])?** element located by CSS|XPath|strict locator.
2059
+ * `context` **([string][18] | [object][19])?** element located by CSS|XPath|strict locator.
2082
2060
 
2083
2061
  Returns **void** automatically synchronized promise through #recorder
2084
2062
 
@@ -2123,9 +2101,9 @@ I.selectOption('Which OS do you use?', ['Android', 'iOS']);
2123
2101
 
2124
2102
  #### Parameters
2125
2103
 
2126
- * `select` **([string][18] | [object][17])** field located by label|name|CSS|XPath|strict locator.
2104
+ * `select` **([string][18] | [object][19])** field located by label|name|CSS|XPath|strict locator.
2127
2105
  * `option` **([string][18] | [Array][30]<any>)** visible text or value of option.
2128
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
2106
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
2129
2107
 
2130
2108
  Returns **void** automatically synchronized promise through #recorder
2131
2109
 
@@ -2163,7 +2141,7 @@ I.switchTo(); // switch back to main page
2163
2141
 
2164
2142
  #### Parameters
2165
2143
 
2166
- * `locator` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS|XPath|strict locator.
2144
+ * `locator` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS|XPath|strict locator.
2167
2145
 
2168
2146
  Returns **void** automatically synchronized promise through #recorder
2169
2147
 
@@ -2261,8 +2239,8 @@ I.uncheckOption('agree', '//form');
2261
2239
 
2262
2240
  #### Parameters
2263
2241
 
2264
- * `field` **([string][18] | [object][17])** checkbox located by label | name | CSS | XPath | strict locator.
2265
- * `context` **([string][18]? | [object][17])** (optional, `null` by default) element located by CSS | XPath | strict locator.
2242
+ * `field` **([string][18] | [object][19])** checkbox located by label | name | CSS | XPath | strict locator.
2243
+ * `context` **([string][18]? | [object][19])** (optional, `null` by default) element located by CSS | XPath | strict locator.
2266
2244
 
2267
2245
  Returns **void** automatically synchronized promise through #recorder
2268
2246
 
@@ -2322,7 +2300,7 @@ I.waitForClickable('.btn.continue', 5); // wait for 5 secs
2322
2300
 
2323
2301
  #### Parameters
2324
2302
 
2325
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2303
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2326
2304
  * `waitTimeout` &#x20;
2327
2305
  * `sec` **[number][23]?** (optional, `1` by default) time in seconds to wait
2328
2306
 
@@ -2354,7 +2332,7 @@ I.waitForDetached('#popup');
2354
2332
 
2355
2333
  #### Parameters
2356
2334
 
2357
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2335
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2358
2336
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2359
2337
 
2360
2338
  Returns **void** automatically synchronized promise through #recorder
@@ -2371,7 +2349,7 @@ I.waitForElement('.btn.continue', 5); // wait for 5 secs
2371
2349
 
2372
2350
  #### Parameters
2373
2351
 
2374
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2352
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2375
2353
  * `sec` **[number][23]?** (optional, `1` by default) time in seconds to wait
2376
2354
 
2377
2355
  Returns **void** automatically synchronized promise through #recorder
@@ -2383,7 +2361,7 @@ Element can be located by CSS or XPath.
2383
2361
 
2384
2362
  #### Parameters
2385
2363
 
2386
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2364
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2387
2365
  * `sec` **[number][23]** (optional) time in seconds to wait, 1 by default.
2388
2366
 
2389
2367
  Returns **void** automatically synchronized promise through #recorder
@@ -2422,7 +2400,7 @@ I.waitForInvisible('#popup');
2422
2400
 
2423
2401
  #### Parameters
2424
2402
 
2425
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2403
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2426
2404
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2427
2405
 
2428
2406
  Returns **void** automatically synchronized promise through #recorder
@@ -2457,7 +2435,7 @@ I.waitForText('Thank you, form has been submitted', 5, '#modal');
2457
2435
 
2458
2436
  * `text` **[string][18]** to wait for.
2459
2437
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2460
- * `context` **([string][18] | [object][17])?** (optional) element located by CSS|XPath|strict locator.
2438
+ * `context` **([string][18] | [object][19])?** (optional) element located by CSS|XPath|strict locator.
2461
2439
 
2462
2440
  Returns **void** automatically synchronized promise through #recorder
2463
2441
 
@@ -2471,7 +2449,7 @@ I.waitForValue('//input', "GoodValue");
2471
2449
 
2472
2450
  #### Parameters
2473
2451
 
2474
- * `field` **([string][18] | [object][17])** input field.
2452
+ * `field` **([string][18] | [object][19])** input field.
2475
2453
  * `value` **[string][18]** expected value.
2476
2454
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2477
2455
 
@@ -2488,7 +2466,7 @@ I.waitForVisible('#popup');
2488
2466
 
2489
2467
  #### Parameters
2490
2468
 
2491
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2469
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2492
2470
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2493
2471
 
2494
2472
  Returns **void** automatically synchronized promise through #recorder
@@ -2518,7 +2496,7 @@ I.waitNumberOfVisibleElements('a', 3);
2518
2496
 
2519
2497
  #### Parameters
2520
2498
 
2521
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2499
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2522
2500
  * `num` **[number][23]** number of elements.
2523
2501
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2524
2502
 
@@ -2535,7 +2513,7 @@ I.waitToHide('#popup');
2535
2513
 
2536
2514
  #### Parameters
2537
2515
 
2538
- * `locator` **([string][18] | [object][17])** element located by CSS|XPath|strict locator.
2516
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2539
2517
  * `sec` **[number][23]** (optional, `1` by default) time in seconds to wait
2540
2518
 
2541
2519
  Returns **void** automatically synchronized promise through #recorder
@@ -2556,6 +2534,90 @@ I.waitUrlEquals('http://127.0.0.1:8000/info');
2556
2534
 
2557
2535
  Returns **void** automatically synchronized promise through #recorder
2558
2536
 
2537
+ ### _isShadowLocator
2538
+
2539
+ Check if locator is type of "Shadow"
2540
+
2541
+ #### Parameters
2542
+
2543
+ * `locator` **[object][19]**&#x20;
2544
+
2545
+ ### _locate
2546
+
2547
+ Get elements by different locator types, including strict locator.
2548
+ Should be used in custom helpers:
2549
+
2550
+ ```js
2551
+ this.helpers['WebDriver']._locate({name: 'password'}).then //...
2552
+ ```
2553
+
2554
+ #### Parameters
2555
+
2556
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2557
+ * `smartWait`
2558
+
2559
+ ### _locateByRole
2560
+
2561
+ Locate elements by ARIA role using WebdriverIO accessibility selectors
2562
+
2563
+ #### Parameters
2564
+
2565
+ * `locator` **[object][19]** role locator object { role: string, text?: string, exact?: boolean }
2566
+
2567
+ ### _locateCheckable
2568
+
2569
+ Find a checkbox by providing human-readable text:
2570
+
2571
+ ```js
2572
+ this.helpers['WebDriver']._locateCheckable('I agree with terms and conditions').then // ...
2573
+ ```
2574
+
2575
+ #### Parameters
2576
+
2577
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2578
+
2579
+ ### _locateClickable
2580
+
2581
+ Find a clickable element by providing human-readable text:
2582
+
2583
+ ```js
2584
+ const els = await this.helpers.WebDriver._locateClickable('Next page');
2585
+ const els = await this.helpers.WebDriver._locateClickable('Next page', '.pages');
2586
+ ```
2587
+
2588
+ #### Parameters
2589
+
2590
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2591
+ * `context` &#x20;
2592
+
2593
+ ### _locateFields
2594
+
2595
+ Find field elements by providing human-readable text:
2596
+
2597
+ ```js
2598
+ this.helpers['WebDriver']._locateFields('Your email').then // ...
2599
+ ```
2600
+
2601
+ #### Parameters
2602
+
2603
+ * `locator` **([string][18] | [object][19])** element located by CSS|XPath|strict locator.
2604
+
2605
+ ### _locateShadow
2606
+
2607
+ Locate Element within the Shadow Dom
2608
+
2609
+ #### Parameters
2610
+
2611
+ * `locator` **[object][19]**&#x20;
2612
+
2613
+ ### _smartWait
2614
+
2615
+ Smart Wait to locate an element
2616
+
2617
+ #### Parameters
2618
+
2619
+ * `locator` **[object][19]**&#x20;
2620
+
2559
2621
  [1]: http://webdriver.io/
2560
2622
 
2561
2623
  [2]: https://webdriver.io/blog/2023/07/31/driver-management/
@@ -2588,11 +2650,11 @@ Returns **void** automatically synchronized promise through #recorder
2588
2650
 
2589
2651
  [16]: http://webdriver.io/guide/usage/multiremote.html
2590
2652
 
2591
- [17]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
2653
+ [17]: http://jster.net/category/windows-modals-popups
2592
2654
 
2593
2655
  [18]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
2594
2656
 
2595
- [19]: http://jster.net/category/windows-modals-popups
2657
+ [19]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
2596
2658
 
2597
2659
  [20]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
2598
2660