@applitools/core 1.4.5 → 1.4.7

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 (90) hide show
  1. package/dist/automation/get-viewport-size.js +1 -1
  2. package/dist/automation/locate.js +1 -1
  3. package/dist/automation/set-viewport-size.js +1 -1
  4. package/dist/automation/utils/take-screenshot.js +2 -2
  5. package/dist/{utils → automation/utils}/to-base-check-settings.js +3 -2
  6. package/dist/{utils → automation/utils}/wait-for-lazy-load.js +2 -2
  7. package/dist/check-and-close.js +7 -5
  8. package/dist/check.js +7 -5
  9. package/dist/classic/abort.js +1 -1
  10. package/dist/classic/check-and-close.js +9 -5
  11. package/dist/classic/check.js +12 -8
  12. package/dist/classic/close.js +1 -1
  13. package/dist/classic/core.js +5 -5
  14. package/dist/classic/extract-text.js +11 -5
  15. package/dist/classic/locate-text.js +2 -0
  16. package/dist/classic/open-eyes.js +16 -14
  17. package/dist/classic/utils/take-dom-capture.js +35 -54
  18. package/dist/close-manager.js +4 -3
  19. package/dist/core.js +5 -5
  20. package/dist/get-typed-eyes.js +1 -4
  21. package/dist/make-ec-client.js +1 -9
  22. package/dist/make-manager.js +25 -27
  23. package/dist/troubleshoot/check-network.js +41 -34
  24. package/dist/troubleshoot/eyes.js +2 -2
  25. package/dist/troubleshoot/ufg.js +3 -2
  26. package/dist/troubleshoot/utils.js +1 -25
  27. package/dist/ufg/abort.js +2 -7
  28. package/dist/ufg/check-and-close.js +50 -46
  29. package/dist/ufg/check.js +31 -24
  30. package/dist/ufg/core.js +5 -5
  31. package/dist/ufg/get-base-eyes.js +2 -0
  32. package/dist/ufg/open-eyes.js +11 -2
  33. package/dist/ufg/utils/extract-broker-url.js +52 -0
  34. package/dist/ufg/utils/generate-safe-selectors.js +10 -5
  35. package/dist/ufg/utils/take-dom-snapshot.js +37 -36
  36. package/dist/ufg/utils/take-dom-snapshots.js +13 -17
  37. package/dist/ufg/utils/take-snapshots.js +3 -3
  38. package/dist/ufg/utils/take-vhses.js +60 -166
  39. package/dist/utils/format-results.js +37 -37
  40. package/package.json +20 -37
  41. package/types/automation/get-viewport-size.d.ts +2 -2
  42. package/types/automation/locate.d.ts +3 -3
  43. package/types/automation/set-viewport-size.d.ts +2 -2
  44. package/types/automation/types.d.ts +7 -7
  45. package/types/automation/utils/take-screenshot.d.ts +6 -6
  46. package/types/automation/utils/to-base-check-settings.d.ts +24 -0
  47. package/types/{utils → automation/utils}/wait-for-lazy-load.d.ts +0 -0
  48. package/types/check-and-close.d.ts +7 -7
  49. package/types/check.d.ts +6 -6
  50. package/types/classic/abort.d.ts +2 -2
  51. package/types/classic/check-and-close.d.ts +8 -4
  52. package/types/classic/check.d.ts +4 -4
  53. package/types/classic/close.d.ts +2 -2
  54. package/types/classic/core.d.ts +1 -1
  55. package/types/classic/extract-text.d.ts +3 -3
  56. package/types/classic/get-base-eyes.d.ts +4 -4
  57. package/types/classic/locate-text.d.ts +3 -3
  58. package/types/classic/open-eyes.d.ts +4 -4
  59. package/types/classic/utils/take-dom-capture.d.ts +3 -3
  60. package/types/close-batch.d.ts +1 -1
  61. package/types/close-manager.d.ts +4 -4
  62. package/types/close.d.ts +3 -3
  63. package/types/delete-test.d.ts +1 -1
  64. package/types/errors/abort-error.d.ts +0 -1
  65. package/types/extract-text.d.ts +3 -3
  66. package/types/get-typed-eyes.d.ts +3 -3
  67. package/types/locate-text.d.ts +3 -3
  68. package/types/locate.d.ts +4 -4
  69. package/types/make-ec-client.d.ts +3 -3
  70. package/types/make-manager.d.ts +8 -8
  71. package/types/open-eyes.d.ts +6 -6
  72. package/types/troubleshoot/check-network.d.ts +3 -3
  73. package/types/troubleshoot/utils.d.ts +0 -2
  74. package/types/types.d.ts +6 -4
  75. package/types/ufg/abort.d.ts +3 -4
  76. package/types/ufg/check-and-close.d.ts +20 -8
  77. package/types/ufg/check.d.ts +4 -4
  78. package/types/ufg/close.d.ts +2 -2
  79. package/types/ufg/get-base-eyes.d.ts +6 -6
  80. package/types/ufg/open-eyes.d.ts +4 -4
  81. package/types/ufg/types.d.ts +2 -2
  82. package/types/ufg/utils/extract-broker-url.d.ts +6 -0
  83. package/types/ufg/utils/generate-safe-selectors.d.ts +9 -5
  84. package/types/ufg/utils/take-dom-snapshot.d.ts +31 -6
  85. package/types/ufg/utils/take-snapshots.d.ts +1 -1
  86. package/types/ufg/utils/take-vhses.d.ts +1 -1
  87. package/types/utils/format-results.d.ts +1 -1
  88. package/dist/utils/extract-broker-url.js +0 -19
  89. package/types/utils/extract-broker-url.d.ts +0 -2
  90. package/types/utils/to-base-check-settings.d.ts +0 -18
