@applitools/core 4.36.0 → 4.37.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,89 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.37.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.36.0...js/core@4.37.0) (2025-04-17)
4
+
5
+
6
+ ### Features
7
+
8
+ * height layout breakpoints ([#2801](https://github.com/Applitools-Dev/sdk/issues/2801)) ([819e241](https://github.com/Applitools-Dev/sdk/commit/819e2418f1fd93220a07dfbcf1157ffcf4995dd7))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * @applitools/dom-snapshot bumped to 4.11.18
14
+ #### Bug Fixes
15
+
16
+ * simplify sandbox creation and ensure cleanup after execution ([#2869](https://github.com/Applitools-Dev/sdk/issues/2869)) ([72c5e01](https://github.com/Applitools-Dev/sdk/commit/72c5e01307f6abd83fab365a7e235124caae0694))
17
+
18
+
19
+
20
+ * @applitools/snippets bumped to 2.6.5
21
+ #### Performance Improvements
22
+
23
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
24
+ * @applitools/driver bumped to 1.21.1
25
+ #### Bug Fixes
26
+
27
+ * executePoll error logging FLD-2870 ([#2890](https://github.com/Applitools-Dev/sdk/issues/2890)) ([a8ff720](https://github.com/Applitools-Dev/sdk/commit/a8ff720efafacabe2023282748a6d8a0f1b3ff73))
28
+
29
+
30
+
31
+ * @applitools/spec-driver-webdriver bumped to 1.2.2
32
+ #### Performance Improvements
33
+
34
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
35
+
36
+
37
+
38
+ * @applitools/spec-driver-selenium bumped to 1.5.98
39
+ #### Performance Improvements
40
+
41
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
42
+
43
+
44
+
45
+ * @applitools/spec-driver-puppeteer bumped to 1.4.27
46
+ #### Performance Improvements
47
+
48
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
49
+
50
+
51
+
52
+ * @applitools/screenshoter bumped to 3.11.1
53
+ #### Performance Improvements
54
+
55
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
56
+
57
+
58
+
59
+ * @applitools/nml-client bumped to 1.9.1
60
+ #### Performance Improvements
61
+
62
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
63
+
64
+
65
+
66
+ * @applitools/tunnel-client bumped to 1.6.5
67
+ #### Bug Fixes
68
+
69
+ * enhance error messages in tunnel client ([cab26e6](https://github.com/Applitools-Dev/sdk/commit/cab26e6e3d56fa3cbabaa1a9c68de13046b8f57e))
70
+ * @applitools/ufg-client bumped to 1.16.9
71
+ #### Bug Fixes
72
+
73
+ * basic auth protected resources | FLD-2761 | FMRI-120 ([#2444](https://github.com/Applitools-Dev/sdk/issues/2444)) ([b48cf49](https://github.com/Applitools-Dev/sdk/commit/b48cf49dec50bbf1ed2ba111608a48cf09962565))
74
+
75
+
76
+ #### Performance Improvements
77
+
78
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
79
+ * @applitools/ec-client bumped to 1.10.9
80
+ #### Performance Improvements
81
+
82
+ * cachify http agent ([#2466](https://github.com/Applitools-Dev/sdk/issues/2466)) ([bc2f4a1](https://github.com/Applitools-Dev/sdk/commit/bc2f4a1fae3c379f061c9199edf4c5257769fb44))
83
+
84
+
85
+
86
+
3
87
  ## [4.36.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.35.1...js/core@4.36.0) (2025-04-13)
4
88
 
5
89
 
@@ -38,7 +38,7 @@ async function extractMobileElementsIntoCheckSettings({ settings, driver, logger
38
38
  logger = logger.extend({ tags: [`extract-mobile-elements-${utils.general.shortid()}`] });
39
39
  const environment = await driver.getEnvironment();
40
40
  if (settings.region) {
41
- logger.log('extract element form region', settings.region);
41
+ logger.log('extract element from region', settings.region);
42
42
  const region = await driver.element(settings.region).catch(error => logger.log(error));
43
43
  if (!region) {
44
44
  throw new Error('region not found');
@@ -63,7 +63,7 @@ async function extractMobileElementsIntoCheckSettings({ settings, driver, logger
63
63
  if (!settings[`${regionType}Regions`])
64
64
  return obj;
65
65
  obj[`${regionType}Regions`] = (await Promise.all((_b = (_a = settings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(async (reference) => {
66
- logger.log('extract element form region', reference);
66
+ logger.log('extract element from region', reference);
67
67
  const { region } = utils.types.has(reference, 'region') ? reference : { region: reference };
68
68
  const handleRegion = new Set();
69
69
  const elements = await driver.elements(region).catch(error => logger.log(error));
@@ -355,7 +355,7 @@ async function takeNMLScreenshot({ driver, settings, environments, logger, eyes,
355
355
  aggregateCalculatedRegions.push({ regions, selector: reference });
356
356
  }
357
357
  else {
358
- logger.log(`Regions "${reference}" was not found in the screenshot`);
358
+ logger.log(`Regions "${JSON.stringify(reference)}" was not found in the screenshot`);
359
359
  }
360
360
  });
361
361
  if ((_a = baseTarget.dom) === null || _a === void 0 ? void 0 : _a.error) {
package/dist/ufg/check.js CHANGED
@@ -174,6 +174,12 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
174
174
  },
175
175
  });
176
176
  }
177
+ try {
178
+ logInvalidSettings(logger, settings);
179
+ }
180
+ catch (err) {
181
+ logger.log('Failed to log invalid check settings', err);
182
+ }
177
183
  await baseEyes.check({
178
184
  target: { ...baseTarget, isTransformed: true },
179
185
  settings: baseSettings,
@@ -204,3 +210,14 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
204
210
  };
205
211
  }
206
212
  exports.makeCheck = makeCheck;
213
+ function logInvalidSettings(logger, settings) {
214
+ const invalidKeys = ['overlap', 'scrollRootElement', 'stitchMode'];
215
+ if (!settings)
216
+ return;
217
+ const invalidEntries = Object.entries(settings)
218
+ .filter(([key]) => invalidKeys.includes(key))
219
+ .filter(([_, value]) => value !== undefined);
220
+ if (invalidEntries.length > 0) {
221
+ logger.warn('Warning - Invalid keys in check settings (will be ignored):', { settings, invalidEntries });
222
+ }
223
+ }
@@ -54,36 +54,50 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
54
54
  return Array(settings.environments.length).fill(snapshot);
55
55
  }
56
56
  const isStrictBreakpoints = utils.types.isArray((_b = settings.layoutBreakpoints) === null || _b === void 0 ? void 0 : _b.breakpoints);
57
- const requiredWidths = await settings.environments.reduce(async (prev, environment, index) => {
58
- const { name, width } = (await extractEnvironmentInfo(environment));
59
- const requiredWidths = await prev;
60
- const requiredWidth = isStrictBreakpoints
61
- ? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints.breakpoints, value: width })
62
- : width;
63
- let environments = requiredWidths.get(requiredWidth);
57
+ const initialViewportSize = await driver.getViewportSize();
58
+ const requiredSizes = await settings.environments.reduce(async (prev, environment, index) => {
59
+ var _a;
60
+ const { name, width, height } = (await extractEnvironmentInfo(environment));
61
+ const requiredSizes = await prev;
62
+ let requiredSize;
63
+ if ((_a = settings.layoutBreakpoints) === null || _a === void 0 ? void 0 : _a.heightBreakpoints) {
64
+ const requiredWidth = settings.layoutBreakpoints.breakpoints ? width : initialViewportSize.width;
65
+ requiredSize = `${requiredWidth},${height}`;
66
+ }
67
+ else {
68
+ const requiredWidth = isStrictBreakpoints
69
+ ? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints.breakpoints, value: width })
70
+ : width;
71
+ requiredSize = `${requiredWidth},${initialViewportSize.height}`;
72
+ }
73
+ let environments = requiredSizes.get(requiredSize);
64
74
  if (!environments)
65
- requiredWidths.set(requiredWidth, (environments = []));
66
- environments.push({ name, width, index });
67
- return requiredWidths;
75
+ requiredSizes.set(requiredSize, (environments = []));
76
+ environments.push({ name, width, height, index });
77
+ return requiredSizes;
68
78
  }, Promise.resolve(new Map()));
69
79
  const smallestBreakpoint = Math.min(...(isStrictBreakpoints ? settings.layoutBreakpoints.breakpoints : []));
70
- if (isStrictBreakpoints && requiredWidths.has(smallestBreakpoint - 1)) {
80
+ const smallestSize = `${smallestBreakpoint - 1},${initialViewportSize.height}`;
81
+ if (isStrictBreakpoints && requiredSizes.has(smallestSize)) {
71
82
  const message = lang.requestedEnvironmentSmallerThenBreakpointWarning({
72
83
  breakpoint: smallestBreakpoint,
73
- browsers: requiredWidths.get(smallestBreakpoint - 1),
84
+ browsers: requiredSizes.get(smallestSize),
74
85
  });
75
86
  logger.console.log(chalk_1.default.yellow(message));
76
87
  }
77
- logger.log(`Taking multiple dom snapshots for the breakpoints`, settings.layoutBreakpoints);
78
- const initialViewportSize = await driver.getViewportSize();
88
+ logger.log(`Taking multiple dom snapshots for the breakpoints`, isStrictBreakpoints ? settings.layoutBreakpoints : requiredSizes);
79
89
  const entries = [];
80
- const initialsBrowsers = requiredWidths.get(initialViewportSize.width);
90
+ const initialSize = `${initialViewportSize.width},${initialViewportSize.height}`;
91
+ const initialsBrowsers = requiredSizes.get(initialSize);
81
92
  if (initialsBrowsers) {
82
93
  logger.log(`The first dom snapshot is going to be taking for initial viewport size`, initialViewportSize);
83
- requiredWidths.delete(initialViewportSize.width);
94
+ requiredSizes.delete(initialSize);
84
95
  entries.push({ browsers: initialsBrowsers });
85
96
  }
86
- requiredWidths.forEach((browsers, requiredWidth) => entries.push({ viewportSize: { width: requiredWidth, height: initialViewportSize.height }, browsers }));
97
+ requiredSizes.forEach((browsers, requiredSize) => {
98
+ const [requiredWidth, requiredHeight] = requiredSize.split(',').map(Number);
99
+ entries.push({ viewportSize: { width: requiredWidth, height: requiredHeight }, browsers });
100
+ });
87
101
  logger.log(`All entries to take dom snapshots for`, entries);
88
102
  // making safe selectors before any resize in order to make sure fallback selectors are created
89
103
  await (0, generate_safe_selectors_1.generateSafeSelectors)({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.36.0",
3
+ "version": "4.37.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -77,17 +77,17 @@
77
77
  "dependencies": {
78
78
  "@applitools/core-base": "1.24.0",
79
79
  "@applitools/dom-capture": "11.5.5",
80
- "@applitools/dom-snapshot": "4.11.17",
81
- "@applitools/driver": "1.21.0",
82
- "@applitools/ec-client": "1.10.8",
80
+ "@applitools/dom-snapshot": "4.11.18",
81
+ "@applitools/driver": "1.21.1",
82
+ "@applitools/ec-client": "1.10.9",
83
83
  "@applitools/logger": "2.1.2",
84
- "@applitools/nml-client": "1.9.0",
84
+ "@applitools/nml-client": "1.9.1",
85
85
  "@applitools/req": "1.7.10",
86
- "@applitools/screenshoter": "3.11.0",
87
- "@applitools/snippets": "2.6.4",
86
+ "@applitools/screenshoter": "3.11.1",
87
+ "@applitools/snippets": "2.6.5",
88
88
  "@applitools/socket": "1.2.3",
89
- "@applitools/spec-driver-webdriver": "1.2.1",
90
- "@applitools/ufg-client": "1.16.8",
89
+ "@applitools/spec-driver-webdriver": "1.2.2",
90
+ "@applitools/ufg-client": "1.16.9",
91
91
  "@applitools/utils": "1.8.0",
92
92
  "@types/ws": "8.5.5",
93
93
  "abort-controller": "3.0.0",
@@ -102,11 +102,11 @@
102
102
  "devDependencies": {
103
103
  "@applitools/bongo": "^5.10.0",
104
104
  "@applitools/sea": "^1.0.0",
105
- "@applitools/spec-driver-puppeteer": "^1.4.26",
106
- "@applitools/spec-driver-selenium": "^1.5.97",
105
+ "@applitools/spec-driver-puppeteer": "^1.4.27",
106
+ "@applitools/spec-driver-selenium": "^1.5.98",
107
107
  "@applitools/test-server": "^1.2.2",
108
108
  "@applitools/test-utils": "^1.5.17",
109
- "@applitools/tunnel-client": "^1.6.4",
109
+ "@applitools/tunnel-client": "^1.6.5",
110
110
  "@types/mocha": "^10.0.7",
111
111
  "@types/node": "^12.20.55",
112
112
  "@types/selenium-webdriver": "^4.1.2",
@@ -19,6 +19,7 @@ export declare function makeCheckAndClose<TSpec extends SpecType>({ eyes, target
19
19
  disableBrowserFetching?: boolean | undefined;
20
20
  layoutBreakpoints?: {
21
21
  breakpoints: boolean | number[];
22
+ heightBreakpoints?: boolean | undefined;
22
23
  reload?: boolean | undefined;
23
24
  } | undefined;
24
25
  hooks?: {
@@ -54,6 +54,7 @@ export type SnapshotSettings<TSpec extends SpecType> = AutomationCore.CheckSetti
54
54
  disableBrowserFetching?: boolean;
55
55
  layoutBreakpoints?: {
56
56
  breakpoints: number[] | boolean;
57
+ heightBreakpoints?: boolean;
57
58
  reload?: boolean;
58
59
  };
59
60
  hooks?: {
@@ -10,6 +10,7 @@ export type DomSnapshotsSettings<TSpec extends SpecType> = DomSnapshotSettings<T
10
10
  waitBeforeCapture?: number | (() => Promise<void>);
11
11
  layoutBreakpoints?: {
12
12
  breakpoints: number[] | boolean;
13
+ heightBreakpoints?: boolean;
13
14
  reload?: boolean;
14
15
  };
15
16
  lazyLoad?: boolean | LazyLoadOptions;
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TestError = void 0;
4
- const core_base_1 = require("@applitools/core-base");
5
- class TestError extends core_base_1.CoreError {
6
- constructor(result) {
7
- if (result.status === 'Failed') {
8
- super(`Test '${result.name}' of '${result.appName}' is failed! See details at ${result.url}`, {
9
- reason: 'test failed',
10
- result,
11
- });
12
- }
13
- else if (result.status === 'Unresolved') {
14
- if (result.isNew) {
15
- super(`Test '${result.name}' of '${result.appName}' is new! Please approve the new baseline at ${result.url}`, {
16
- reason: 'test new',
17
- result,
18
- });
19
- }
20
- else {
21
- super(`Test '${result.name}' of '${result.appName}' detected differences! See details at: ${result.url}`, {
22
- reason: 'test different',
23
- result,
24
- });
25
- }
26
- }
27
- else {
28
- super('');
29
- }
30
- }
31
- }
32
- exports.TestError = TestError;
@@ -1,5 +0,0 @@
1
- import type { TestResult } from '@applitools/core-base';
2
- import { CoreError } from '@applitools/core-base';
3
- export declare class TestError extends CoreError {
4
- constructor(result: TestResult);
5
- }