promod 2.5.4 → 3.0.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 (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 +12 -11
  15. package/built/cjs/pw/pw_client.js +47 -58
  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 +12 -11
  57. package/built/esm/pw/pw_client.js +103 -118
  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,39 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Browser = exports.browser = void 0;
4
- const sat_utils_1 = require("sat-utils");
5
- const sat_compare_1 = require("sat-compare");
6
- const sat_wait_1 = require("sat-wait");
7
- const execute_script_1 = require("../helpers/execute.script");
8
- const swd_alignment_1 = require("./swd_alignment");
9
- const mappers_1 = require("../mappers");
10
- const internals_1 = require("../internals");
11
- const availableToRunEvenIfCurrentDriverDoesNotExist = ['constructor', 'runNewBrowser', 'switchToBrowser', 'quitAll'];
12
- function validateBrowserCallMethod(browserClass) {
13
- const protKeys = Object.getOwnPropertyNames(browserClass.prototype).filter((item) => !availableToRunEvenIfCurrentDriverDoesNotExist.includes(item));
14
- for (const key of protKeys) {
15
- const descriptor = Object.getOwnPropertyDescriptor(browserClass.prototype, key);
16
- if ((0, sat_utils_1.isAsyncFunction)(descriptor.value)) {
17
- const originalMethod = descriptor.value;
18
- // eslint-disable-next-line no-inner-declarations
19
- async function decoratedWithChecker(...args) {
20
- if (!this.seleniumDriver) {
21
- throw new Error(`
22
- ${key}(): Seems like driver was not initialized
23
- or visit https://github.com/Simple-Automation-Testing/promod/blob/master/docs/init.md#getdriver
24
- `);
25
- }
26
- return originalMethod.call(this, ...args);
27
- }
28
- Object.defineProperty(decoratedWithChecker, 'name', { value: key });
29
- descriptor.value = decoratedWithChecker;
30
- Object.defineProperty(browserClass.prototype, key, descriptor);
31
- }
32
- }
33
- return new browserClass();
34
- }
1
+ import { toArray, isArray, isString, isNumber, safeJSONstringify, isNotEmptyObject } from 'sat-utils';
2
+ import { compare } from 'sat-compare';
3
+ import { waitFor } from 'sat-wait';
4
+ import { toNativeEngineExecuteScriptArgs } from '../helpers/execute.script';
5
+ import { buildBy } from './swd_alignment';
6
+ import { KeysSWD, resolveUrl } from '../mappers';
7
+ import { promodLogger } from '../internals';
8
+ import { validateBrowserCallMethod } from '../shared/validate_browser';
35
9
  class Browser {
36
- wait = sat_wait_1.waitFor;
10
+ wait = waitFor;
37
11
  seleniumDriver;
38
12
  /** @private */
39
13
  appBaseUrl;
@@ -46,22 +20,25 @@ class Browser {
46
20
  /** @private */
47
21
  _createNewDriver;
48
22
  /** @private */
49
- _browserConfig;
50
- /** @private */
51
23
  _requestsMocks;
24
+ /** @private */
25
+ _mockInterceptionEnabled;
52
26
  static getBrowser() {
53
- return validateBrowserCallMethod(Browser);
27
+ return validateBrowserCallMethod(Browser, {
28
+ driverPropertyName: 'seleniumDriver',
29
+ excludedMethods: ['constructor', 'runNewBrowser', 'switchToBrowser', 'quitAll'],
30
+ errorUrlSuffix: '#getdriver',
31
+ });
54
32
  }
55
33
  constructor() {
56
- this.wait = sat_wait_1.waitFor;
57
- this.seleniumDriver;
34
+ this.wait = waitFor;
58
35
  this.cdpPages = [];
59
36
  }
60
37
  currentClient() {
61
38
  return this.seleniumDriver;
62
39
  }
63
40
  get keyboard() {
64
- return mappers_1.KeysSWD;
41
+ return KeysSWD;
65
42
  }
66
43
  injectEngine({ driver }) {
67
44
  this.seleniumDriver = driver;
@@ -71,6 +48,88 @@ class Browser {
71
48
  this._requestsMocks = [];
72
49
  }
73
50
  this._requestsMocks.push(mock);
51
+ if (this.seleniumDriver && !this._mockInterceptionEnabled) {
52
+ this._enableRequestInterception().catch((err) => promodLogger.engineLog('[SWD] Failed to enable request interception on mockRequests:', err));
53
+ }
54
+ }
55
+ clearMockRequests() {
56
+ this._requestsMocks = [];
57
+ }
58
+ _urlMatchesPattern(url, pattern) {
59
+ const regexStr = pattern
60
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
61
+ .replace(/\*\*/g, '\u0000')
62
+ .replace(/\*/g, '[^/]*')
63
+ .replace(/\u0000/g, '.*');
64
+ return new RegExp(regexStr).test(url);
65
+ }
66
+ async _enableRequestInterception() {
67
+ if (this._mockInterceptionEnabled) {
68
+ return;
69
+ }
70
+ if (!this._requestsMocks || this._requestsMocks.length === 0) {
71
+ return;
72
+ }
73
+ promodLogger.engineLog('[SWD] Promod client interface enabling request interception via CDP Fetch domain');
74
+ try {
75
+ let cdp = await this.seleniumDriver.createCDPConnection('page');
76
+ const existingPage = this.cdpPages.find((p) => p._wsConnection?._url === cdp._wsConnection?._url);
77
+ if (existingPage) {
78
+ await cdp._wsConnection?.close();
79
+ cdp = existingPage;
80
+ }
81
+ else {
82
+ this.cdpPages.push(cdp);
83
+ }
84
+ await cdp.send('Fetch.enable', {
85
+ patterns: [{ urlPattern: '*', requestStage: 'Request' }],
86
+ });
87
+ cdp._wsConnection?.on?.('message', (rawData) => {
88
+ let message;
89
+ try {
90
+ const data = typeof rawData === 'string' ? rawData : rawData.toString();
91
+ message = JSON.parse(data);
92
+ }
93
+ catch {
94
+ return;
95
+ }
96
+ if (message.method !== 'Fetch.requestPaused') {
97
+ return;
98
+ }
99
+ const { requestId, request } = message.params;
100
+ const requestUrl = request.url;
101
+ const matchingMock = this._requestsMocks?.find((mock) => this._urlMatchesPattern(requestUrl, mock.url));
102
+ if (matchingMock) {
103
+ const mockRequest = { url: requestUrl, method: request.method, headers: request.headers };
104
+ const response = matchingMock.handler(mockRequest);
105
+ const responseHeaders = response.headers
106
+ ? Object.entries(response.headers).map(([name, value]) => ({ name, value }))
107
+ : [];
108
+ const bodyStr = response.body != null
109
+ ? typeof response.body === 'string'
110
+ ? response.body
111
+ : JSON.stringify(response.body)
112
+ : '';
113
+ cdp
114
+ .send('Fetch.fulfillRequest', {
115
+ requestId,
116
+ responseCode: response.status || 200,
117
+ responseHeaders,
118
+ body: Buffer.from(bodyStr).toString('base64'),
119
+ })
120
+ .catch((err) => promodLogger.engineLog('[SWD] Fetch.fulfillRequest error:', err));
121
+ }
122
+ else {
123
+ cdp
124
+ .send('Fetch.continueRequest', { requestId })
125
+ .catch((err) => promodLogger.engineLog('[SWD] Fetch.continueRequest error:', err));
126
+ }
127
+ });
128
+ this._mockInterceptionEnabled = true;
129
+ }
130
+ catch (error) {
131
+ promodLogger.engineLog('[SWD] Failed to enable request interception via CDP:', error);
132
+ }
74
133
  }
75
134
  async injectPagePreloadScript(script, dontThrowOnError = true) {
76
135
  try {
@@ -121,7 +180,7 @@ class Browser {
121
180
  * @return {Promise<void>}
122
181
  */
123
182
  async scrollElementByMouseWheel(element, x, y, deltaX, deltaY, duration) {
124
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "scrollElementByMouseWheel" from wrapped API, args: `, element, x, y, deltaX, deltaY, duration);
183
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "scrollElementByMouseWheel" from wrapped API, args: `, element, x, y, deltaX, deltaY, duration);
125
184
  await this.seleniumDriver
126
185
  .actions()
127
186
  // @ts-ignore
@@ -139,7 +198,7 @@ class Browser {
139
198
  * @return {Promise<void>}
140
199
  */
141
200
  async scrollByMouseWheel(x, y, deltaX, deltaY, duration) {
142
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "scrollByMouseWheel" from wrapped API, args: `, x, y, deltaX, deltaY, duration);
201
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "scrollByMouseWheel" from wrapped API, args: `, x, y, deltaX, deltaY, duration);
143
202
  await this.seleniumDriver
144
203
  .actions()
145
204
  // @ts-ignore
@@ -157,14 +216,14 @@ class Browser {
157
216
  * @return {Promise<void>}
158
217
  */
159
218
  async keyDownAndHold(key, element) {
160
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "keyDownAndHold" from wrapped API, args: `, key, element);
219
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "keyDownAndHold" from wrapped API, args: `, key, element);
161
220
  if (element) {
162
221
  await this.seleniumDriver
163
222
  .actions()
164
223
  .move({ origin: await element.getEngineElement() })
165
224
  .perform();
166
225
  }
167
- for (const k of (0, sat_utils_1.toArray)(key)) {
226
+ for (const k of toArray(key)) {
168
227
  await this.seleniumDriver.actions().keyDown(k).perform();
169
228
  }
170
229
  }
@@ -179,14 +238,14 @@ class Browser {
179
238
  * @return {Promise<void>}
180
239
  */
181
240
  async keyUp(key, element) {
182
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "keyUp" from wrapped API, args: `, key, element);
241
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "keyUp" from wrapped API, args: `, key, element);
183
242
  if (element) {
184
243
  await this.seleniumDriver
185
244
  .actions()
186
245
  .move({ origin: (await element.getEngineElement()) })
187
246
  .perform();
188
247
  }
189
- for (const k of (0, sat_utils_1.toArray)(key)) {
248
+ for (const k of toArray(key)) {
190
249
  await this.seleniumDriver.actions().keyUp(k).perform();
191
250
  }
192
251
  }
@@ -201,14 +260,14 @@ class Browser {
201
260
  * @return {Promise<void>}
202
261
  */
203
262
  async keyDownAndUp(key, element) {
204
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "keyUp" from wrapped API, args: `, key, element);
263
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "keyUp" from wrapped API, args: `, key, element);
205
264
  if (element) {
206
265
  await this.seleniumDriver
207
266
  .actions()
208
267
  .move({ origin: (await element.getEngineElement()) })
209
268
  .perform();
210
269
  }
211
- for (const k of (0, sat_utils_1.toArray)(key)) {
270
+ for (const k of toArray(key)) {
212
271
  await this.seleniumDriver.actions().keyDown(k).keyUp(k).perform();
213
272
  }
214
273
  }
@@ -217,11 +276,11 @@ class Browser {
217
276
  * @param {object} [browserDescription] browser descriptions
218
277
  */
219
278
  async runNewBrowser({ currentBrowserName, newBrowserName, capabilities, } = {}) {
220
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "runNewBrowser" from wrapped API, args: `, currentBrowserName, newBrowserName, capabilities);
279
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "runNewBrowser" from wrapped API, args: `, currentBrowserName, newBrowserName, capabilities);
221
280
  if (!this._createNewDriver) {
222
281
  throw new Error('createNewDriver(): seems like create driver method was not inited');
223
282
  }
224
- if (!(0, sat_utils_1.isArray)(this.drivers)) {
283
+ if (!isArray(this.drivers)) {
225
284
  this.drivers = [];
226
285
  }
227
286
  if (this.seleniumDriver && currentBrowserName) {
@@ -248,19 +307,19 @@ class Browser {
248
307
  * @return {Promise<void>}
249
308
  */
250
309
  async switchToIframe(selector, jumpToDefaultFirst = false, { timeout = 30_000, message = '' } = {}) {
251
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToIframe" from wrapped API, args: `, selector, jumpToDefaultFirst);
310
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToIframe" from wrapped API, args: `, selector, jumpToDefaultFirst);
252
311
  if (jumpToDefaultFirst) {
253
312
  await this.switchToDefauldIframe();
254
313
  }
255
314
  if (typeof selector === 'string') {
256
- await (0, sat_wait_1.waitFor)(async () => {
257
- const elements = await this.seleniumDriver.findElements((0, swd_alignment_1.buildBy)(selector));
315
+ await waitFor(async () => {
316
+ const elements = await this.seleniumDriver.findElements(buildBy(selector));
258
317
  return elements.length > 0;
259
318
  }, {
260
319
  timeout,
261
320
  message: (t, e = 'without error') => `switchToIframe('${selector}'): required iframe was not found, timeout ${t}, error: ${e} ${message ? '\n' + message : ''} `,
262
321
  });
263
- await this.seleniumDriver.switchTo().frame(this.seleniumDriver.findElement((0, swd_alignment_1.buildBy)(selector)));
322
+ await this.seleniumDriver.switchTo().frame(this.seleniumDriver.findElement(buildBy(selector)));
264
323
  }
265
324
  if (selector.getEngineElement) {
266
325
  await this.seleniumDriver.switchTo().frame(await selector.getEngineElement());
@@ -276,7 +335,7 @@ class Browser {
276
335
  * @return {Promise<void>}
277
336
  */
278
337
  async switchToDefauldIframe() {
279
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToDefauldIframe" from wrapped API`);
338
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToDefauldIframe" from wrapped API`);
280
339
  await this.seleniumDriver.switchTo().defaultContent();
281
340
  }
282
341
  /**
@@ -289,7 +348,7 @@ class Browser {
289
348
  * @return {Promise<void>}
290
349
  */
291
350
  async switchToBrowser(browserData = {}) {
292
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToBrowser" from wrapped API, args: `, browserData);
351
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToBrowser" from wrapped API, args: `, browserData);
293
352
  const { index, browserName, ...tabData } = browserData;
294
353
  if (this.seleniumDriver && this.drivers && this.drivers.length) {
295
354
  const isDriverInPool = this.drivers.find((item) => item === this.seleniumDriver);
@@ -297,7 +356,7 @@ class Browser {
297
356
  this.drivers = [...this.drivers, this.seleniumDriver];
298
357
  }
299
358
  }
300
- if ((0, sat_utils_1.isString)(browserName)) {
359
+ if (isString(browserName)) {
301
360
  const driver = this.drivers.find((item) => item['__promodBrowserName'] === browserName);
302
361
  // TODO find better solution
303
362
  if (!driver) {
@@ -306,12 +365,12 @@ class Browser {
306
365
  this.seleniumDriver = driver;
307
366
  return;
308
367
  }
309
- if ((0, sat_utils_1.isNumber)(index) && (0, sat_utils_1.isArray)(this.drivers) && this.drivers.length > index) {
368
+ if (isNumber(index) && isArray(this.drivers) && this.drivers.length > index) {
310
369
  // TODO find better solution
311
370
  this.seleniumDriver = this.drivers[index];
312
371
  return;
313
372
  }
314
- if ((0, sat_utils_1.isNotEmptyObject)(tabData)) {
373
+ if (isNotEmptyObject(tabData)) {
315
374
  for (const driver of this.drivers) {
316
375
  this.seleniumDriver = driver;
317
376
  const result = await this.switchToBrowserTab({ ...tabData })
@@ -331,7 +390,7 @@ class Browser {
331
390
  this._createNewDriver = lauchNewInstance;
332
391
  }
333
392
  get Key() {
334
- return mappers_1.KeysSWD;
393
+ return KeysSWD;
335
394
  }
336
395
  get baseUrl() {
337
396
  return this.appBaseUrl;
@@ -340,7 +399,7 @@ class Browser {
340
399
  this.appBaseUrl = url;
341
400
  }
342
401
  async returnToInitialTab() {
343
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "returnToInitialTab" from wrapped API`);
402
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "returnToInitialTab" from wrapped API`);
344
403
  // there was no switching in test
345
404
  if (!this.initialTab) {
346
405
  return;
@@ -351,7 +410,7 @@ class Browser {
351
410
  this.initialTab = null;
352
411
  }
353
412
  async closeAllTabsExceptInitial() {
354
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "closeAllTabsExceptInitial" from wrapped API`);
413
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "closeAllTabsExceptInitial" from wrapped API`);
355
414
  const handles = await this.getTabs();
356
415
  handles.splice(handles.indexOf(this.initialTab), 1);
357
416
  await this.makeActionAtEveryTab(async () => this.close(), handles);
@@ -370,7 +429,7 @@ class Browser {
370
429
  * @return {Promise<void>}
371
430
  */
372
431
  async makeActionAtEveryTab(action, handles) {
373
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "makeActionAtEveryTab" from wrapped API, args: `, action);
432
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "makeActionAtEveryTab" from wrapped API, args: `, action);
374
433
  handles = handles || (await this.getTabs());
375
434
  for (const windowHandle of handles) {
376
435
  await this.seleniumDriver.switchTo().window(windowHandle);
@@ -383,23 +442,23 @@ class Browser {
383
442
  */
384
443
  async switchToBrowserTab(tabObject = {}) {
385
444
  const { strictEquality = true, index, expectedQuantity, timeout = 5000, ...titleUrl } = tabObject;
386
- if ((0, sat_utils_1.isNumber)(expectedQuantity)) {
445
+ if (isNumber(expectedQuantity)) {
387
446
  let errorMessage;
388
- await (0, sat_wait_1.waitFor)(async () => {
447
+ await waitFor(async () => {
389
448
  const tabs = await this.getTabs();
390
449
  errorMessage = () => `Expected browser tabs count is ${expectedQuantity}, current browser tabs count is ${tabs.length}`;
391
450
  return tabs.length === expectedQuantity;
392
451
  }, { message: errorMessage, timeout });
393
452
  }
394
- if ((0, sat_utils_1.isNumber)(index) && (await this.getTabs()).length < index + 1) {
453
+ if (isNumber(index) && (await this.getTabs()).length < index + 1) {
395
454
  throw new Error(`Index is out available browser tabs count, index is ${index}, current browser tabs count is ${(await this.getTabs()).length}`);
396
455
  }
397
- else if ((0, sat_utils_1.isNumber)(index)) {
456
+ else if (isNumber(index)) {
398
457
  return await this.seleniumDriver.switchTo().window((await this.getTabs())[index]);
399
458
  }
400
- if ((0, sat_utils_1.isNotEmptyObject)(titleUrl)) {
459
+ if (isNotEmptyObject(titleUrl)) {
401
460
  let errorMessage;
402
- await (0, sat_wait_1.waitFor)(async () => {
461
+ await waitFor(async () => {
403
462
  const tabs = await this.getTabs();
404
463
  for (const tab of tabs) {
405
464
  await this.seleniumDriver.switchTo().window(tab);
@@ -407,11 +466,11 @@ class Browser {
407
466
  url: await this.getCurrentUrl(),
408
467
  title: await this.getTitle(),
409
468
  };
410
- const { result } = (0, sat_compare_1.compare)(currentBrowserState, titleUrl, { stringIncludes: !strictEquality });
469
+ const { result } = compare(currentBrowserState, titleUrl, { stringIncludes: !strictEquality });
411
470
  if (result)
412
471
  return true;
413
472
  }
414
- errorMessage = () => `Expected browser tab state is ${(0, sat_utils_1.safeJSONstringify)(titleUrl)}, current browser tab states was not met`;
473
+ errorMessage = () => `Expected browser tab state is ${safeJSONstringify(titleUrl)}, current browser tab states was not met`;
415
474
  }, { message: errorMessage, timeout });
416
475
  }
417
476
  }
@@ -427,7 +486,7 @@ class Browser {
427
486
  * @return {Promise<void>}
428
487
  */
429
488
  async openNewTab(url = 'data:,') {
430
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "openNewTab" from wrapped API, args: `, url);
489
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "openNewTab" from wrapped API, args: `, url);
431
490
  await this.seleniumDriver.executeScript((openUrl) => {
432
491
  window.open(openUrl, '_blank');
433
492
  }, url);
@@ -444,7 +503,7 @@ class Browser {
444
503
  * @return {Promise<void>}
445
504
  */
446
505
  async switchToTab(tabObject) {
447
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToTab" from wrapped API, args: `, tabObject);
506
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "switchToTab" from wrapped API, args: `, tabObject);
448
507
  if (!this.initialTab) {
449
508
  this.initialTab = await this.seleniumDriver.getWindowHandle();
450
509
  }
@@ -461,8 +520,8 @@ class Browser {
461
520
  * @returns {Promise<void>}
462
521
  */
463
522
  async setCookies(cookies) {
464
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "setCookies" from wrapped API, args: `, cookies);
465
- const cookiesArr = (0, sat_utils_1.toArray)(cookies);
523
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "setCookies" from wrapped API, args: `, cookies);
524
+ const cookiesArr = toArray(cookies);
466
525
  for (const cookie of cookiesArr) {
467
526
  await (await this.seleniumDriver.manage()).addCookie(cookie);
468
527
  }
@@ -476,7 +535,7 @@ class Browser {
476
535
  * @return {Promise<Array<TCookie>>} cookies list
477
536
  */
478
537
  async getCookies() {
479
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getCookies" from wrapped API`);
538
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getCookies" from wrapped API`);
480
539
  return await (await this.seleniumDriver.manage()).getCookies();
481
540
  }
482
541
  /**
@@ -489,7 +548,7 @@ class Browser {
489
548
  * @return {Promise<{ name: string; value: string }>}
490
549
  */
491
550
  async getCookieByName(name) {
492
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getCookieByName" from wrapped API, args: `, name);
551
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getCookieByName" from wrapped API, args: `, name);
493
552
  return await (await this.seleniumDriver.manage()).getCookie(name);
494
553
  }
495
554
  /**
@@ -502,7 +561,7 @@ class Browser {
502
561
  * @returns {Promise<void>}
503
562
  */
504
563
  async deleteCookie(name) {
505
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "deleteCookie" from wrapped API, args: `, name);
564
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "deleteCookie" from wrapped API, args: `, name);
506
565
  await (await this.seleniumDriver.manage()).deleteCookie(name);
507
566
  }
508
567
  /**
@@ -514,7 +573,7 @@ class Browser {
514
573
  * @returns {Promise<void>}
515
574
  */
516
575
  async deleteAllCookies() {
517
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "deleteAllCookies" from wrapped API`);
576
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "deleteAllCookies" from wrapped API`);
518
577
  await (await this.seleniumDriver.manage()).deleteAllCookies();
519
578
  }
520
579
  /**
@@ -527,7 +586,7 @@ class Browser {
527
586
  * @return {Promise<string>} tab (page) title
528
587
  */
529
588
  async getTitle() {
530
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getTitle" from wrapped API`);
589
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getTitle" from wrapped API`);
531
590
  return await this.seleniumDriver.getTitle();
532
591
  }
533
592
  /**
@@ -540,7 +599,7 @@ class Browser {
540
599
  * @return {Promise<string>}
541
600
  */
542
601
  async getCurrentUrl() {
543
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getCurrentUrl" from wrapped API`);
602
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getCurrentUrl" from wrapped API`);
544
603
  return await this.seleniumDriver.getCurrentUrl();
545
604
  }
546
605
  /**
@@ -553,7 +612,7 @@ class Browser {
553
612
  * @return {Promise<{ height: number; width: number }>} window size
554
613
  */
555
614
  async getWindomSize() {
556
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getWindomSize" from wrapped API`);
615
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getWindomSize" from wrapped API`);
557
616
  return await this.seleniumDriver.executeScript(() => ({ height: window.outerHeight, width: window.outerWidth }));
558
617
  }
559
618
  /**
@@ -566,7 +625,7 @@ class Browser {
566
625
  * @returns {Promise<Buffer>}
567
626
  */
568
627
  async takeScreenshot() {
569
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "takeScreenshot" from wrapped API`);
628
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "takeScreenshot" from wrapped API`);
570
629
  const res = await this.seleniumDriver.takeScreenshot();
571
630
  return Buffer.from(res, 'base64');
572
631
  }
@@ -580,7 +639,7 @@ class Browser {
580
639
  * @returns {Promise<any[]>}
581
640
  */
582
641
  async getTabs() {
583
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getTabs" from wrapped API`);
642
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getTabs" from wrapped API`);
584
643
  return await this.seleniumDriver.getAllWindowHandles();
585
644
  }
586
645
  /**
@@ -593,7 +652,7 @@ class Browser {
593
652
  * @returns {Promise<number>}
594
653
  */
595
654
  async getTabsCount() {
596
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getTabsCount" from wrapped API`);
655
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getTabsCount" from wrapped API`);
597
656
  return (await this.seleniumDriver.getAllWindowHandles()).length;
598
657
  }
599
658
  /**
@@ -607,8 +666,9 @@ class Browser {
607
666
  * @return {Promise<void>}
608
667
  */
609
668
  async get(url) {
610
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "get" from wrapped API`);
611
- const getUrl = (0, mappers_1.resolveUrl)(url, this.appBaseUrl);
669
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "get" from wrapped API`);
670
+ await this._enableRequestInterception();
671
+ const getUrl = resolveUrl(url, this.appBaseUrl);
612
672
  return await this.seleniumDriver.get(getUrl);
613
673
  }
614
674
  /**
@@ -623,7 +683,7 @@ class Browser {
623
683
  * @return {Promise<void>}
624
684
  */
625
685
  async setWindowSize(width, height) {
626
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "setWindowSize" from wrapped API, args: `, width, height);
686
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "setWindowSize" from wrapped API, args: `, width, height);
627
687
  return await this.seleniumDriver.manage().window().setRect({
628
688
  width,
629
689
  height,
@@ -640,7 +700,7 @@ class Browser {
640
700
  * @return {Promise<void>}
641
701
  */
642
702
  async sleep(time) {
643
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "sleep" from wrapped API, args: `, time);
703
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "sleep" from wrapped API, args: `, time);
644
704
  await (() => new Promise((resolve) => setTimeout(resolve, time)))();
645
705
  }
646
706
  /**
@@ -651,12 +711,12 @@ class Browser {
651
711
  * const result = await browser.executeScript(() => document.body.offsetHeight);
652
712
  *
653
713
  * @param {!Function} script scripts that needs to be executed
654
- * @param {any|any[]} [args] function args
714
+ * @param {any[]} [args] function args
655
715
  * @returns {Promise<unknown>}
656
716
  */
657
- async executeScript(script, args) {
658
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "executeScript" from wrapped API, args: `, script, args);
659
- const recomposedArgs = await (0, execute_script_1.toNativeEngineExecuteScriptArgs)(args);
717
+ async executeScript(script, args = []) {
718
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "executeScript" from wrapped API, args: `, script, args);
719
+ const recomposedArgs = await toNativeEngineExecuteScriptArgs(args);
660
720
  const res = await this.seleniumDriver.executeScript(script, recomposedArgs);
661
721
  return res;
662
722
  }
@@ -670,7 +730,7 @@ class Browser {
670
730
  * @return {Promise<void>}
671
731
  */
672
732
  async back() {
673
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "back" from wrapped API`);
733
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "back" from wrapped API`);
674
734
  return (await this.seleniumDriver.navigate()).back();
675
735
  }
676
736
  /**
@@ -683,7 +743,7 @@ class Browser {
683
743
  * @return {Promise<void>}
684
744
  */
685
745
  async forward() {
686
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "forward" from wrapped API`);
746
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "forward" from wrapped API`);
687
747
  return (await this.seleniumDriver.navigate()).forward();
688
748
  }
689
749
  /**
@@ -696,7 +756,7 @@ class Browser {
696
756
  * @return {Promise<void>}
697
757
  */
698
758
  async refresh() {
699
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "refresh" from wrapped API`);
759
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "refresh" from wrapped API`);
700
760
  return (await this.seleniumDriver.navigate()).refresh();
701
761
  }
702
762
  /**
@@ -709,7 +769,7 @@ class Browser {
709
769
  * @return {Promise<void>}
710
770
  */
711
771
  async quit() {
712
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "quit" from wrapped API`);
772
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "quit" from wrapped API`);
713
773
  if (this.drivers && this.drivers.length) {
714
774
  const index = this.drivers.findIndex((driver) => driver === this.seleniumDriver);
715
775
  if (index !== -1)
@@ -721,6 +781,7 @@ class Browser {
721
781
  this.cdpPages = [];
722
782
  }
723
783
  this.seleniumDriver = null;
784
+ this._mockInterceptionEnabled = false;
724
785
  }
725
786
  /**
726
787
  * @example
@@ -732,19 +793,20 @@ class Browser {
732
793
  * @return {Promise<void>}
733
794
  */
734
795
  async quitAll() {
735
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "quitAll" from wrapped API`);
736
- const drivers = (0, sat_utils_1.toArray)(this.drivers);
796
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "quitAll" from wrapped API`);
797
+ const drivers = toArray(this.drivers);
737
798
  this.drivers = [];
738
799
  if (this.seleniumDriver) {
739
- await this.seleniumDriver.quit().catch((e) => internals_1.promodLogger.engineLog(e));
800
+ await this.seleniumDriver.quit().catch((e) => promodLogger.engineLog(e));
740
801
  }
741
802
  this.seleniumDriver = null;
803
+ this._mockInterceptionEnabled = false;
742
804
  if (this.cdpPages.length) {
743
- await Promise.all(this.cdpPages.map((page) => page?._wsConnection?.close())).catch((e) => internals_1.promodLogger.engineLog(e));
805
+ await Promise.all(this.cdpPages.map((page) => page?._wsConnection?.close())).catch((e) => promodLogger.engineLog(e));
744
806
  this.cdpPages = [];
745
807
  }
746
808
  for (const driver of drivers) {
747
- await driver.quit().catch((e) => internals_1.promodLogger.engineLog(e));
809
+ await driver.quit().catch((e) => promodLogger.engineLog(e));
748
810
  }
749
811
  }
750
812
  /**
@@ -757,7 +819,7 @@ class Browser {
757
819
  * @return {Promise<void>}
758
820
  */
759
821
  async maximize() {
760
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "maximize" from wrapped API`);
822
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "maximize" from wrapped API`);
761
823
  const { width, height } = (await this.seleniumDriver.executeScript(() => {
762
824
  const { availHeight, availWidth } = window.screen;
763
825
  return { width: availWidth, height: availHeight };
@@ -775,14 +837,13 @@ class Browser {
775
837
  * @return {Promise<TLogLevel[] | string>}
776
838
  */
777
839
  async getBrowserLogs() {
778
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "getBrowserLogs" from wrapped API`);
840
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "getBrowserLogs" from wrapped API`);
779
841
  try {
780
- // @ts-ignore
781
- const manage = await this.seleniumDriver.manage();
842
+ const manage = this.seleniumDriver.manage();
782
843
  return manage.logs().get('browser');
783
844
  }
784
845
  catch (e) {
785
- return 'Comman was failed ' + e.toString();
846
+ return 'Command failed: ' + e.toString();
786
847
  }
787
848
  }
788
849
  /**
@@ -799,11 +860,10 @@ class Browser {
799
860
  * @return {Promise<void>}
800
861
  */
801
862
  async close() {
802
- internals_1.promodLogger.engineLog(`[SWD] Promod client interface calls method "close" from wrapped API`);
863
+ promodLogger.engineLog(`[SWD] Promod client interface calls method "close" from wrapped API`);
803
864
  await this.seleniumDriver.close();
804
865
  }
805
866
  }
806
- exports.Browser = Browser;
807
867
  const browser = Browser.getBrowser();
808
- exports.browser = browser;
868
+ export { browser, Browser };
809
869
  //# sourceMappingURL=swd_client.js.map