@@ -5,7 +5,7 @@ const driver_1 = require("@applitools/driver");
5
5
  function makeGetViewportSize({ spec, logger: defaultLogger, }) {
6
6
  return async function getViewportSize({ target, logger = defaultLogger, }) {
7
7
  logger.log(`Command "getViewportSize" is called`);
8
- const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
8
+ const driver = await (0, driver_1.makeDriver)({ driver: target, spec, logger });
9
9
  return driver.getViewportSize();
10
10
  };
11
11
  }
@@ -9,7 +9,7 @@ function makeLocate({ spec, core, logger: defaultLogger, }) {
9
9
  if (!(0, driver_1.isDriver)(target, spec)) {
10
10
  return core.locate({ target, settings: settings, logger });
11
11
  }
12
- const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
12
+ const driver = await (0, driver_1.makeDriver)({ driver: target, spec, logger });
13
13
  const screenshot = await (0, take_screenshot_1.takeScreenshot)({ driver, settings, logger });
14
14
  const baseTarget = { image: await screenshot.image.toPng() };
15
15
  const results = await core.locate({ target: baseTarget, settings: settings, logger });
@@ -5,7 +5,7 @@ const driver_1 = require("@applitools/driver");
5
5
  function makeSetViewportSize({ spec, logger: defaultLogger, }) {
6
6
  return async function setViewportSize({ target, size, logger = defaultLogger, }) {
7
7
  logger.log(`Command "setViewportSize" is called with size`, size);
8
- const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
8
+ const driver = await (0, driver_1.makeDriver)({ driver: target, spec, logger });
9
9
  return driver.setViewportSize(size);
10
10
  };
11
11
  }
@@ -24,11 +24,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.takeScreenshot = void 0;
27
- const screenshoter_1 = require("@applitools/screenshoter");
28
27
  const utils = __importStar(require("@applitools/utils"));
28
+ const { takeScreenshot: legacyTakeScreenshot } = require('@applitools/screenshoter');
29
29
  async function takeScreenshot({ driver, settings, logger, }) {
30
30
  var _a, _b;
31
- return (0, screenshoter_1.takeScreenshot)({
31
+ return legacyTakeScreenshot({
32
32
  driver,
33
33
  frames: (_a = settings.frames) === null || _a === void 0 ? void 0 : _a.map(frame => {
34
34
  return utils.types.isPlainObject(frame) && utils.types.has(frame, 'frame')
@@ -25,7 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.toBaseCheckSettings = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
- function toBaseCheckSettings({ settings, }) {
28
+ function toBaseCheckSettings({ settings }) {
29
29
  const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
30
30
  const elementReferencesToCalculate = regionTypes.flatMap(regionType => {
31
31
  var _a;
@@ -46,9 +46,10 @@ function toBaseCheckSettings({ settings, }) {
46
46
  delete transformedSettings.region;
47
47
  }
48
48
  regionTypes.forEach(regionType => {
49
+ var _a;
49
50
  if (!transformedSettings[`${regionType}Regions`])
50
51
  return;
51
- transformedSettings[`${regionType}Regions`] = transformedSettings[`${regionType}Regions`].flatMap(reference => {
52
+ transformedSettings[`${regionType}Regions`] = (_a = transformedSettings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(reference => {
52
53
  const { region, ...options } = utils.types.has(reference, 'region') ? reference : { region: reference };
53
54
  if (isRegion(region))
54
55
  return reference;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.waitForLazyLoad = void 0;
4
- const snippets_1 = require("@applitools/snippets");
4
+ const { lazyLoad } = require('@applitools/snippets');
5
5
  async function waitForLazyLoad({ context, settings, logger, }) {
6
6
  var _a, _b, _c, _d, _e;
7
7
  logger.log('lazy loading the page before capturing a screenshot');
8
- await context.executePoll(snippets_1.lazyLoad, {
8
+ await context.executePoll(lazyLoad, {
9
9
  main: [
10
10
  await context.getScrollingElement(),
11
11
  {
@@ -2,16 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeCheckAndClose = void 0;
4
4
  const driver_1 = require("@applitools/driver");
5
- function makeCheckAndClose({ type: defaultType, eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
5
+ function makeCheckAndClose({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
6
6
  return async function checkAndClose({ type = defaultType, target = defaultTarget, settings = {}, config, logger = defaultLogger, } = {}) {
7
7
  settings = { ...config === null || config === void 0 ? void 0 : config.screenshot, ...config === null || config === void 0 ? void 0 : config.check, ...config === null || config === void 0 ? void 0 : config.close, ...settings };
8
8
  const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
9
9
  const typedEyes = await eyes.getTypedEyes({
10
10
  type,
11
- settings: driver && {
12
- type: driver.isNative ? 'native' : 'web',
13
- renderers: settings.renderers,
14
- },
11
+ settings: driver
12
+ ? {
13
+ type: driver.isNative ? 'native' : 'web',
14
+ renderers: settings.renderers,
15
+ }
16
+ : undefined,
15
17
  logger,
16
18
  });
17
19
  const results = await typedEyes.checkAndClose({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
package/dist/check.js CHANGED
@@ -30,7 +30,7 @@ exports.makeCheck = void 0;
30
30
  const driver_1 = require("@applitools/driver");
31
31
  const utils = __importStar(require("@applitools/utils"));
32
32
  const chalk_1 = __importDefault(require("chalk"));
33
- function makeCheck({ type: defaultType, eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
33
+ function makeCheck({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
34
34
  let stepIndex = 0;
35
35
  return async function check({ type = defaultType, target = defaultTarget, settings, config, logger = defaultLogger, } = {}) {
36
36
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
@@ -62,10 +62,12 @@ function makeCheck({ type: defaultType, eyes, target: defaultTarget, spec, logge
62
62
  const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
63
63
  const typedEyes = await eyes.getTypedEyes({
64
64
  type,
65
- settings: driver && {
66
- type: driver.isNative ? 'native' : 'web',
67
- renderers: settings.renderers,
68
- },
65
+ settings: driver
66
+ ? {
67
+ type: driver.isNative ? 'native' : 'web',
68
+ renderers: settings.renderers,
69
+ }
70
+ : undefined,
69
71
  logger,
70
72
  });
71
73
  const results = await typedEyes.check({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeAbort = void 0;
4
4
  const driver_1 = require("@applitools/driver");
5
5
  function makeAbort({ eyes, target, spec, logger: defaultLogger, }) {
6
- return async function ({ settings, logger = defaultLogger, } = {}) {
6
+ return async function abort({ settings, logger = defaultLogger, } = {}) {
7
7
  const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
8
8
  const testMetadata = await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata());
9
9
  const [baseEyes] = await eyes.getBaseEyes();
@@ -27,13 +27,15 @@ exports.makeCheckAndClose = void 0;
27
27
  const driver_1 = require("@applitools/driver");
28
28
  const take_screenshot_1 = require("../automation/utils/take-screenshot");
29
29
  const take_dom_capture_1 = require("./utils/take-dom-capture");
30
- const to_base_check_settings_1 = require("../utils/to-base-check-settings");
31
- const wait_for_lazy_load_1 = require("../utils/wait-for-lazy-load");
30
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
31
+ const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
32
32
  const utils = __importStar(require("@applitools/utils"));
33
33
  function makeCheckAndClose({ eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
34
34
  return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, } = {}) {
35
35
  var _a;
36
36
  logger.log('Command "checkAndClose" is called with settings', settings);
37
+ if (!target)
38
+ throw new Error('Method was called with no target');
37
39
  const baseEyes = await eyes.getBaseEyes({ logger });
38
40
  if (!(0, driver_1.isDriver)(target, spec)) {
39
41
  const baseSettings = settings;
@@ -66,13 +68,15 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, logger: defaultL
66
68
  await screenshot.scrollingElement.setAttribute('data-applitools-scroll', 'true');
67
69
  else
68
70
  await ((_a = screenshot.element) === null || _a === void 0 ? void 0 : _a.setAttribute('data-applitools-scroll', 'true'));
69
- baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => null);
71
+ baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => undefined);
70
72
  }
71
73
  if (settings.pageId) {
72
74
  const scrollingElement = await driver.mainContext.getScrollingElement();
73
- const scrollingOffset = driver.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
75
+ const scrollingOffset = !scrollingElement || driver.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
74
76
  baseTarget.locationInView = utils.geometry.offset(scrollingOffset, screenshot.region);
75
- baseTarget.fullViewSize = scrollingElement ? await scrollingElement.getContentSize() : await driver.getViewportSize();
77
+ baseTarget.fullViewSize = scrollingElement
78
+ ? await scrollingElement.getContentSize()
79
+ : await driver.getViewportSize();
76
80
  }
77
81
  await screenshot.restoreState();
78
82
  return (await Promise.all(baseEyes.map(baseEyes => baseEyes.checkAndClose({ target: baseTarget, settings: baseSettings, logger })))).flat();
@@ -27,13 +27,15 @@ exports.makeCheck = void 0;
27
27
  const driver_1 = require("@applitools/driver");
28
28
  const take_screenshot_1 = require("../automation/utils/take-screenshot");
29
29
  const take_dom_capture_1 = require("./utils/take-dom-capture");
30
- const to_base_check_settings_1 = require("../utils/to-base-check-settings");
31
- const wait_for_lazy_load_1 = require("../utils/wait-for-lazy-load");
30
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
31
+ const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
32
32
  const utils = __importStar(require("@applitools/utils"));
33
33
  function makeCheck({ eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
34
34
  return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, } = {}) {
35
- var _a, _b;
35
+ var _a, _b, _c;
36
36
  logger.log('Command "check" is called with settings', settings);
37
+ if (!target)
38
+ throw new Error('Method was called with no target');
37
39
  const baseEyes = await eyes.getBaseEyes();
38
40
  if (!(0, driver_1.isDriver)(target, spec)) {
39
41
  return (await Promise.all(baseEyes.map(baseEyes => baseEyes.check({ target, settings: settings, logger })))).flat();
@@ -52,7 +54,7 @@ function makeCheck({ eyes, target: defaultTarget, spec, logger: defaultLogger, }
52
54
  }
53
55
  // TODO it actually could be different per eyes
54
56
  const shouldRunOnce = true;
55
- const finishAt = Date.now() + settings.retryTimeout;
57
+ const finishAt = Date.now() + ((_b = settings.retryTimeout) !== null && _b !== void 0 ? _b : 0);
56
58
  let baseTarget;
57
59
  let baseSettings;
58
60
  let results;
@@ -75,14 +77,16 @@ function makeCheck({ eyes, target: defaultTarget, spec, logger: defaultLogger, }
75
77
  if (settings.fully)
76
78
  await screenshot.scrollingElement.setAttribute('data-applitools-scroll', 'true');
77
79
  else
78
- await ((_b = screenshot.element) === null || _b === void 0 ? void 0 : _b.setAttribute('data-applitools-scroll', 'true'));
79
- baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => null);
80
+ await ((_c = screenshot.element) === null || _c === void 0 ? void 0 : _c.setAttribute('data-applitools-scroll', 'true'));
81
+ baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => undefined);
80
82
  }
81
83
  if (settings.pageId) {
82
84
  const scrollingElement = await driver.mainContext.getScrollingElement();
83
- const scrollingOffset = driver.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
85
+ const scrollingOffset = !scrollingElement || driver.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
84
86
  baseTarget.locationInView = utils.geometry.offset(scrollingOffset, screenshot.region);
85
- baseTarget.fullViewSize = scrollingElement ? await scrollingElement.getContentSize() : await driver.getViewportSize();
87
+ baseTarget.fullViewSize = scrollingElement
88
+ ? await scrollingElement.getContentSize()
89
+ : await driver.getViewportSize();
86
90
  }
87
91
  await screenshot.restoreState();
88
92
  baseSettings.ignoreMismatch = !shouldRunOnce;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeClose = void 0;
4
4
  const driver_1 = require("@applitools/driver");
5
5
  function makeClose({ eyes, target, spec, logger: defaultLogger, }) {
6
- return async function ({ settings, logger = defaultLogger, } = {}) {
6
+ return async function close({ settings, logger = defaultLogger, } = {}) {
7
7
  const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
8
8
  const testMetadata = await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata());
9
9
  const baseEyes = await eyes.getBaseEyes();
@@ -31,16 +31,16 @@ const set_viewport_size_1 = require("../automation/set-viewport-size");
31
31
  const locate_1 = require("../automation/locate");
32
32
  const open_eyes_1 = require("./open-eyes");
33
33
  const utils = __importStar(require("@applitools/utils"));
34
- function makeCore({ spec, core, agentId = 'core-classic', cwd = process.cwd(), logger, }) {
34
+ function makeCore({ spec, core, agentId = 'core-classic', cwd = process.cwd(), logger: defaultLogger, }) {
35
35
  var _a;
36
- logger = (_a = logger === null || logger === void 0 ? void 0 : logger.extend({ label: 'core-classic' })) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ label: 'core-classic' });
36
+ const logger = (_a = defaultLogger === null || defaultLogger === void 0 ? void 0 : defaultLogger.extend({ label: 'core-classic' })) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ label: 'core-classic' });
37
37
  logger.log(`Core classic is initialized ${core ? 'with' : 'without'} custom base core`);
38
38
  core !== null && core !== void 0 ? core : (core = (0, core_base_1.makeCore)({ agentId, cwd, logger }));
39
39
  return utils.general.extend(core, {
40
40
  type: 'classic',
41
- isDriver: spec === null || spec === void 0 ? void 0 : spec.isDriver,
42
- isElement: spec === null || spec === void 0 ? void 0 : spec.isElement,
43
- isSelector: spec === null || spec === void 0 ? void 0 : spec.isSelector,
41
+ isDriver: spec && spec.isDriver,
42
+ isElement: spec && spec.isElement,
43
+ isSelector: spec && spec.isSelector,
44
44
  getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
45
45
  setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
46
46
  locate: (0, locate_1.makeLocate)({ spec, core, logger }),
@@ -28,10 +28,12 @@ const driver_1 = require("@applitools/driver");
28
28
  const take_screenshot_1 = require("../automation/utils/take-screenshot");
29
29
  const take_dom_capture_1 = require("./utils/take-dom-capture");
30
30
  const utils = __importStar(require("@applitools/utils"));
31
- const snippets_1 = require("@applitools/snippets");
31
+ const { getText } = require('@applitools/snippets');
32
32
  function makeExtractText({ eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
33
33
  return async function extractText({ target = defaultTarget, settings, logger = defaultLogger, }) {
34
34
  logger.log('Command "extractText" is called with settings', settings);
35
+ if (!target)
36
+ throw new Error('Method was called with no target');
35
37
  const [baseEyes] = await eyes.getBaseEyes();
36
38
  if (!(0, driver_1.isDriver)(target, spec)) {
37
39
  return baseEyes.extractText({ target, settings: settings, logger });
@@ -42,11 +44,11 @@ function makeExtractText({ eyes, target: defaultTarget, spec, logger: defaultLog
42
44
  var _a;
43
45
  const steps = await prev;
44
46
  const screenshot = await (0, take_screenshot_1.takeScreenshot)({ driver, settings, logger });
45
- if (!settings.hint && !utils.types.has(settings.region, ['x', 'y', 'width', 'height'])) {
47
+ if (!settings.hint && (0, driver_1.isElementReference)(settings.region, spec)) {
46
48
  const element = await driver.currentContext.element(settings.region);
47
49
  if (!element)
48
50
  throw new Error(`Unable to find element using provided selector`);
49
- settings.hint = await driver.currentContext.execute(snippets_1.getText, [element]);
51
+ settings.hint = await driver.currentContext.execute(getText, [element]);
50
52
  if (settings.hint)
51
53
  settings.hint = settings.hint.replace(/[.\\+]/g, '\\$&');
52
54
  }
@@ -60,11 +62,15 @@ function makeExtractText({ eyes, target: defaultTarget, spec, logger: defaultLog
60
62
  await screenshot.scrollingElement.setAttribute('data-applitools-scroll', 'true');
61
63
  else
62
64
  await ((_a = screenshot.element) === null || _a === void 0 ? void 0 : _a.setAttribute('data-applitools-scroll', 'true'));
63
- baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => null);
65
+ baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, logger }).catch(() => undefined);
64
66
  }
65
67
  delete settings.region;
66
68
  delete settings.normalization;
67
- const results = await baseEyes.extractText({ target: baseTarget, settings: settings, logger });
69
+ const results = await baseEyes.extractText({
70
+ target: baseTarget,
71
+ settings: settings,
72
+ logger,
73
+ });
68
74
  steps.push(results);
69
75
  return steps;
70
76
  }, Promise.resolve([]));
@@ -31,6 +31,8 @@ const utils = __importStar(require("@applitools/utils"));
31
31
  function makeLocateText({ eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
32
32
  return async function locateText({ target = defaultTarget, settings, logger = defaultLogger, }) {
33
33
  logger.log('Command "locateText" is called with settings', settings);
34
+ if (!target)
35
+ throw new Error('Method was called with no target');
34
36
  const [baseEyes] = await eyes.getBaseEyes();
35
37
  if (!(0, driver_1.isDriver)(target, spec)) {
36
38
  return baseEyes.locateText({ target, settings: settings, logger });
@@ -47,27 +47,29 @@ function makeOpenEyes({ core, spec, logger: defaultLogger, }) {
47
47
  }
48
48
  if (driver.isWeb) {
49
49
  (_b = (_f = settings.environment).userAgent) !== null && _b !== void 0 ? _b : (_f.userAgent = driver.userAgent);
50
- if (driver.isChromium &&
51
- ((driver.isWindows && Number.parseInt(driver.browserVersion) >= 107) ||
52
- (driver.isMac && Number.parseInt(driver.browserVersion) >= 90))) {
53
- settings.environment.os = `${driver.platformName} ${(_c = driver.platformVersion) !== null && _c !== void 0 ? _c : ''}`.trim();
54
- }
55
50
  }
56
51
  if (!settings.environment.deviceName && driver.deviceName) {
57
52
  settings.environment.deviceName = driver.deviceName;
58
53
  }
59
- if (!settings.environment.os && driver.isNative && driver.platformName) {
60
- settings.environment.os = driver.platformName;
61
- if (!settings.keepPlatformNameAsIs) {
62
- if ((_d = settings.environment.os) === null || _d === void 0 ? void 0 : _d.startsWith('android')) {
63
- settings.environment.os = `Android${settings.environment.os.slice(7)}`;
54
+ if (!settings.environment.os) {
55
+ if (driver.isNative && driver.platformName) {
56
+ settings.environment.os = driver.platformName;
57
+ if (!settings.keepPlatformNameAsIs) {
58
+ if ((_c = settings.environment.os) === null || _c === void 0 ? void 0 : _c.startsWith('android')) {
59
+ settings.environment.os = `Android${settings.environment.os.slice(7)}`;
60
+ }
61
+ if ((_d = settings.environment.os) === null || _d === void 0 ? void 0 : _d.startsWith('ios')) {
62
+ settings.environment.os = `iOS${settings.environment.os.slice(3)}`;
63
+ }
64
64
  }
65
- if ((_e = settings.environment.os) === null || _e === void 0 ? void 0 : _e.startsWith('ios')) {
66
- settings.environment.os = `iOS${settings.environment.os.slice(3)}`;
65
+ if (driver.platformVersion) {
66
+ settings.environment.os += ` ${driver.platformVersion}`;
67
67
  }
68
68
  }
69
- if (driver.platformVersion) {
70
- settings.environment.os += ` ${driver.platformVersion}`;
69
+ else if (driver.isChromium &&
70
+ ((driver.isWindows && Number.parseInt(driver.browserVersion) >= 107) ||
71
+ (driver.isMac && Number.parseInt(driver.browserVersion) >= 90))) {
72
+ settings.environment.os = `${driver.platformName} ${(_e = driver.platformVersion) !== null && _e !== void 0 ? _e : ''}`.trim();
71
73
  }
72
74
  }
73
75
  if (!settings.environment.viewportSize || driver.isMobile) {
@@ -1,25 +1,21 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.takeDomCapture = void 0;
7
- const dom_capture_1 = require("@applitools/dom-capture");
8
- const req_1 = __importDefault(require("@applitools/req"));
4
+ const req_1 = require("@applitools/req");
5
+ const { getCaptureDomPoll, getPollResult, getCaptureDomPollForIE, getPollResultForIE, } = require('@applitools/dom-capture');
9
6
  async function takeDomCapture({ driver, settings, logger, }) {
10
- var _a;
7
+ var _a, _b, _c;
11
8
  const isLegacyBrowser = driver.isIE || driver.isEdgeLegacy;
12
- const { canExecuteOnlyFunctionScripts } = driver.features;
13
9
  const arg = {
14
10
  chunkByteLength: (_a = settings === null || settings === void 0 ? void 0 : settings.chunkByteLength) !== null && _a !== void 0 ? _a : (Number(process.env.APPLITOOLS_SCRIPT_RESULT_MAX_BYTE_LENGTH) || (driver.isIOS ? 100000 : 250 * 1024 * 1024)),
15
11
  };
16
12
  const scripts = {
17
- main: canExecuteOnlyFunctionScripts
13
+ main: ((_b = driver.features) === null || _b === void 0 ? void 0 : _b.canExecuteOnlyFunctionScripts)
18
14
  ? require('@applitools/dom-capture').captureDomPoll
19
- : `return (${isLegacyBrowser ? await (0, dom_capture_1.getCaptureDomPollForIE)() : await (0, dom_capture_1.getCaptureDomPoll)()}).apply(null, arguments);`,
20
- poll: canExecuteOnlyFunctionScripts
15
+ : `return (${isLegacyBrowser ? await getCaptureDomPollForIE() : await getCaptureDomPoll()}).apply(null, arguments);`,
16
+ poll: ((_c = driver.features) === null || _c === void 0 ? void 0 : _c.canExecuteOnlyFunctionScripts)
21
17
  ? require('@applitools/dom-capture').pollResult
22
- : `return (${isLegacyBrowser ? await (0, dom_capture_1.getPollResultForIE)() : await (0, dom_capture_1.getPollResult)()}).apply(null, arguments);`,
18
+ : `return (${isLegacyBrowser ? await getPollResultForIE() : await getPollResult()}).apply(null, arguments);`,
23
19
  };
24
20
  const url = await driver.getUrl();
25
21
  const dom = await captureContextDom(driver.mainContext);
@@ -34,17 +30,17 @@ async function takeDomCapture({ driver, settings, logger, }) {
34
30
  pollTimeout: (_b = settings === null || settings === void 0 ? void 0 : settings.pollTimeout) !== null && _b !== void 0 ? _b : 200,
35
31
  });
36
32
  if (!capture)
37
- return {};
33
+ return '';
38
34
  const raws = capture.split('\n');
39
35
  const tokens = JSON.parse(raws[0]);
40
36
  const cssEndIndex = raws.indexOf(tokens.separator);
41
37
  const frameEndIndex = raws.indexOf(tokens.separator, cssEndIndex + 1);
42
38
  let dom = raws[frameEndIndex + 1];
43
39
  const cssResources = await Promise.all(raws.slice(1, cssEndIndex).reduce((cssResources, href) => {
44
- return href ? cssResources.concat(fetchCss(new URL(href, url).href)) : cssResources;
40
+ return href ? cssResources.concat(fetchCssResource(new URL(href, url).href)) : cssResources;
45
41
  }, []));
46
- for (const { href, css } of cssResources) {
47
- dom = dom.replace(`${tokens.cssStartToken}${href}${tokens.cssEndToken}`, css);
42
+ for (const { url, css } of cssResources) {
43
+ dom = dom.replace(`${tokens.cssStartToken}${url}${tokens.cssEndToken}`, css);
48
44
  }
49
45
  const framePaths = raws.slice(cssEndIndex + 1, frameEndIndex);
50
46
  for (const xpaths of framePaths) {
@@ -60,74 +56,59 @@ async function takeDomCapture({ driver, settings, logger, }) {
60
56
  }
61
57
  catch (ignored) {
62
58
  logger.log('Switching to frame failed');
63
- contextDom = {};
59
+ contextDom = '';
64
60
  }
65
61
  dom = dom.replace(`${tokens.iframeStartToken}${xpaths}${tokens.iframeEndToken}`, contextDom);
66
62
  }
67
63
  return dom;
68
64
  }
69
- async function fetchCss(href) {
65
+ async function fetchCssResource(url) {
66
+ logger.log(`Request to download css will be sent to the address "[GET]${url}"`);
70
67
  try {
71
- logger.log(`Given URL to download: ${href}`);
72
- const response = await (0, req_1.default)(href, {
68
+ const response = await (0, req_1.req)(url, {
73
69
  retry: {
74
70
  limit: 1,
75
- validate: ({ response, error }) => Boolean(error) || response.status >= 400,
71
+ validate: ({ response, error }) => Boolean(error) || !response.ok,
76
72
  },
77
- fetch: settings.fetch,
73
+ fetch: settings === null || settings === void 0 ? void 0 : settings.fetch,
78
74
  });
79
- if (response.status < 400) {
80
- const css = await response.text();
81
- logger.log(`downloading CSS in length of ${css.length} chars took`);
82
- return { href, css: cleanStringForJSON(css) };
83
- }
75
+ logger.log(`Request to download css that was sent to the address "[GET]${url}" respond with ${response.statusText}(${response.status})`, response.ok ? `and css of length ${(await response.clone().text()).length} chars` : '');
76
+ return { url, css: response.ok ? encodeJSON(await response.text()) : '' };
84
77
  }
85
- catch (err) {
86
- return { href, css: '' };
78
+ catch (error) {
79
+ logger.error(`Request to download css that was sent to the address "[GET]${url}" failed with error`, error);
80
+ return { url, css: '' };
87
81
  }
88
82
  }
89
- function cleanStringForJSON(str) {
90
- if (str == null || str.length === 0) {
83
+ function encodeJSON(str) {
84
+ if (!str)
91
85
  return '';
92
- }
93
- let sb = '';
94
- let char = '\0';
95
- let tmp;
96
- for (let i = 0, l = str.length; i < l; i += 1) {
97
- char = str[i];
86
+ return Array.from(str).reduce((result, char) => {
98
87
  switch (char) {
99
88
  case '\\':
100
89
  case '"':
101
90
  case '/':
102
- sb += '\\' + char; // eslint-disable-line
103
- break;
91
+ return result + '\\' + char;
104
92
  case '\b':
105
- sb += '\\b';
106
- break;
93
+ return result + '\\b';
107
94
  case '\t':
108
- sb += '\\t';
109
- break;
95
+ return result + '\\t';
110
96
  case '\n':
111
- sb += '\\n';
112
- break;
97
+ return result + '\\n';
113
98
  case '\f':
114
- sb += '\\f';
115
- break;
99
+ return result + '\\f';
116
100
  case '\r':
117
- sb += '\\r';
118
- break;
101
+ return result + '\\r';
119
102
  default:
120
103
  if (char < ' ') {
121
- tmp = '000' + char.charCodeAt(0).toString(16); // eslint-disable-line
122
- sb += '\\u' + tmp.substring(tmp.length - 4); // eslint-disable-line
104
+ const tmp = '000' + char.charCodeAt(0).toString(16);
105
+ return result + '\\u' + tmp.substring(tmp.length - 4);
123
106
  }
124
107
  else {
125
- sb += char;
108
+ return result + char;
126
109
  }
127
- break;
128
110
  }
129
- }
130
- return sb;
111
+ }, '');
131
112
  }
132
113
  }
133
114
  exports.takeDomCapture = takeDomCapture;
@@ -5,6 +5,7 @@ const test_error_1 = require("./errors/test-error");
5
5
  const internal_error_1 = require("./errors/internal-error");
6
6
  function makeCloseManager({ core, storage, logger: defaultLogger, }) {
7
7
  return async function closeManager({ settings, logger = defaultLogger, } = {}) {
8
+ var _a, _b, _c;
8
9
  const containers = await Promise.all(storage.map(async ({ eyes, promise }) => {
9
10
  if (!promise)
10
11
  logger.warn(`The eyes with id "${eyes.test.userTestId}" are going to be auto aborted`);
@@ -54,9 +55,9 @@ function makeCloseManager({ core, storage, logger: defaultLogger, }) {
54
55
  summary.passed += 1;
55
56
  else if (container.result.status === 'Unresolved')
56
57
  summary.unresolved += 1;
57
- summary.matches += container.result.matches;
58
- summary.missing += container.result.missing;
59
- summary.mismatches += container.result.mismatches;
58
+ summary.matches += (_a = container.result.matches) !== null && _a !== void 0 ? _a : 0;
59
+ summary.missing += (_b = container.result.missing) !== null && _b !== void 0 ? _b : 0;
60
+ summary.mismatches += (_c = container.result.mismatches) !== null && _c !== void 0 ? _c : 0;
60
61
  }
61
62
  }
62
63
  return summary;
package/dist/core.js CHANGED
@@ -41,11 +41,11 @@ function makeCore({ spec, concurrency, core, agentId = 'core', cwd = process.cwd
41
41
  logger.log(`Core is initialized ${core ? 'with' : 'without'} custom base core`);
42
42
  core !== null && core !== void 0 ? core : (core = (0, core_base_1.makeCore)({ agentId, cwd, logger }));
43
43
  return utils.general.extend(core, {
44
- isDriver: spec === null || spec === void 0 ? void 0 : spec.isDriver,
45
- isElement: spec === null || spec === void 0 ? void 0 : spec.isElement,
46
- isSelector: spec === null || spec === void 0 ? void 0 : spec.isSelector,
47
- getViewportSize: (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
48
- setViewportSize: (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
44
+ isDriver: spec && spec.isDriver,
45
+ isElement: spec && spec.isElement,
46
+ isSelector: spec && spec.isSelector,
47
+ getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
48
+ setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
49
49
  locate: (0, locate_1.makeLocate)({ spec, core, logger }),
50
50
  openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, concurrency, logger }),
51
51
  makeManager: (0, make_manager_1.makeMakeManager)({ spec, concurrency, agentId, logger }),
@@ -5,10 +5,7 @@ function makeGetTypedEyes({ type: defaultType, settings: defaultSettings, target
5
5
  let eyes;
6
6
  return async function getTypesEyes({ type = defaultType, settings, logger = defaultLogger, } = {}) {
7
7
  if (!eyes) {
8
- eyes =
9
- type === 'ufg'
10
- ? await cores.ufg.openEyes({ target, settings: defaultSettings, logger })
11
- : await cores.classic.openEyes({ target, settings: defaultSettings, logger });
8
+ eyes = await cores[type].openEyes({ target, settings: defaultSettings, logger });
12
9
  return eyes;
13
10
  }
14
11
  else if (eyes.type === type) {
@@ -25,18 +25,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeMakeECClient = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
- function makeMakeECClient({ core, logger: defaultLogger }) {
28
+ function makeMakeECClient({ logger: defaultLogger }) {
29
29
  return utils.general.cachify(makeECClient, ([options]) => options === null || options === void 0 ? void 0 : options.settings);
30
30
  async function makeECClient({ settings, logger = defaultLogger, } = {}) {
31
- var _a, _b, _c, _d, _e, _f, _g, _h;
32
- var _j, _k;
33
31
  const { makeECClient } = require('@applitools/ec-client');
34
- const serverUrl = (_c = (_b = (_a = settings.capabilities.eyesServerUrl) !== null && _a !== void 0 ? _a : utils.general.getEnvValue('EYES_SERVER_URL')) !== null && _b !== void 0 ? _b : utils.general.getEnvValue('SERVER_URL')) !== null && _c !== void 0 ? _c : 'https://eyesapi.applitools.com';
35
- const apiKey = ((_d = (_j = settings.capabilities).apiKey) !== null && _d !== void 0 ? _d : (_j.apiKey = utils.general.getEnvValue('API_KEY')));
36
- const proxy = (_e = settings.proxy) !== null && _e !== void 0 ? _e : (utils.general.getEnvValue('PROXY_URL') && { url: utils.general.getEnvValue('PROXY_URL') });
37
- const account = await core.getAccountInfo({ settings: { serverUrl, apiKey, proxy }, logger });
38
- (_f = settings.capabilities) !== null && _f !== void 0 ? _f : (settings.capabilities = {});
39
- (_g = (_k = settings.capabilities).useSelfHealing) !== null && _g !== void 0 ? _g : (_k.useSelfHealing = (_h = utils.general.getEnvValue('USE_SELF_HEALING', 'boolean')) !== null && _h !== void 0 ? _h : account.selfHealingEnabled);
40
32
  const client = await makeECClient({ settings, logger });
41
33
  return client;
42
34
  }