codeceptjs 3.5.10 → 3.5.11

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.
@@ -33,7 +33,7 @@ const ElementNotFound = require('./errors/ElementNotFound');
33
33
  const RemoteBrowserConnectionRefused = require('./errors/RemoteBrowserConnectionRefused');
34
34
  const Popup = require('./extras/Popup');
35
35
  const Console = require('./extras/Console');
36
- const findReact = require('./extras/React');
36
+ const { findReact, findVue } = require('./extras/PlaywrightReactVueLocator');
37
37
 
38
38
  let playwright;
39
39
  let perfTiming;
@@ -666,7 +666,7 @@ class Playwright extends Helper {
666
666
  * ```
667
667
  *
668
668
  * @param {string} description used to show in logs.
669
- * @param {function} fn async function that executed with Playwright helper as argumen
669
+ * @param {function} fn async function that executed with Playwright helper as arguments
670
670
  */
671
671
  usePlaywrightTo(description, fn) {
672
672
  return this._useTo(...arguments);
@@ -965,16 +965,9 @@ class Playwright extends Helper {
965
965
  }
966
966
 
967
967
  /**
968
- * Resize the current window to provided width and height.
969
- * First parameter can be set to `maximize`.
970
- *
971
- * @param {number} width width in pixels or `maximize`.
972
- * @param {number} height height in pixels.
973
- * @returns {void} automatically synchronized promise through #recorder
974
- *
975
968
  *
976
969
  * Unlike other drivers Playwright changes the size of a viewport, not the window!
977
- * Playwright does not control the window of a browser so it can't adjust its real size.
970
+ * Playwright does not control the window of a browser, so it can't adjust its real size.
978
971
  * It also can't maximize a window.
979
972
  *
980
973
  * Update configuration to change real window size on start:
@@ -984,6 +977,14 @@ class Playwright extends Helper {
984
977
  * // @codeceptjs/configure package must be installed
985
978
  * { setWindowSize } = require('@codeceptjs/configure');
986
979
  * ````
980
+ *
981
+ * Resize the current window to provided width and height.
982
+ * First parameter can be set to `maximize`.
983
+ *
984
+ * @param {number} width width in pixels or `maximize`.
985
+ * @param {number} height height in pixels.
986
+ * @returns {void} automatically synchronized promise through #recorder
987
+ *
987
988
  */
988
989
  async resizeWindow(width, height) {
989
990
  if (width === 'maximize') {
@@ -1021,7 +1022,7 @@ class Playwright extends Helper {
1021
1022
  * I.moveCursorTo('#submit', 5,5);
1022
1023
  * ```
1023
1024
  *
1024
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1025
+ * @param {string | object} locator located by CSS|XPath|strict locator.
1025
1026
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
1026
1027
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
1027
1028
  * @returns {void} automatically synchronized promise through #recorder
@@ -1049,7 +1050,7 @@ class Playwright extends Helper {
1049
1050
  * I.see('#add-to-cart-bnt');
1050
1051
  * ```
1051
1052
  *
1052
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1053
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1053
1054
  * @param {any} [options] Playwright only: [Additional options](https://playwright.dev/docs/api/class-locator#locator-focus) for available options object as 2nd argument.
1054
1055
  * @returns {void} automatically synchronized promise through #recorder
1055
1056
  *
@@ -1079,7 +1080,7 @@ class Playwright extends Helper {
1079
1080
  * I.dontSee('#add-to-cart-btn');
1080
1081
  * ```
1081
1082
  *
1082
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
1083
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
1083
1084
  * @param {any} [options] Playwright only: [Additional options](https://playwright.dev/docs/api/class-locator#locator-blur) for available options object as 2nd argument.
1084
1085
  * @returns {void} automatically synchronized promise through #recorder
1085
1086
  *
@@ -1095,7 +1096,7 @@ class Playwright extends Helper {
1095
1096
  /**
1096
1097
  * Return the checked status of given element.
1097
1098
  *
1098
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1099
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
1099
1100
  * @param {object} [options] See https://playwright.dev/docs/api/class-locator#locator-is-checked
1100
1101
  * @return {Promise<boolean>}
1101
1102
  *
@@ -1114,7 +1115,7 @@ class Playwright extends Helper {
1114
1115
  /**
1115
1116
  * Return the disabled status of given element.
1116
1117
  *
1117
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1118
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
1118
1119
  * @param {object} [options] See https://playwright.dev/docs/api/class-locator#locator-is-disabled
1119
1120
  * @return {Promise<boolean>}
1120
1121
  *
@@ -1126,24 +1127,26 @@ class Playwright extends Helper {
1126
1127
  }
1127
1128
 
1128
1129
  /**
1130
+ *
1131
+ * ```js
1132
+ * // specify coordinates for source position
1133
+ * I.dragAndDrop('img.src', 'img.dst', { sourcePosition: {x: 10, y: 10} })
1134
+ * ```
1135
+ *
1136
+ * > When no option is set, custom drag and drop would be used, to use the dragAndDrop API from Playwright, please set options, for example `force: true`
1137
+ *
1129
1138
  * Drag an item to a destination element.
1130
1139
  *
1131
1140
  * ```js
1132
1141
  * I.dragAndDrop('#dragHandle', '#container');
1133
1142
  * ```
1134
1143
  *
1135
- * @param {LocatorOrString} srcElement located by CSS|XPath|strict locator.
1136
- * @param {LocatorOrString} destElement located by CSS|XPath|strict locator.
1144
+ * @param {string | object} srcElement located by CSS|XPath|strict locator.
1145
+ * @param {string | object} destElement located by CSS|XPath|strict locator.
1137
1146
  * @returns {void} automatically synchronized promise through #recorder
1138
1147
  *
1139
1148
  * @param {any} [options] [Additional options](https://playwright.dev/docs/api/class-page#page-drag-and-drop) can be passed as 3rd argument.
1140
1149
  *
1141
- * ```js
1142
- * // specify coordinates for source position
1143
- * I.dragAndDrop('img.src', 'img.dst', { sourcePosition: {x: 10, y: 10} })
1144
- * ```
1145
- *
1146
- * > When no option is set, custom drag and drop would be used, to use the dragAndDrop API from Playwright, please set options, for example `force: true`
1147
1150
  */
1148
1151
  async dragAndDrop(srcElement, destElement, options) {
1149
1152
  const src = new Locator(srcElement);
@@ -1273,7 +1276,7 @@ class Playwright extends Helper {
1273
1276
  * I.scrollTo('#submit', 5, 5);
1274
1277
  * ```
1275
1278
  *
1276
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1279
+ * @param {string | object} locator located by CSS|XPath|strict locator.
1277
1280
  * @param {number} [offsetX=0] (optional, `0` by default) X-axis offset.
1278
1281
  * @param {number} [offsetY=0] (optional, `0` by default) Y-axis offset.
1279
1282
  * @returns {void} automatically synchronized promise through #recorder
@@ -1458,7 +1461,7 @@ class Playwright extends Helper {
1458
1461
  * const webElements = await I.grabWebElements('#button');
1459
1462
  * ```
1460
1463
  *
1461
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1464
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
1462
1465
  * @returns {Promise<*>} WebElement of being used Web helper
1463
1466
  *
1464
1467
  *
@@ -1475,7 +1478,7 @@ class Playwright extends Helper {
1475
1478
  * const webElement = await I.grabWebElement('#button');
1476
1479
  * ```
1477
1480
  *
1478
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1481
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
1479
1482
  * @returns {Promise<*>} WebElement of being used Web helper
1480
1483
  *
1481
1484
  *
@@ -1619,7 +1622,7 @@ class Playwright extends Helper {
1619
1622
  * ```js
1620
1623
  * I.seeElement('#modal');
1621
1624
  * ```
1622
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
1625
+ * @param {string | object} locator located by CSS|XPath|strict locator.
1623
1626
  * @returns {void} automatically synchronized promise through #recorder
1624
1627
  *
1625
1628
  *
@@ -1637,7 +1640,7 @@ class Playwright extends Helper {
1637
1640
  * I.dontSeeElement('.modal'); // modal is not shown
1638
1641
  * ```
1639
1642
  *
1640
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1643
+ * @param {string | object} locator located by CSS|XPath|Strict locator.
1641
1644
  * @returns {void} automatically synchronized promise through #recorder
1642
1645
  *
1643
1646
  *
@@ -1655,7 +1658,7 @@ class Playwright extends Helper {
1655
1658
  * ```js
1656
1659
  * I.seeElementInDOM('#modal');
1657
1660
  * ```
1658
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
1661
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
1659
1662
  * @returns {void} automatically synchronized promise through #recorder
1660
1663
  *
1661
1664
  */
@@ -1671,7 +1674,7 @@ class Playwright extends Helper {
1671
1674
  * I.dontSeeElementInDOM('.nav'); // checks that element is not on page visible or not
1672
1675
  * ```
1673
1676
  *
1674
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|Strict locator.
1677
+ * @param {string | object} locator located by CSS|XPath|Strict locator.
1675
1678
  * @returns {void} automatically synchronized promise through #recorder
1676
1679
  *
1677
1680
  */
@@ -1736,14 +1739,14 @@ class Playwright extends Helper {
1736
1739
  * I.click({css: 'nav a.login'});
1737
1740
  * ```
1738
1741
  *
1739
- * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1740
- * @param {?CodeceptJS.LocatorOrString | null} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1742
+ * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1743
+ * @param {?string | object | null} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1741
1744
  * @returns {void} automatically synchronized promise through #recorder
1742
1745
  *
1743
1746
  *
1744
1747
  * @param {any} [options] [Additional options](https://playwright.dev/docs/api/class-page#page-click) for click available as 3rd argument.
1745
1748
  *
1746
- * Examples:
1749
+ * @example
1747
1750
  *
1748
1751
  * ```js
1749
1752
  * // click on element at position
@@ -1793,8 +1796,8 @@ class Playwright extends Helper {
1793
1796
  * I.forceClick({css: 'nav a.login'});
1794
1797
  * ```
1795
1798
  *
1796
- * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1797
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1799
+ * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1800
+ * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1798
1801
  * @returns {void} automatically synchronized promise through #recorder
1799
1802
  *
1800
1803
  */
@@ -1813,12 +1816,10 @@ class Playwright extends Helper {
1813
1816
  * I.doubleClick('.btn.edit');
1814
1817
  * ```
1815
1818
  *
1816
- * @param {CodeceptJS.LocatorOrString} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1817
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1819
+ * @param {string | object} locator clickable link or button located by text, or any element located by CSS|XPath|strict locator.
1820
+ * @param {?string | object} [context=null] (optional, `null` by default) element to search in CSS|XPath|Strict locator.
1818
1821
  * @returns {void} automatically synchronized promise through #recorder
1819
1822
  *
1820
- *
1821
- *
1822
1823
  */
1823
1824
  async doubleClick(locator, context = null) {
1824
1825
  return proceedClick.call(this, locator, context, { clickCount: 2 });
@@ -1836,18 +1837,27 @@ class Playwright extends Helper {
1836
1837
  * I.rightClick('Click me', '.context');
1837
1838
  * ```
1838
1839
  *
1839
- * @param {CodeceptJS.LocatorOrString} locator clickable element located by CSS|XPath|strict locator.
1840
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1840
+ * @param {string | object} locator clickable element located by CSS|XPath|strict locator.
1841
+ * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
1841
1842
  * @returns {void} automatically synchronized promise through #recorder
1842
1843
  *
1843
- *
1844
- *
1845
1844
  */
1846
1845
  async rightClick(locator, context = null) {
1847
1846
  return proceedClick.call(this, locator, context, { button: 'right' });
1848
1847
  }
1849
1848
 
1850
1849
  /**
1850
+ *
1851
+ * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-check) for check available as 3rd argument.
1852
+ *
1853
+ * Examples:
1854
+ *
1855
+ * ```js
1856
+ * // click on element at position
1857
+ * I.checkOption('Agree', '.signup', { position: { x: 5, y: 5 } })
1858
+ * ```
1859
+ * > ⚠️ To avoid flakiness, option `force: true` is set by default
1860
+ *
1851
1861
  * Selects a checkbox or radio button.
1852
1862
  * Element is located by label or name or CSS or XPath.
1853
1863
  *
@@ -1858,20 +1868,11 @@ class Playwright extends Helper {
1858
1868
  * I.checkOption('I Agree to Terms and Conditions');
1859
1869
  * I.checkOption('agree', '//form');
1860
1870
  * ```
1861
- * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1862
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1871
+ * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1872
+ * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1863
1873
  * @returns {void} automatically synchronized promise through #recorder
1864
1874
  *
1865
1875
  *
1866
- * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-check) for check available as 3rd argument.
1867
- *
1868
- * Examples:
1869
- *
1870
- * ```js
1871
- * // click on element at position
1872
- * I.checkOption('Agree', '.signup', { position: { x: 5, y: 5 } })
1873
- * ```
1874
- * > ⚠️ To avoid flakiness, option `force: true` is set by default
1875
1876
  */
1876
1877
  async checkOption(field, context = null, options = { force: true }) {
1877
1878
  const elm = await this._locateCheckable(field, context);
@@ -1880,6 +1881,17 @@ class Playwright extends Helper {
1880
1881
  }
1881
1882
 
1882
1883
  /**
1884
+ *
1885
+ * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-uncheck) for uncheck available as 3rd argument.
1886
+ *
1887
+ * Examples:
1888
+ *
1889
+ * ```js
1890
+ * // click on element at position
1891
+ * I.uncheckOption('Agree', '.signup', { position: { x: 5, y: 5 } })
1892
+ * ```
1893
+ * > ⚠️ To avoid flakiness, option `force: true` is set by default
1894
+ *
1883
1895
  * Unselects a checkbox or radio button.
1884
1896
  * Element is located by label or name or CSS or XPath.
1885
1897
  *
@@ -1890,20 +1902,10 @@ class Playwright extends Helper {
1890
1902
  * I.uncheckOption('I Agree to Terms and Conditions');
1891
1903
  * I.uncheckOption('agree', '//form');
1892
1904
  * ```
1893
- * @param {CodeceptJS.LocatorOrString} field checkbox located by label | name | CSS | XPath | strict locator.
1894
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1905
+ * @param {string | object} field checkbox located by label | name | CSS | XPath | strict locator.
1906
+ * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS | XPath | strict locator.
1895
1907
  * @returns {void} automatically synchronized promise through #recorder
1896
1908
  *
1897
- *
1898
- * [Additional options](https://playwright.dev/docs/api/class-elementhandle#element-handle-uncheck) for uncheck available as 3rd argument.
1899
- *
1900
- * Examples:
1901
- *
1902
- * ```js
1903
- * // click on element at position
1904
- * I.uncheckOption('Agree', '.signup', { position: { x: 5, y: 5 } })
1905
- * ```
1906
- * > ⚠️ To avoid flakiness, option `force: true` is set by default
1907
1909
  */
1908
1910
  async uncheckOption(field, context = null, options = { force: true }) {
1909
1911
  const elm = await this._locateCheckable(field, context);
@@ -1920,7 +1922,7 @@ class Playwright extends Helper {
1920
1922
  * I.seeCheckboxIsChecked({css: '#signup_form input[type=checkbox]'});
1921
1923
  * ```
1922
1924
  *
1923
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1925
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1924
1926
  * @returns {void} automatically synchronized promise through #recorder
1925
1927
  *
1926
1928
  */
@@ -1937,7 +1939,7 @@ class Playwright extends Helper {
1937
1939
  * I.dontSeeCheckboxIsChecked('agree'); // located by name
1938
1940
  * ```
1939
1941
  *
1940
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
1942
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator.
1941
1943
  * @returns {void} automatically synchronized promise through #recorder
1942
1944
  *
1943
1945
  */
@@ -1988,6 +1990,9 @@ class Playwright extends Helper {
1988
1990
  }
1989
1991
 
1990
1992
  /**
1993
+ *
1994
+ * _Note:_ Shortcuts like `'Meta'` + `'A'` do not work on macOS ([GoogleChrome/Puppeteer#1313](https://github.com/GoogleChrome/puppeteer/issues/1313)).
1995
+ *
1991
1996
  * Presses a key in the browser (on a focused element).
1992
1997
  *
1993
1998
  * _Hint:_ For populating text field or textarea, it is recommended to use [`fillField`](#fillfield).
@@ -2049,8 +2054,6 @@ class Playwright extends Helper {
2049
2054
  * @param {string|string[]} key key or array of keys to press.
2050
2055
  * @returns {void} automatically synchronized promise through #recorder
2051
2056
  *
2052
- *
2053
- * _Note:_ Shortcuts like `'Meta'` + `'A'` do not work on macOS ([GoogleChrome/Puppeteer#1313](https://github.com/GoogleChrome/puppeteer/issues/1313)).
2054
2057
  */
2055
2058
  async pressKey(key) {
2056
2059
  const modifiers = [];
@@ -2127,8 +2130,8 @@ class Playwright extends Helper {
2127
2130
  * // or by strict locator
2128
2131
  * I.fillField({css: 'form#login input[name=username]'}, 'John');
2129
2132
  * ```
2130
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
2131
- * @param {CodeceptJS.StringOrSecret} value text value to fill.
2133
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator.
2134
+ * @param {string | object} value text value to fill.
2132
2135
  * @returns {void} automatically synchronized promise through #recorder
2133
2136
  *
2134
2137
  *
@@ -2161,7 +2164,7 @@ class Playwright extends Helper {
2161
2164
  * ```
2162
2165
  * Use `force` to bypass the [actionability](https://playwright.dev/docs/actionability) checks.
2163
2166
  *
2164
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2167
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2165
2168
  * @param {any} [options] [Additional options](https://playwright.dev/docs/api/class-locator#locator-clear) for available options object as 2nd argument.
2166
2169
  */
2167
2170
  async clearField(locator, options = {}) {
@@ -2186,12 +2189,10 @@ class Playwright extends Helper {
2186
2189
  * // typing secret
2187
2190
  * I.appendField('password', secret('123456'));
2188
2191
  * ```
2189
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator
2192
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator
2190
2193
  * @param {string} value text value to append.
2191
2194
  * @returns {void} automatically synchronized promise through #recorder
2192
2195
  *
2193
- *
2194
- *
2195
2196
  */
2196
2197
  async appendField(field, value) {
2197
2198
  const els = await findFields.call(this, field);
@@ -2212,8 +2213,8 @@ class Playwright extends Helper {
2212
2213
  * I.seeInField('form input[type=hidden]','hidden_value');
2213
2214
  * I.seeInField('#searchform input','Search');
2214
2215
  * ```
2215
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
2216
- * @param {CodeceptJS.StringOrSecret} value value to check.
2216
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator.
2217
+ * @param {string | object} value value to check.
2217
2218
  * @returns {void} automatically synchronized promise through #recorder
2218
2219
  *
2219
2220
  */
@@ -2231,8 +2232,8 @@ class Playwright extends Helper {
2231
2232
  * I.dontSeeInField({ css: 'form input.email' }, 'user@user.com'); // field by CSS
2232
2233
  * ```
2233
2234
  *
2234
- * @param {CodeceptJS.LocatorOrString} field located by label|name|CSS|XPath|strict locator.
2235
- * @param {CodeceptJS.StringOrSecret} value value to check.
2235
+ * @param {string | object} field located by label|name|CSS|XPath|strict locator.
2236
+ * @param {string | object} value value to check.
2236
2237
  * @returns {void} automatically synchronized promise through #recorder
2237
2238
  *
2238
2239
  */
@@ -2251,7 +2252,7 @@ class Playwright extends Helper {
2251
2252
  * I.attachFile('form input[name=avatar]', 'data/avatar.jpg');
2252
2253
  * ```
2253
2254
  *
2254
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2255
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2255
2256
  * @param {string} pathToFile local file path relative to codecept.conf.ts or codecept.conf.js config file.
2256
2257
  * @returns {void} automatically synchronized promise through #recorder
2257
2258
  *
@@ -2288,7 +2289,7 @@ class Playwright extends Helper {
2288
2289
  * ```js
2289
2290
  * I.selectOption('Which OS do you use?', ['Android', 'iOS']);
2290
2291
  * ```
2291
- * @param {LocatorOrString} select field located by label|name|CSS|XPath|strict locator.
2292
+ * @param {string | object} select field located by label|name|CSS|XPath|strict locator.
2292
2293
  * @param {string|Array<*>} option visible text or value of option.
2293
2294
  * @returns {void} automatically synchronized promise through #recorder
2294
2295
  *
@@ -2321,7 +2322,7 @@ class Playwright extends Helper {
2321
2322
  * let numOfElements = await I.grabNumberOfVisibleElements('p');
2322
2323
  * ```
2323
2324
  *
2324
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2325
+ * @param {string | object} locator located by CSS|XPath|strict locator.
2325
2326
  * @returns {Promise<number>} number of visible elements
2326
2327
  *
2327
2328
  */
@@ -2402,7 +2403,7 @@ class Playwright extends Helper {
2402
2403
  * I.see('Register', {css: 'form.register'}); // use strict locator
2403
2404
  * ```
2404
2405
  * @param {string} text expected on page.
2405
- * @param {?CodeceptJS.LocatorOrString} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
2406
+ * @param {?string | object} [context=null] (optional, `null` by default) element located by CSS|Xpath|strict locator in which to search for text.
2406
2407
  * @returns {void} automatically synchronized promise through #recorder
2407
2408
  *
2408
2409
  *
@@ -2420,7 +2421,7 @@ class Playwright extends Helper {
2420
2421
  * ```
2421
2422
  *
2422
2423
  * @param {string} text element value to check.
2423
- * @param {CodeceptJS.LocatorOrString?} [context=null] element located by CSS|XPath|strict locator.
2424
+ * @param {(string | object)?} [context=null] element located by CSS|XPath|strict locator.
2424
2425
  * @returns {void} automatically synchronized promise through #recorder
2425
2426
  *
2426
2427
  */
@@ -2438,7 +2439,7 @@ class Playwright extends Helper {
2438
2439
  * ```
2439
2440
  *
2440
2441
  * @param {string} text which is not present.
2441
- * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
2442
+ * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator in which to perfrom search.
2442
2443
  * @returns {void} automatically synchronized promise through #recorder
2443
2444
  *
2444
2445
  *
@@ -2534,7 +2535,7 @@ class Playwright extends Helper {
2534
2535
  * I.seeNumberOfElements('#submitBtn', 1);
2535
2536
  * ```
2536
2537
  *
2537
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2538
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2538
2539
  * @param {number} num number of elements.
2539
2540
  * @returns {void} automatically synchronized promise through #recorder
2540
2541
  *
@@ -2554,7 +2555,7 @@ class Playwright extends Helper {
2554
2555
  * I.seeNumberOfVisibleElements('.buttons', 3);
2555
2556
  * ```
2556
2557
  *
2557
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2558
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2558
2559
  * @param {number} num number of elements.
2559
2560
  * @returns {void} automatically synchronized promise through #recorder
2560
2561
  *
@@ -2626,6 +2627,8 @@ class Playwright extends Helper {
2626
2627
  }
2627
2628
 
2628
2629
  /**
2630
+ * Returns cookie in JSON format. If name not passed returns all cookies for this domain.
2631
+ *
2629
2632
  * Gets a cookie object by name.
2630
2633
  * If none provided gets all cookies.
2631
2634
  * Resumes test execution, so **should be used inside async function with `await`** operator.
@@ -2638,8 +2641,6 @@ class Playwright extends Helper {
2638
2641
  * @param {?string} [name=null] cookie name.
2639
2642
  * @returns {any} attribute value
2640
2643
  *
2641
- *
2642
- * Returns cookie in JSON format. If name not passed returns all cookies for this domain.
2643
2644
  */
2644
2645
  async grabCookie(name) {
2645
2646
  const cookies = await this.browserContext.cookies();
@@ -2679,8 +2680,8 @@ class Playwright extends Helper {
2679
2680
  * ```js
2680
2681
  * I.executeScript(({x, y}) => x + y, {x, y});
2681
2682
  * ```
2682
- * You can pass only one parameter into a function
2683
- * but you can pass in array or object.
2683
+ * You can pass only one parameter into a function,
2684
+ * or you can pass in array or object.
2684
2685
  *
2685
2686
  * ```js
2686
2687
  * I.executeScript(([x, y]) => x + y, [x, y]);
@@ -2724,7 +2725,7 @@ class Playwright extends Helper {
2724
2725
  * ```
2725
2726
  * If multiple elements found returns first element.
2726
2727
  *
2727
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2728
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2728
2729
  * @returns {Promise<string>} attribute value
2729
2730
  *
2730
2731
  *
@@ -2745,7 +2746,7 @@ class Playwright extends Helper {
2745
2746
  * let pins = await I.grabTextFromAll('#pin li');
2746
2747
  * ```
2747
2748
  *
2748
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2749
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2749
2750
  * @returns {Promise<string[]>} attribute value
2750
2751
  *
2751
2752
  *
@@ -2768,7 +2769,7 @@ class Playwright extends Helper {
2768
2769
  * ```js
2769
2770
  * let email = await I.grabValueFrom('input[name=email]');
2770
2771
  * ```
2771
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2772
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2772
2773
  * @returns {Promise<string>} attribute value
2773
2774
  *
2774
2775
  */
@@ -2786,7 +2787,7 @@ class Playwright extends Helper {
2786
2787
  * ```js
2787
2788
  * let inputs = await I.grabValueFromAll('//form/input');
2788
2789
  * ```
2789
- * @param {CodeceptJS.LocatorOrString} locator field located by label|name|CSS|XPath|strict locator.
2790
+ * @param {string | object} locator field located by label|name|CSS|XPath|strict locator.
2790
2791
  * @returns {Promise<string[]>} attribute value
2791
2792
  *
2792
2793
  */
@@ -2805,7 +2806,7 @@ class Playwright extends Helper {
2805
2806
  * let postHTML = await I.grabHTMLFrom('#post');
2806
2807
  * ```
2807
2808
  *
2808
- * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
2809
+ * @param {string | object} element located by CSS|XPath|strict locator.
2809
2810
  * @returns {Promise<string>} HTML code for an element
2810
2811
  *
2811
2812
  */
@@ -2824,7 +2825,7 @@ class Playwright extends Helper {
2824
2825
  * let postHTMLs = await I.grabHTMLFromAll('.post');
2825
2826
  * ```
2826
2827
  *
2827
- * @param {CodeceptJS.LocatorOrString} element located by CSS|XPath|strict locator.
2828
+ * @param {string | object} element located by CSS|XPath|strict locator.
2828
2829
  * @returns {Promise<string[]>} HTML code for an element
2829
2830
  *
2830
2831
  */
@@ -2843,7 +2844,7 @@ class Playwright extends Helper {
2843
2844
  * const value = await I.grabCssPropertyFrom('h3', 'font-weight');
2844
2845
  * ```
2845
2846
  *
2846
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2847
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2847
2848
  * @param {string} cssProperty CSS property name.
2848
2849
  * @returns {Promise<string>} CSS value
2849
2850
  *
@@ -2864,7 +2865,7 @@ class Playwright extends Helper {
2864
2865
  * const values = await I.grabCssPropertyFromAll('h3', 'font-weight');
2865
2866
  * ```
2866
2867
  *
2867
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
2868
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
2868
2869
  * @param {string} cssProperty CSS property name.
2869
2870
  * @returns {Promise<string[]>} CSS value
2870
2871
  *
@@ -2885,7 +2886,7 @@ class Playwright extends Helper {
2885
2886
  * I.seeCssPropertiesOnElements('h3', { 'font-weight': "bold"});
2886
2887
  * ```
2887
2888
  *
2888
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2889
+ * @param {string | object} locator located by CSS|XPath|strict locator.
2889
2890
  * @param {object} cssProperties object with CSS properties and their values to check.
2890
2891
  * @returns {void} automatically synchronized promise through #recorder
2891
2892
  *
@@ -2930,7 +2931,7 @@ class Playwright extends Helper {
2930
2931
  * I.seeAttributesOnElements('//form', { method: "post"});
2931
2932
  * ```
2932
2933
  *
2933
- * @param {CodeceptJS.LocatorOrString} locator located by CSS|XPath|strict locator.
2934
+ * @param {string | object} locator located by CSS|XPath|strict locator.
2934
2935
  * @param {object} attributes attributes and their values to check.
2935
2936
  * @returns {void} automatically synchronized promise through #recorder
2936
2937
  *
@@ -2954,7 +2955,8 @@ class Playwright extends Helper {
2954
2955
  let chunked = chunkArray(attrs, values.length);
2955
2956
  chunked = chunked.filter((val) => {
2956
2957
  for (let i = 0; i < val.length; ++i) {
2957
- if (!val[i].includes(values[i])) return false;
2958
+ // if the attribute doesn't exist, returns false as well
2959
+ if (!val[i] || !val[i].includes(values[i])) return false;
2958
2960
  }
2959
2961
  return true;
2960
2962
  });
@@ -2970,7 +2972,7 @@ class Playwright extends Helper {
2970
2972
  * I.dragSlider('#slider', -70);
2971
2973
  * ```
2972
2974
  *
2973
- * @param {CodeceptJS.LocatorOrString} locator located by label|name|CSS|XPath|strict locator.
2975
+ * @param {string | object} locator located by label|name|CSS|XPath|strict locator.
2974
2976
  * @param {number} offsetX position to drag.
2975
2977
  * @returns {void} automatically synchronized promise through #recorder
2976
2978
  *
@@ -3002,7 +3004,7 @@ class Playwright extends Helper {
3002
3004
  * ```js
3003
3005
  * let hint = await I.grabAttributeFrom('#tooltip', 'title');
3004
3006
  * ```
3005
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3007
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3006
3008
  * @param {string} attr attribute name.
3007
3009
  * @returns {Promise<string>} attribute value
3008
3010
  *
@@ -3022,7 +3024,7 @@ class Playwright extends Helper {
3022
3024
  * ```js
3023
3025
  * let hints = await I.grabAttributeFromAll('.tooltip', 'title');
3024
3026
  * ```
3025
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3027
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3026
3028
  * @param {string} attr attribute name.
3027
3029
  * @returns {Promise<string[]>} attribute value
3028
3030
  *
@@ -3048,7 +3050,7 @@ class Playwright extends Helper {
3048
3050
  * I.saveElementScreenshot(`#submit`,'debug.png');
3049
3051
  * ```
3050
3052
  *
3051
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3053
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3052
3054
  * @param {string} fileName file name to save.
3053
3055
  * @returns {void} automatically synchronized promise through #recorder
3054
3056
  *
@@ -3235,7 +3237,7 @@ class Playwright extends Helper {
3235
3237
  * Waits for element to become enabled (by default waits for 1sec).
3236
3238
  * Element can be located by CSS or XPath.
3237
3239
  *
3238
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3240
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3239
3241
  * @param {number} [sec=1] (optional) time in seconds to wait, 1 by default.
3240
3242
  * @returns {void} automatically synchronized promise through #recorder
3241
3243
  *
@@ -3270,7 +3272,7 @@ class Playwright extends Helper {
3270
3272
  * I.waitForValue('//input', "GoodValue");
3271
3273
  * ```
3272
3274
  *
3273
- * @param {LocatorOrString} field input field.
3275
+ * @param {string | object} field input field.
3274
3276
  * @param {string }value expected value.
3275
3277
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3276
3278
  * @returns {void} automatically synchronized promise through #recorder
@@ -3307,7 +3309,7 @@ class Playwright extends Helper {
3307
3309
  * I.waitNumberOfVisibleElements('a', 3);
3308
3310
  * ```
3309
3311
  *
3310
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3312
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3311
3313
  * @param {number} num number of elements.
3312
3314
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3313
3315
  * @returns {void} automatically synchronized promise through #recorder
@@ -3350,7 +3352,7 @@ class Playwright extends Helper {
3350
3352
  * I.waitForClickable('.btn.continue', 5); // wait for 5 secs
3351
3353
  * ```
3352
3354
  *
3353
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3355
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3354
3356
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
3355
3357
  * @returns {void} automatically synchronized promise through #recorder
3356
3358
  *
@@ -3369,7 +3371,7 @@ class Playwright extends Helper {
3369
3371
  * I.waitForElement('.btn.continue', 5); // wait for 5 secs
3370
3372
  * ```
3371
3373
  *
3372
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3374
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3373
3375
  * @param {number} [sec] (optional, `1` by default) time in seconds to wait
3374
3376
  * @returns {void} automatically synchronized promise through #recorder
3375
3377
  *
@@ -3388,6 +3390,8 @@ class Playwright extends Helper {
3388
3390
  }
3389
3391
 
3390
3392
  /**
3393
+ * This method accepts [React selectors](https://codecept.io/react).
3394
+ *
3391
3395
  * Waits for an element to become visible on a page (by default waits for 1sec).
3392
3396
  * Element can be located by CSS or XPath.
3393
3397
  *
@@ -3395,12 +3399,10 @@ class Playwright extends Helper {
3395
3399
  * I.waitForVisible('#popup');
3396
3400
  * ```
3397
3401
  *
3398
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3402
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3399
3403
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3400
3404
  * @returns {void} automatically synchronized promise through #recorder
3401
3405
  *
3402
- *
3403
- * This method accepts [React selectors](https://codecept.io/react).
3404
3406
  */
3405
3407
  async waitForVisible(locator, sec) {
3406
3408
  const waitTimeout = sec ? sec * 1000 : this.options.waitForTimeout;
@@ -3436,7 +3438,7 @@ class Playwright extends Helper {
3436
3438
  * I.waitForInvisible('#popup');
3437
3439
  * ```
3438
3440
  *
3439
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3441
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3440
3442
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3441
3443
  * @returns {void} automatically synchronized promise through #recorder
3442
3444
  *
@@ -3476,7 +3478,7 @@ class Playwright extends Helper {
3476
3478
  * I.waitToHide('#popup');
3477
3479
  * ```
3478
3480
  *
3479
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3481
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3480
3482
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3481
3483
  * @returns {void} automatically synchronized promise through #recorder
3482
3484
  *
@@ -3587,7 +3589,7 @@ class Playwright extends Helper {
3587
3589
  *
3588
3590
  * @param {string }text to wait for.
3589
3591
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3590
- * @param {CodeceptJS.LocatorOrString} [context] (optional) element located by CSS|XPath|strict locator.
3592
+ * @param {string | object} [context] (optional) element located by CSS|XPath|strict locator.
3591
3593
  * @returns {void} automatically synchronized promise through #recorder
3592
3594
  *
3593
3595
  */
@@ -3672,7 +3674,7 @@ class Playwright extends Helper {
3672
3674
  * I.switchTo(); // switch back to main page
3673
3675
  * ```
3674
3676
  *
3675
- * @param {?CodeceptJS.LocatorOrString} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3677
+ * @param {?string | object} [locator=null] (optional, `null` by default) element located by CSS|XPath|strict locator.
3676
3678
  * @returns {void} automatically synchronized promise through #recorder
3677
3679
  *
3678
3680
  */
@@ -3812,7 +3814,7 @@ class Playwright extends Helper {
3812
3814
  * I.waitForDetached('#popup');
3813
3815
  * ```
3814
3816
  *
3815
- * @param {CodeceptJS.LocatorOrString} locator element located by CSS|XPath|strict locator.
3817
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3816
3818
  * @param {number} [sec=1] (optional, `1` by default) time in seconds to wait
3817
3819
  * @returns {void} automatically synchronized promise through #recorder
3818
3820
  *
@@ -3890,7 +3892,7 @@ class Playwright extends Helper {
3890
3892
  * const width = await I.grabElementBoundingRect('h3', 'width');
3891
3893
  * // width == 527
3892
3894
  * ```
3893
- * @param {LocatorOrString} locator element located by CSS|XPath|strict locator.
3895
+ * @param {string | object} locator element located by CSS|XPath|strict locator.
3894
3896
  * @param {string=} elementSize x, y, width or height of the given element.
3895
3897
  * @returns {Promise<DOMRect>|Promise<number>} Element bounding rectangle
3896
3898
  *
@@ -4293,7 +4295,7 @@ class Playwright extends Helper {
4293
4295
  /**
4294
4296
  * Returns all URLs of all network requests recorded so far during execution of test scenario.
4295
4297
  *
4296
- * @return {string} List of URLs recorded as a string, seperaeted by new lines after each URL
4298
+ * @return {string} List of URLs recorded as a string, separated by new lines after each URL
4297
4299
  * @private
4298
4300
  */
4299
4301
  _getTrafficDump() {
@@ -4475,6 +4477,7 @@ function buildLocatorString(locator) {
4475
4477
 
4476
4478
  async function findElements(matcher, locator) {
4477
4479
  if (locator.react) return findReact(matcher, locator);
4480
+ if (locator.vue) return findVue(matcher, locator);
4478
4481
  locator = new Locator(locator, 'css');
4479
4482
 
4480
4483
  return matcher.locator(buildLocatorString(locator)).all();
@@ -4536,6 +4539,7 @@ async function proceedClick(locator, context = null, options = {}) {
4536
4539
 
4537
4540
  async function findClickable(matcher, locator) {
4538
4541
  if (locator.react) return findReact(matcher, locator);
4542
+ if (locator.vue) return findVue(matcher, locator);
4539
4543
 
4540
4544
  locator = new Locator(locator);
4541
4545
  if (!locator.isFuzzy()) return findElements.call(this, matcher, locator);