promod 2.5.3 → 3.0.0

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 (88) hide show
  1. package/built/cjs/config.d.ts +43 -0
  2. package/built/cjs/config.js +161 -0
  3. package/built/cjs/config.js.map +1 -0
  4. package/built/cjs/helpers/execute.script.d.ts +1 -1
  5. package/built/cjs/helpers/execute.script.js +1 -3
  6. package/built/cjs/helpers/execute.script.js.map +1 -1
  7. package/built/cjs/index.d.ts +3 -1
  8. package/built/cjs/index.js +4 -1
  9. package/built/cjs/index.js.map +1 -1
  10. package/built/cjs/interface.d.ts +8 -4
  11. package/built/cjs/mappers.d.ts +1 -1
  12. package/built/cjs/mappers.js.map +1 -1
  13. package/built/cjs/pw/index.d.ts +2 -2
  14. package/built/cjs/pw/pw_client.d.ts +11 -10
  15. package/built/cjs/pw/pw_client.js +37 -56
  16. package/built/cjs/pw/pw_client.js.map +1 -1
  17. package/built/cjs/pw/pw_element.d.ts +17 -16
  18. package/built/cjs/pw/pw_element.js +19 -46
  19. package/built/cjs/pw/pw_element.js.map +1 -1
  20. package/built/cjs/shared/custom_selector_filter.d.ts +19 -0
  21. package/built/cjs/shared/custom_selector_filter.js +40 -0
  22. package/built/cjs/shared/custom_selector_filter.js.map +1 -0
  23. package/built/cjs/shared/validate_browser.d.ts +7 -0
  24. package/built/cjs/shared/validate_browser.js +29 -0
  25. package/built/cjs/shared/validate_browser.js.map +1 -0
  26. package/built/cjs/swd/swd_alignment.d.ts +1 -1
  27. package/built/cjs/swd/swd_alignment.js +2 -28
  28. package/built/cjs/swd/swd_alignment.js.map +1 -1
  29. package/built/cjs/swd/swd_client.d.ts +13 -10
  30. package/built/cjs/swd/swd_client.js +95 -31
  31. package/built/cjs/swd/swd_client.js.map +1 -1
  32. package/built/cjs/swd/swd_element.d.ts +14 -13
  33. package/built/cjs/swd/swd_element.js +13 -12
  34. package/built/cjs/swd/swd_element.js.map +1 -1
  35. package/built/esm/config.d.ts +43 -0
  36. package/built/esm/config.js +158 -0
  37. package/built/esm/config.js.map +1 -0
  38. package/built/esm/helpers/execute.script.d.ts +1 -1
  39. package/built/esm/helpers/execute.script.js +5 -9
  40. package/built/esm/helpers/execute.script.js.map +1 -1
  41. package/built/esm/index.d.ts +3 -1
  42. package/built/esm/index.js +4 -7
  43. package/built/esm/index.js.map +1 -1
  44. package/built/esm/interface.d.ts +8 -4
  45. package/built/esm/interface.js +1 -2
  46. package/built/esm/internals/index.js +1 -5
  47. package/built/esm/internals/index.js.map +1 -1
  48. package/built/esm/internals/logger.js +3 -6
  49. package/built/esm/internals/logger.js.map +1 -1
  50. package/built/esm/mappers.d.ts +1 -1
  51. package/built/esm/mappers.js +1 -7
  52. package/built/esm/mappers.js.map +1 -1
  53. package/built/esm/pw/index.d.ts +2 -2
  54. package/built/esm/pw/index.js +7 -10
  55. package/built/esm/pw/index.js.map +1 -1
  56. package/built/esm/pw/pw_client.d.ts +11 -10
  57. package/built/esm/pw/pw_client.js +93 -116
  58. package/built/esm/pw/pw_client.js.map +1 -1
  59. package/built/esm/pw/pw_element.d.ts +17 -16
  60. package/built/esm/pw/pw_element.js +84 -118
  61. package/built/esm/pw/pw_element.js.map +1 -1
  62. package/built/esm/shared/custom_selector_filter.d.ts +19 -0
  63. package/built/esm/shared/custom_selector_filter.js +38 -0
  64. package/built/esm/shared/custom_selector_filter.js.map +1 -0
  65. package/built/esm/shared/validate_browser.d.ts +7 -0
  66. package/built/esm/shared/validate_browser.js +27 -0
  67. package/built/esm/shared/validate_browser.js.map +1 -0
  68. package/built/esm/swd/index.js +7 -10
  69. package/built/esm/swd/index.js.map +1 -1
  70. package/built/esm/swd/swd_alignment.d.ts +1 -1
  71. package/built/esm/swd/swd_alignment.js +13 -42
  72. package/built/esm/swd/swd_alignment.js.map +1 -1
  73. package/built/esm/swd/swd_client.d.ts +13 -10
  74. package/built/esm/swd/swd_client.js +171 -111
  75. package/built/esm/swd/swd_client.js.map +1 -1
  76. package/built/esm/swd/swd_element.d.ts +14 -13
  77. package/built/esm/swd/swd_element.js +90 -97
  78. package/built/esm/swd/swd_element.js.map +1 -1
  79. package/docs/client.md +335 -111
  80. package/docs/config.md +176 -0
  81. package/docs/element.md +214 -141
  82. package/docs/elements.md +125 -65
  83. package/docs/init.md +66 -12
  84. package/oxlintrc.json +20 -0
  85. package/package.json +15 -18
  86. package/readme.md +114 -14
  87. package/tsconfig.esm.json +6 -2
  88. package/tsconfig.json +4 -1
@@ -1,6 +1,7 @@
1
+ import type { Browser } from './pw_client';
1
2
  import type { PromodElementType, PromodElementsType } from '../interface';
2
3
  import type { TCustomSelector } from '../mappers';
3
- import type { Locator } from 'playwright-core';
4
+ import type { Locator, ElementHandle } from 'playwright-core';
4
5
  declare class PromodPlaywrightElements {
5
6
  private _driver;
6
7
  private _driverElements;
@@ -9,8 +10,8 @@ declare class PromodPlaywrightElements {
9
10
  private useParent;
10
11
  private selector;
11
12
  parentSelector: string;
12
- _browserInterface: any;
13
- constructor(selector: any, client: any, getParent?: any, getExecuteScriptArgs?: any, useParent?: any);
13
+ _browserInterface: Browser;
14
+ constructor(selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, client: Browser, getParent?: (...args: unknown[]) => Promise<unknown>, getExecuteScriptArgs?: () => unknown[], useParent?: boolean);
14
15
  /**
15
16
  * @private
16
17
  *
@@ -28,7 +29,7 @@ declare class PromodPlaywrightElements {
28
29
  * @param {number} index
29
30
  * @returns {PromodElementType}
30
31
  */
31
- get(index: any): PromodElementType;
32
+ get(index: number): PromodElementType;
32
33
  /**
33
34
  * @example
34
35
  *
@@ -68,7 +69,7 @@ declare class PromodPlaywrightElements {
68
69
  *
69
70
  * @returns {Promise<ElementHandle[]>}
70
71
  */
71
- getEngineElements(): Promise<Locator[]>;
72
+ getEngineElements(): Promise<(Locator | ElementHandle<Node>)[]>;
72
73
  /**
73
74
  * @example
74
75
  *
@@ -131,8 +132,8 @@ declare class PromodPlaywrightElement {
131
132
  private useParent;
132
133
  selector: string;
133
134
  parentSelector: string;
134
- _browserInterface: any;
135
- constructor(selector: any, client: any, getParent?: any, getExecuteScriptArgs?: any, useParent?: any);
135
+ _browserInterface: Browser;
136
+ constructor(selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, client: Browser, getParent?: (...args: unknown[]) => Promise<unknown>, getExecuteScriptArgs?: () => unknown[], useParent?: boolean);
136
137
  /**
137
138
  * @private
138
139
  * @returns {Promise<ElementHandle<Node>>}
@@ -146,7 +147,7 @@ declare class PromodPlaywrightElement {
146
147
  * @param {any[]} rest
147
148
  * @returns {PromodElementType}
148
149
  */
149
- $(selector: any, ...rest: any[]): PromodElementType;
150
+ $(selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, ...rest: unknown[]): PromodElementType;
150
151
  /**
151
152
  * @example
152
153
  * const buttons = $$('button');
@@ -155,7 +156,7 @@ declare class PromodPlaywrightElement {
155
156
  * @param {any[]} rest
156
157
  * @returns {PromodElementsType}
157
158
  */
158
- $$(selector: any, ...rest: any[]): PromodElementsType;
159
+ $$(selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, ...rest: unknown[]): PromodElementsType;
159
160
  /**
160
161
  * @example
161
162
  * const button = $('button');
@@ -232,7 +233,7 @@ declare class PromodPlaywrightElement {
232
233
  * @returns {Promise<string>}
233
234
  */
234
235
  getTagName(): Promise<string>;
235
- getCssValue(): Promise<void>;
236
+ getCssValue(cssStyleProperty: string): Promise<string>;
236
237
  getAttribute(attribute: string): Promise<string>;
237
238
  getRect(): Promise<{
238
239
  x: number;
@@ -364,11 +365,11 @@ declare class PromodPlaywrightElement {
364
365
  };
365
366
  private isInteractionIntercepted;
366
367
  }
367
- declare const $: (selector: string | TCustomSelector | ((...args: any[]) => any) | Promise<any>, root?: PromodElementType | any, ...rest: any[]) => PromodElementType;
368
- declare const $$: (selector: string | TCustomSelector | ((...args: any[]) => any) | Promise<any>, root?: PromodElementType | any, ...rest: any[]) => PromodElementsType;
369
- declare function preBindBrowserInstance(browserThaNeedsToBeBinded: any): {
370
- $: (selector: string | TCustomSelector | ((...args: any[]) => any) | Promise<any>, root?: PromodElementType | any, ...rest: any[]) => PromodElementType;
371
- $$: (selector: string | TCustomSelector | ((...args: any[]) => any) | Promise<any>, root?: PromodElementType | any, ...rest: any[]) => PromodElementsType;
372
- browser: any;
368
+ declare const $: (selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, root?: PromodElementType, ...rest: unknown[]) => PromodElementType;
369
+ declare const $$: (selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, root?: PromodElementType, ...rest: unknown[]) => PromodElementsType;
370
+ declare function preBindBrowserInstance(browserThaNeedsToBeBinded: Browser): {
371
+ $: (selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, root?: PromodElementType, ...rest: unknown[]) => PromodElementType;
372
+ $$: (selector: string | TCustomSelector | ((...args: unknown[]) => unknown) | Promise<unknown>, root?: PromodElementType, ...rest: unknown[]) => PromodElementsType;
373
+ browser: Browser;
373
374
  };
374
375
  export { $, $$, PromodPlaywrightElement, PromodPlaywrightElements, preBindBrowserInstance };
@@ -1,15 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PromodPlaywrightElements = exports.PromodPlaywrightElement = exports.$$ = exports.$ = void 0;
4
- exports.preBindBrowserInstance = preBindBrowserInstance;
5
1
  /* eslint-disable max-len */
6
- const sat_utils_1 = require("sat-utils");
7
- const pw_client_1 = require("./pw_client");
8
- const mappers_1 = require("../mappers");
9
- const internals_1 = require("../internals");
2
+ import { getType, isUndefined, isObject, toArray, isString, isNumber, isFunction, isAsyncFunction, isPromise, lengthToIndexesArray, getRandomString, } from 'sat-utils';
3
+ import { browser } from './pw_client';
4
+ import { getPositionXY, KeysSWD } from '../mappers';
5
+ import { promodLogger } from '../internals';
6
+ import { customSelectorFilterFn } from '../shared/custom_selector_filter';
10
7
  const buildBy = (selector, getExecuteScriptArgs, parent, toMany) => {
11
- getExecuteScriptArgs = (0, sat_utils_1.isFunction)(getExecuteScriptArgs) ? getExecuteScriptArgs : () => [];
12
- if ((0, sat_utils_1.isString)(selector) && selector.includes('xpath=')) {
8
+ getExecuteScriptArgs = isFunction(getExecuteScriptArgs) ? getExecuteScriptArgs : () => [];
9
+ if (isString(selector) && selector.includes('xpath=')) {
13
10
  const sel = selector;
14
11
  if (sel.startsWith('xpath=//')) {
15
12
  return sel.replace('xpath=', '');
@@ -21,43 +18,16 @@ const buildBy = (selector, getExecuteScriptArgs, parent, toMany) => {
21
18
  return sel.replace('xpath=.', '').replace(/\|\./gi, '|');
22
19
  }
23
20
  }
24
- else if ((0, sat_utils_1.isPromise)(selector)) {
21
+ else if (isPromise(selector)) {
25
22
  return selector;
26
23
  }
27
- else if ((0, sat_utils_1.isFunction)(selector) || (0, sat_utils_1.isAsyncFunction)(selector)) {
24
+ else if (isFunction(selector) || isAsyncFunction(selector)) {
28
25
  return [selector, ...getExecuteScriptArgs()];
29
26
  }
30
- else if ((0, sat_utils_1.isObject)(selector)) {
27
+ else if (isObject(selector)) {
31
28
  const item = selector;
32
29
  return [
33
- ([parent, entry]) => {
34
- const { query, text, rg, strict, toMany, rgFlags = 'gmi' } = entry;
35
- const elements = parent ? parent.querySelectorAll(query) : document.querySelectorAll(query);
36
- if (!elements.length)
37
- return null;
38
- const filteredElements = [];
39
- for (const element of elements) {
40
- const innerText = element?.innerText?.trim() || element?.textContent?.trim() || element?.outerHTML?.trim();
41
- const textMatches = typeof text === 'string' && (!strict ? innerText.includes(text) : innerText === text);
42
- const rgMatches = rg && innerText.match(new RegExp(rg, rgFlags));
43
- if (rgMatches && !toMany) {
44
- return element;
45
- }
46
- else if (textMatches && !toMany) {
47
- return element;
48
- }
49
- else if (rgMatches && toMany) {
50
- filteredElements.push(element);
51
- }
52
- else if (textMatches && toMany) {
53
- filteredElements.push(element);
54
- }
55
- if (!text && !rg) {
56
- return element;
57
- }
58
- }
59
- return toMany ? filteredElements : null;
60
- },
30
+ customSelectorFilterFn,
61
31
  [parent, { ...item, toMany }],
62
32
  ];
63
33
  }
@@ -87,9 +57,9 @@ class PromodPlaywrightElements {
87
57
  * @returns {Promise<ElementHandle>}
88
58
  */
89
59
  async getElement(index) {
90
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "getElement" from wrapped API, args: `, index);
91
- this._driver = await pw_client_1.browser['getWorkingContext']();
92
- const ignoreParent = (0, sat_utils_1.isString)(this.selector) && this.selector.startsWith('ignore-parent=');
60
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "getElement" from wrapped API, args: `, index);
61
+ this._driver = await browser['getWorkingContext']();
62
+ const ignoreParent = isString(this.selector) && this.selector.startsWith('ignore-parent=');
93
63
  const selector = ignoreParent ? this.selector.replace('ignore-parent=', '') : this.selector;
94
64
  const shouldUserDocumentRoot = selector.toString().startsWith('xpath=//') || ignoreParent;
95
65
  let parent;
@@ -114,31 +84,29 @@ class PromodPlaywrightElements {
114
84
  return this._driverElements[index];
115
85
  }
116
86
  const getElementArgs = buildBy(selector, this.getExecuteScriptArgs);
117
- if ((0, sat_utils_1.isString)(selector)) {
87
+ if (isString(selector)) {
118
88
  const items = await (parent || this._driver).locator(getElementArgs);
119
89
  this._driverElements = await items.all();
120
90
  }
121
- else if ((0, sat_utils_1.isFunction)(getElementArgs[0]) || (0, sat_utils_1.isAsyncFunction)(getElementArgs[0])) {
91
+ else if (isFunction(getElementArgs[0]) || isAsyncFunction(getElementArgs[0])) {
122
92
  const [queryFn, quertFnArgs] = buildBy(selector, this.getExecuteScriptArgs, parent, true);
123
93
  const elementHandles = [];
124
94
  const resolved = [];
125
- const callArgs = (0, sat_utils_1.toArray)(quertFnArgs);
95
+ const callArgs = toArray(quertFnArgs);
126
96
  for (const item of callArgs) {
127
97
  // TODO refactor resolver
128
98
  const resolvedItem = await item;
129
- resolved.push(resolvedItem?.elementHandle ? await resolvedItem.elementHandle() : resolvedItem);
99
+ resolved.push(resolvedItem?.evaluate ? await resolvedItem.evaluateHandle((node) => node) : resolvedItem);
130
100
  }
131
- // @ts-ignore
132
101
  const handlesByFunctionSearch = await this._driver.evaluateHandle(queryFn, resolved.length === 1 ? resolved[0] : resolved);
133
- // @ts-ignore
134
102
  const availableHandlesLength = await this._driver.evaluate((nodes) => nodes.length, handlesByFunctionSearch);
135
- for (const index of (0, sat_utils_1.lengthToIndexesArray)(availableHandlesLength)) {
136
- const handle = await this._driver.evaluateHandle(
137
- // @ts-ignore
138
- ([nodes, itemIndex]) => nodes[itemIndex], [handlesByFunctionSearch, index]);
139
- elementHandles.push(await handle.asElement());
103
+ for (const index of lengthToIndexesArray(availableHandlesLength)) {
104
+ const handle = await this._driver.evaluateHandle(([nodes, itemIndex]) => nodes[itemIndex], [handlesByFunctionSearch, index]);
105
+ const element = handle.asElement();
106
+ if (element)
107
+ elementHandles.push(element);
140
108
  }
141
- this._driverElements = elementHandles.filter(Boolean);
109
+ this._driverElements = elementHandles;
142
110
  }
143
111
  else {
144
112
  this._driverElements = await this._driver.locator(buildBy(this.selector, this.getExecuteScriptArgs)).all();
@@ -174,7 +142,7 @@ class PromodPlaywrightElements {
174
142
  * @returns {PromodElementType}
175
143
  */
176
144
  last() {
177
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "last" from wrapped API`);
145
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "last" from wrapped API`);
178
146
  return this.get(-1);
179
147
  }
180
148
  /**
@@ -190,17 +158,18 @@ class PromodPlaywrightElements {
190
158
  return new PromodPlaywrightElement(this.selector, this._browserInterface, this.find.bind(this, (el) => el.isDisplayed()), null, true);
191
159
  }
192
160
  getAllVisible() {
161
+ const self = this;
193
162
  const _getElements = async function _getElements() {
194
- await this.getElement(0);
163
+ await self.getElement(0);
195
164
  const els = [];
196
- for (let i = 0; i < this._driverElements.length; i++) {
197
- const el = this._driverElements[i];
165
+ for (let i = 0; i < self._driverElements.length; i++) {
166
+ const el = self._driverElements[i];
198
167
  if (await el.isVisible()) {
199
168
  els.push(el);
200
169
  }
201
170
  }
202
171
  return els;
203
- }.bind(this);
172
+ };
204
173
  const promodElements = new PromodPlaywrightElements(this.selector, this._browserInterface, _getElements, null, true);
205
174
  return promodElements;
206
175
  }
@@ -214,7 +183,7 @@ class PromodPlaywrightElements {
214
183
  * @returns {PromodElementType}
215
184
  */
216
185
  first() {
217
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "first" from wrapped API`);
186
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "first" from wrapped API`);
218
187
  return this.get(0);
219
188
  }
220
189
  /**
@@ -226,7 +195,7 @@ class PromodPlaywrightElements {
226
195
  * @returns {Promise<ElementHandle[]>}
227
196
  */
228
197
  async getEngineElements() {
229
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "getEngineElements" from wrapped API`);
198
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "getEngineElements" from wrapped API`);
230
199
  await this.getElement();
231
200
  return this._driverElements;
232
201
  }
@@ -239,7 +208,7 @@ class PromodPlaywrightElements {
239
208
  * @param {(item, index) => Promise<void>} cb
240
209
  */
241
210
  async each(cb) {
242
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "each" from wrapped API, args: `, cb);
211
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "each" from wrapped API, args: `, cb);
243
212
  await this.getElement(0);
244
213
  for (let i = 0; i < this._driverElements.length; i++) {
245
214
  await cb(this.get(i), i);
@@ -254,7 +223,7 @@ class PromodPlaywrightElements {
254
223
  * @returns {Promise<any[]>}
255
224
  */
256
225
  async map(cb) {
257
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "map" from wrapped API, args: `, cb);
226
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "map" from wrapped API, args: `, cb);
258
227
  await this.getElement(0);
259
228
  const res = [];
260
229
  for (let i = 0; i < this._driverElements.length; i++) {
@@ -271,7 +240,7 @@ class PromodPlaywrightElements {
271
240
  * @returns {Promise<boolean>}
272
241
  */
273
242
  async some(cb) {
274
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "some" from wrapped API, args: `, cb);
243
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "some" from wrapped API, args: `, cb);
275
244
  await this.getElement(0);
276
245
  for (let i = 0; i < this._driverElements.length; i++) {
277
246
  const res = await cb(this.get(i), i).catch(() => false);
@@ -290,7 +259,7 @@ class PromodPlaywrightElements {
290
259
  * @returns {Promise<boolean>}
291
260
  */
292
261
  async every(cb) {
293
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "every" from wrapped API, args: `, cb);
262
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "every" from wrapped API, args: `, cb);
294
263
  await this.getElement(0);
295
264
  for (let i = 0; i < this._driverElements.length; i++) {
296
265
  const res = await cb(this.get(i), i).catch(() => false);
@@ -309,7 +278,7 @@ class PromodPlaywrightElements {
309
278
  * @returns {Promise<PromodElementType>}
310
279
  */
311
280
  async find(cb) {
312
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "find" from wrapped API, args: `, cb);
281
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "find" from wrapped API, args: `, cb);
313
282
  await this.getElement(0);
314
283
  for (let i = 0; i < this._driverElements.length; i++) {
315
284
  const el = this.get(i);
@@ -327,16 +296,15 @@ class PromodPlaywrightElements {
327
296
  * @returns {Promise<number>}
328
297
  */
329
298
  async count() {
330
- internals_1.promodLogger.engineLog(`[PW] Promod elements interface calls method "count" from wrapped API`);
299
+ promodLogger.engineLog(`[PW] Promod elements interface calls method "count" from wrapped API`);
331
300
  return this.getElement()
332
301
  .then(() => this._driverElements.length)
333
302
  .catch((error) => {
334
- internals_1.promodLogger.engineLog(`Promod elements interface gets error after method "count" from wrapped API, error: `, error);
303
+ promodLogger.engineLog(`Promod elements interface gets error after method "count" from wrapped API, error: `, error);
335
304
  return 0;
336
305
  });
337
306
  }
338
307
  }
339
- exports.PromodPlaywrightElements = PromodPlaywrightElements;
340
308
  class PromodPlaywrightElement {
341
309
  _driver;
342
310
  _driverElement;
@@ -358,9 +326,9 @@ class PromodPlaywrightElement {
358
326
  * @returns {Promise<ElementHandle<Node>>}
359
327
  */
360
328
  async getElement() {
361
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "getElement" from wrapped API`);
362
- this._driver = await pw_client_1.browser['getWorkingContext']();
363
- const ignoreParent = (0, sat_utils_1.isString)(this.selector) && this.selector.startsWith('ignore-parent=');
329
+ promodLogger.engineLog(`[PW] Promod element interface calls method "getElement" from wrapped API`);
330
+ this._driver = await browser['getWorkingContext']();
331
+ const ignoreParent = isString(this.selector) && this.selector.startsWith('ignore-parent=');
364
332
  const selector = ignoreParent ? this.selector.replace('ignore-parent=', '') : this.selector;
365
333
  const shouldUserDocumentRoot = selector.toString().startsWith('xpath=//') || ignoreParent;
366
334
  let parent;
@@ -380,31 +348,27 @@ class PromodPlaywrightElement {
380
348
  return this._driverElement;
381
349
  }
382
350
  const getElementArgs = buildBy(selector, this.getExecuteScriptArgs, parent, false);
383
- if (this.getParent && !ignoreParent && (0, sat_utils_1.isString)(selector)) {
351
+ if (this.getParent && !ignoreParent && isString(selector)) {
384
352
  this._driverElement = (await (parent || this._driver).locator(getElementArgs).all())[0];
385
353
  }
386
- else if ((0, sat_utils_1.isFunction)(getElementArgs[0]) || (0, sat_utils_1.isAsyncFunction)(getElementArgs[0])) {
354
+ else if (isFunction(getElementArgs[0]) || isAsyncFunction(getElementArgs[0])) {
387
355
  const [queryFn, quertFnArgs] = getElementArgs;
388
356
  const resolved = [];
389
- const callArgs = (0, sat_utils_1.toArray)(quertFnArgs);
357
+ const callArgs = toArray(quertFnArgs);
390
358
  for (const item of callArgs) {
391
359
  // TODO refactor resolver
392
360
  const resolvedItem = await item;
393
- resolved.push(resolvedItem?.elementHandle ? await resolvedItem.elementHandle() : resolvedItem);
361
+ resolved.push(resolvedItem?.evaluate ? await resolvedItem.evaluateHandle((node) => node) : resolvedItem);
394
362
  }
395
363
  const result = (await this._driver.evaluateHandle(queryFn, resolved.length === 1 ? resolved[0] : resolved)).asElement();
396
- let tempLocatorDataAttribute = `${(0, sat_utils_1.getRandomString)(25, { letters: true })}`;
364
+ let tempLocatorDataAttribute = `${getRandomString(25, { letters: true })}`;
397
365
  const locatoDataAttribute = await result.evaluate((n, item) => {
398
- // @ts-ignore
399
366
  if (n.dataset.promod_element_item) {
400
- // @ts-ignore
401
367
  return n.dataset.promod_element_item;
402
368
  }
403
369
  else {
404
- // @ts-ignore
405
370
  n.dataset.promod_element_item = `${item}`;
406
371
  }
407
- // @ts-ignore
408
372
  return n.dataset.promod_element_item;
409
373
  }, tempLocatorDataAttribute);
410
374
  await result.dispose();
@@ -429,7 +393,7 @@ class PromodPlaywrightElement {
429
393
  * @returns {PromodElementType}
430
394
  */
431
395
  $(selector, ...rest) {
432
- internals_1.promodLogger.engineLog('[PW] Create new promod child element, selector: ', selector);
396
+ promodLogger.engineLog('[PW] Create new promod child element, selector: ', selector);
433
397
  const [, executeScriptArgsGetter] = getInitElementRest(selector, null, ...rest);
434
398
  const childElement = new PromodPlaywrightElement(selector, this._browserInterface, this.getElement.bind(this), executeScriptArgsGetter);
435
399
  childElement.parentSelector = this.selector;
@@ -444,7 +408,7 @@ class PromodPlaywrightElement {
444
408
  * @returns {PromodElementsType}
445
409
  */
446
410
  $$(selector, ...rest) {
447
- internals_1.promodLogger.engineLog('[PW] Create new promod child elements, selector: ', selector);
411
+ promodLogger.engineLog('[PW] Create new promod child elements, selector: ', selector);
448
412
  const [, executeScriptArgsGetter] = getInitElementRest(selector, null, ...rest);
449
413
  const childElements = new PromodPlaywrightElements(selector, this._browserInterface, this.getElement.bind(this), executeScriptArgsGetter);
450
414
  childElements.parentSelector = this.selector;
@@ -469,9 +433,9 @@ class PromodPlaywrightElement {
469
433
  * @returns {Promise<void>}
470
434
  */
471
435
  async doubleClick(opts = { timeout: 500 }) {
472
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "click" from wrapped API, args: `, opts);
473
- if (!(0, sat_utils_1.isObject)(opts) && !(0, sat_utils_1.isUndefined)(opts)) {
474
- throw new TypeError(`click(); accepts only object type ${(0, sat_utils_1.getType)(opts)}`);
436
+ promodLogger.engineLog(`[PW] Promod element interface calls method "click" from wrapped API, args: `, opts);
437
+ if (!isObject(opts) && !isUndefined(opts)) {
438
+ throw new TypeError(`click(); accepts only object type ${getType(opts)}`);
475
439
  }
476
440
  const { withScroll, allowForceIfIntercepted, ...pwOpts } = opts;
477
441
  await this.getElement();
@@ -511,9 +475,9 @@ class PromodPlaywrightElement {
511
475
  * @returns {Promise<void>}
512
476
  */
513
477
  async click(opts = { clickCount: 1, timeout: 500 }) {
514
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "click" from wrapped API, args: `, opts);
515
- if (!(0, sat_utils_1.isObject)(opts) && !(0, sat_utils_1.isUndefined)(opts)) {
516
- throw new TypeError(`click(); accepts only object type ${(0, sat_utils_1.getType)(opts)}`);
478
+ promodLogger.engineLog(`[PW] Promod element interface calls method "click" from wrapped API, args: `, opts);
479
+ if (!isObject(opts) && !isUndefined(opts)) {
480
+ throw new TypeError(`click(); accepts only object type ${getType(opts)}`);
517
481
  }
518
482
  const { withScroll, allowForceIfIntercepted, ...pwOpts } = opts;
519
483
  await this.getElement();
@@ -543,11 +507,15 @@ class PromodPlaywrightElement {
543
507
  * @returns {Promise<string>}
544
508
  */
545
509
  async getTagName() {
546
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "getTagName" from wrapped API`);
510
+ promodLogger.engineLog(`[PW] Promod element interface calls method "getTagName" from wrapped API`);
547
511
  await this.getElement();
548
512
  return await this._driverElement.evaluate((item) => item.nodeName.toLowerCase());
549
513
  }
550
- async getCssValue() { }
514
+ async getCssValue(cssStyleProperty) {
515
+ promodLogger.engineLog(`[PW] Promod element interface calls method "getCssValue" from wrapped API, args: `, cssStyleProperty);
516
+ await this.getElement();
517
+ return await this._driverElement.evaluate((el, prop) => window.getComputedStyle(el).getPropertyValue(prop), cssStyleProperty);
518
+ }
551
519
  async getAttribute(attribute) {
552
520
  await this.getElement();
553
521
  return this._driverElement.getAttribute(attribute);
@@ -570,21 +538,21 @@ class PromodPlaywrightElement {
570
538
  * @param value
571
539
  */
572
540
  async sendKeys(value, asFill) {
573
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "sendKeys" from wrapped API, args: `, value);
574
- if (!(0, sat_utils_1.isString)(value) && !(0, sat_utils_1.isNumber)(value)) {
575
- throw new TypeError(`sendKeys(); accepts only string or number value type ${(0, sat_utils_1.getType)(value)}`);
541
+ promodLogger.engineLog(`[PW] Promod element interface calls method "sendKeys" from wrapped API, args: `, value);
542
+ if (!isString(value) && !isNumber(value)) {
543
+ throw new TypeError(`sendKeys(); accepts only string or number value type ${getType(value)}`);
576
544
  }
577
545
  await this.getElement();
578
546
  if (asFill) {
579
547
  return this._driverElement.fill(value.toString());
580
548
  }
581
549
  const stringValue = value.toString();
582
- const seleniumKeysAlignment = Object.values(mappers_1.KeysSWD);
550
+ const seleniumKeysAlignment = Object.values(KeysSWD);
583
551
  for (const char of stringValue.split('')) {
584
552
  if (seleniumKeysAlignment.includes(char)) {
585
553
  // TODO - this needs to be done in a better way
586
554
  await this.click();
587
- await pw_client_1.browser.keyDownAndUp(Object.keys(mappers_1.KeysSWD).find((k) => mappers_1.KeysSWD[k] === char));
555
+ await browser.keyDownAndUp(Object.keys(KeysSWD).find((k) => KeysSWD[k] === char));
588
556
  }
589
557
  else {
590
558
  await this._driverElement.pressSequentially(char, { delay: 7 });
@@ -606,7 +574,7 @@ class PromodPlaywrightElement {
606
574
  * @returns {Promise<void>}
607
575
  */
608
576
  async hover(opts = { force: true, timeout: 500 }) {
609
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "hover" from wrapped API`);
577
+ promodLogger.engineLog(`[PW] Promod element interface calls method "hover" from wrapped API`);
610
578
  await this.getElement();
611
579
  await this._driverElement.hover(opts);
612
580
  }
@@ -619,9 +587,9 @@ class PromodPlaywrightElement {
619
587
  * @returns {Promise<void>}
620
588
  */
621
589
  async hoverByElementCoordinate(position = 'center') {
622
- internals_1.promodLogger.engineLog(`Promod element interface calls method "hoverByElementCoordinate" from wrapped API, args: `, position);
590
+ promodLogger.engineLog(`Promod element interface calls method "hoverByElementCoordinate" from wrapped API, args: `, position);
623
591
  const { x, y } = await this.getElementCoordinates(position);
624
- await (await pw_client_1.browser['getCurrentPage']()).mouse.move(x, y);
592
+ await (await browser['getCurrentPage']()).mouse.move(x, y);
625
593
  }
626
594
  /**
627
595
  * @example
@@ -632,18 +600,18 @@ class PromodPlaywrightElement {
632
600
  * @returns {Promise<void>}
633
601
  */
634
602
  async clickByElementCoordinate(position = 'center') {
635
- internals_1.promodLogger.engineLog(`Promod element interface calls method "clickByElementCoordinate" from wrapped API, args: `, position);
603
+ promodLogger.engineLog(`Promod element interface calls method "clickByElementCoordinate" from wrapped API, args: `, position);
636
604
  const { x, y } = await this.getElementCoordinates(position);
637
- await (await pw_client_1.browser['getCurrentPage']()).mouse.click(x, y);
605
+ await (await browser['getCurrentPage']()).mouse.click(x, y);
638
606
  }
639
607
  async getElementCoordinates(position = 'center') {
640
- internals_1.promodLogger.engineLog(`Promod element interface calls method "clickByElementCoordinate" from wrapped API, args: `, position);
608
+ promodLogger.engineLog(`Promod element interface calls method "clickByElementCoordinate" from wrapped API, args: `, position);
641
609
  await this.getElement();
642
610
  const { x, y, width, height } = await this._driverElement.evaluate((el) => el.getBoundingClientRect());
643
- return (0, mappers_1.getPositionXY)(position, { x, y, width, height });
611
+ return getPositionXY(position, { x, y, width, height });
644
612
  }
645
613
  async focus() {
646
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "focus" from wrapped API`);
614
+ promodLogger.engineLog(`[PW] Promod element interface calls method "focus" from wrapped API`);
647
615
  await this.getElement();
648
616
  await this._driverElement.focus();
649
617
  }
@@ -659,7 +627,7 @@ class PromodPlaywrightElement {
659
627
  * @returns {Promise<void>}
660
628
  */
661
629
  async pressEnter(focus = true) {
662
- internals_1.promodLogger.engineLog(`[PW] Promod element interface calls method "pressEnter" from wrapped API, args: `, focus);
630
+ promodLogger.engineLog(`[PW] Promod element interface calls method "pressEnter" from wrapped API, args: `, focus);
663
631
  await this.getElement();
664
632
  if (focus) {
665
633
  await this._driverElement.focus();
@@ -679,18 +647,18 @@ class PromodPlaywrightElement {
679
647
  * @returns {Promise<void>}
680
648
  */
681
649
  async clearViaBackspace(repeat = 1, focus = true) {
682
- internals_1.promodLogger.engineLog(`Promod element interface calls method "clearViaBackspace" from wrapped API, args: `, repeat, focus);
650
+ promodLogger.engineLog(`Promod element interface calls method "clearViaBackspace" from wrapped API, args: `, repeat, focus);
683
651
  await this.getElement();
684
652
  if (focus) {
685
653
  await this._driverElement.focus();
686
654
  }
687
- for (const _act of (0, sat_utils_1.lengthToIndexesArray)(repeat)) {
655
+ for (const _act of lengthToIndexesArray(repeat)) {
688
656
  await this._driver.keyboard.press('Backspace', { delay: 25 });
689
657
  }
690
658
  }
691
659
  async selectOption(value, strictTextOptionEqual) {
692
660
  await this.getElement();
693
- if ((0, sat_utils_1.isString)(value)) {
661
+ if (isString(value)) {
694
662
  const opts = await this._driverElement.locator('option').all();
695
663
  for (const opt of opts) {
696
664
  const content = (await opt.textContent()).trim();
@@ -725,7 +693,7 @@ class PromodPlaywrightElement {
725
693
  */
726
694
  async scrollIntoView(position) {
727
695
  await this.getElement();
728
- await pw_client_1.browser.executeScript(([elem, scrollPosition]) => {
696
+ await browser.executeScript(([elem, scrollPosition]) => {
729
697
  let position = true;
730
698
  const scrollBlock = ['end', 'start', 'center', 'nearest'];
731
699
  // @ts-ignore
@@ -751,7 +719,7 @@ class PromodPlaywrightElement {
751
719
  return this.getElement()
752
720
  .then(() => this._driverElement.isVisible())
753
721
  .catch((error) => {
754
- internals_1.promodLogger.engineLog(`Promod element interface gets error after method "isDisplayed" from wrapped API, error: `, error);
722
+ promodLogger.engineLog(`Promod element interface gets error after method "isDisplayed" from wrapped API, error: `, error);
755
723
  return false;
756
724
  });
757
725
  }
@@ -780,11 +748,10 @@ class PromodPlaywrightElement {
780
748
  };
781
749
  }
782
750
  }
783
- exports.PromodPlaywrightElement = PromodPlaywrightElement;
784
751
  function getInitElementRest(selector, root, ...rest) {
785
752
  let getParent = null;
786
753
  let getExecuteScriptArgs = null;
787
- if ((0, sat_utils_1.isFunction)(selector) || (0, sat_utils_1.isPromise)(selector)) {
754
+ if (isFunction(selector) || isPromise(selector)) {
788
755
  getExecuteScriptArgs = function getExecuteScriptArgs() {
789
756
  const localRest = rest.map((item) => (item && item.getEngineElement ? item.getEngineElement() : item));
790
757
  const rootPromiseIfRequired = root && root.getEngineElement ? root.getEngineElement() : root;
@@ -803,14 +770,12 @@ function getInitElementRest(selector, root, ...rest) {
803
770
  }
804
771
  const $ = (selector, root, ...rest) => {
805
772
  const restArgs = getInitElementRest(selector, root, ...rest);
806
- return new PromodPlaywrightElement(selector, pw_client_1.browser, ...restArgs);
773
+ return new PromodPlaywrightElement(selector, browser, ...restArgs);
807
774
  };
808
- exports.$ = $;
809
775
  const $$ = (selector, root, ...rest) => {
810
776
  const restArgs = getInitElementRest(selector, root, ...rest);
811
- return new PromodPlaywrightElements(selector, pw_client_1.browser, ...restArgs);
777
+ return new PromodPlaywrightElements(selector, browser, ...restArgs);
812
778
  };
813
- exports.$$ = $$;
814
779
  function preBindBrowserInstance(browserThaNeedsToBeBinded) {
815
780
  const $ = (selector, root, ...rest) => {
816
781
  const restArgs = getInitElementRest(selector, root, ...rest);
@@ -826,4 +791,5 @@ function preBindBrowserInstance(browserThaNeedsToBeBinded) {
826
791
  browser: browserThaNeedsToBeBinded,
827
792
  };
828
793
  }
794
+ export { $, $$, PromodPlaywrightElement, PromodPlaywrightElements, preBindBrowserInstance };
829
795
  //# sourceMappingURL=pw_element.js.map