@applitools/core 4.7.0 → 4.8.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,67 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.8.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.7.1...js/core@4.8.0) (2024-02-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * add support for regions and calculated regions ([#2161](https://github.com/applitools/eyes.sdk.javascript1/issues/2161)) ([fea4b1f](https://github.com/applitools/eyes.sdk.javascript1/commit/fea4b1fca3d8f59eada2b5186cd32d47352ccf1a))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * missing viewport when using system screenshot and multi viewport ([#2173](https://github.com/applitools/eyes.sdk.javascript1/issues/2173)) ([411283c](https://github.com/applitools/eyes.sdk.javascript1/commit/411283c7bebc09f178d73b6b47e81e5ce4244d5e))
14
+ * nml coded region integration with universal ([6fb0934](https://github.com/applitools/eyes.sdk.javascript1/commit/6fb09348238dfe4698856f88e762a9abf80c686f))
15
+ * throw error for encoding none unicode char ([#2171](https://github.com/applitools/eyes.sdk.javascript1/issues/2171)) ([4edb9cf](https://github.com/applitools/eyes.sdk.javascript1/commit/4edb9cfb27d8db2ff4cb09c8ebf1b95ab020633d))
16
+
17
+
18
+ ### Dependencies
19
+
20
+ * @applitools/dom-snapshot bumped to 4.7.17
21
+ #### Bug Fixes
22
+
23
+ * throw error for encoding none unicode char ([#2171](https://github.com/applitools/eyes.sdk.javascript1/issues/2171)) ([4edb9cf](https://github.com/applitools/eyes.sdk.javascript1/commit/4edb9cfb27d8db2ff4cb09c8ebf1b95ab020633d))
24
+ * @applitools/spec-driver-webdriver bumped to 1.0.57
25
+ #### Bug Fixes
26
+
27
+ * fixed issue with cdp commands on chromium browsers ([#2180](https://github.com/applitools/eyes.sdk.javascript1/issues/2180)) ([550fc77](https://github.com/applitools/eyes.sdk.javascript1/commit/550fc772d3988aae29e6f4a1a11d2a408072dc38))
28
+ * @applitools/spec-driver-puppeteer bumped to 1.4.0
29
+ #### Features
30
+
31
+ * added support for puppeteer >= 22 ([#2185](https://github.com/applitools/eyes.sdk.javascript1/issues/2185)) ([59d23a9](https://github.com/applitools/eyes.sdk.javascript1/commit/59d23a9689d77c7db06df53b67fa293a3b3f166e))
32
+ * @applitools/screenshoter bumped to 3.8.23
33
+
34
+ * @applitools/nml-client bumped to 1.7.0
35
+ #### Features
36
+
37
+ * add support for regions and calculated regions ([#2161](https://github.com/applitools/eyes.sdk.javascript1/issues/2161)) ([fea4b1f](https://github.com/applitools/eyes.sdk.javascript1/commit/fea4b1fca3d8f59eada2b5186cd32d47352ccf1a))
38
+
39
+
40
+ #### Bug Fixes
41
+
42
+ * missing viewport when using system screenshot and multi viewport ([#2173](https://github.com/applitools/eyes.sdk.javascript1/issues/2173)) ([411283c](https://github.com/applitools/eyes.sdk.javascript1/commit/411283c7bebc09f178d73b6b47e81e5ce4244d5e))
43
+
44
+
45
+
46
+ * @applitools/ec-client bumped to 1.7.25
47
+
48
+
49
+ ## [4.7.1](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.7.0...js/core@4.7.1) (2024-02-06)
50
+
51
+
52
+ ### Dependencies
53
+
54
+ * @applitools/spec-driver-webdriver bumped to 1.0.56
55
+ #### Bug Fixes
56
+
57
+ * avoid error when extracting driver capabilities ([#2176](https://github.com/applitools/eyes.sdk.javascript1/issues/2176)) ([8971f1c](https://github.com/applitools/eyes.sdk.javascript1/commit/8971f1c07a73c1259e117c5c3c8d43d1d324c584))
58
+ * @applitools/screenshoter bumped to 3.8.22
59
+
60
+ * @applitools/nml-client bumped to 1.6.6
61
+
62
+ * @applitools/ec-client bumped to 1.7.24
63
+
64
+
3
65
  ## [4.7.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.6.0...js/core@4.7.0) (2024-01-30)
4
66
 
5
67
 
@@ -23,10 +23,70 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.toBaseCheckSettings = void 0;
26
+ exports.toBaseCheckSettings = exports.extractMobileElementsIntoCheckSettings = exports.hasCodedRegions = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
+ const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
29
+ function hasCodedRegions(settings) {
30
+ for (const regionType of regionTypes) {
31
+ if (settings[`${regionType}Regions`])
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ exports.hasCodedRegions = hasCodedRegions;
37
+ async function extractMobileElementsIntoCheckSettings({ settings, driver, logger, }) {
38
+ logger = logger.extend({ tags: [`extract-mobile-elements-${utils.general.shortid()}`] });
39
+ if (settings.region) {
40
+ logger.log('extract element form region', settings.region);
41
+ const region = await driver.element(settings.region).catch(error => logger.log(error));
42
+ if (!region) {
43
+ throw new Error('region not found');
44
+ }
45
+ settings.region = await (region === null || region === void 0 ? void 0 : region.getAttribute('name'));
46
+ }
47
+ if (settings.scrollRootElement) {
48
+ logger.log('extract element form scrollRootElement', settings.scrollRootElement);
49
+ const scrollRootElement = await driver.element(settings.scrollRootElement).catch(error => logger.log(error));
50
+ if (!scrollRootElement) {
51
+ throw new Error('scrollRootElement not found');
52
+ }
53
+ settings.scrollRootElement = await scrollRootElement.getAttribute('name');
54
+ }
55
+ const codedRegionsAsElement = await regionTypes.reduce(async (promise, regionType) => {
56
+ var _a, _b;
57
+ const obj = await promise;
58
+ if (!settings[`${regionType}Regions`])
59
+ return obj;
60
+ obj[`${regionType}Regions`] = (await Promise.all((_b = (_a = settings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(async (reference) => {
61
+ logger.log('extract element form region', reference);
62
+ const { region } = utils.types.has(reference, 'region') ? reference : { region: reference };
63
+ const handleRegion = new Set();
64
+ const elements = await driver.elements(region).catch(error => logger.log(error));
65
+ if (!elements)
66
+ return []; // elements not found
67
+ return elements === null || elements === void 0 ? void 0 : elements.reduce(async (promise, element) => {
68
+ const arr = await promise;
69
+ const name = await element.getAttribute('name');
70
+ if (handleRegion.has(name))
71
+ return arr;
72
+ handleRegion.add(name);
73
+ return arr.concat({
74
+ region: {
75
+ name,
76
+ reference: region,
77
+ },
78
+ });
79
+ }, Promise.resolve([]));
80
+ })) !== null && _b !== void 0 ? _b : [])).flat();
81
+ return obj;
82
+ }, Promise.resolve({}));
83
+ return {
84
+ ...settings,
85
+ ...codedRegionsAsElement,
86
+ };
87
+ }
88
+ exports.extractMobileElementsIntoCheckSettings = extractMobileElementsIntoCheckSettings;
28
89
  function toBaseCheckSettings({ settings }) {
29
- const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
30
90
  const calculate = regionTypes.flatMap(regionType => {
31
91
  var _a;
32
92
  return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
@@ -27,6 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheckAndClose = void 0;
30
+ const nml_client_1 = require("@applitools/nml-client");
30
31
  const driver_1 = require("@applitools/driver");
31
32
  const take_screenshots_1 = require("./utils/take-screenshots");
32
33
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
@@ -78,18 +79,35 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
78
79
  if (driverEnvironment.isWeb ||
79
80
  !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) ||
80
81
  settings.screenshotMode === 'default') {
82
+ let actualEnvironments;
83
+ if (settings.screenshotMode === 'default') {
84
+ if (!uniqueEnvironments.every(environment => {
85
+ return (!utils.types.has(environment, 'iosDeviceInfo') && !utils.types.has(environment, 'androidDeviceInfo'));
86
+ })) {
87
+ const nmlEnvironmentsInfo = await (0, nml_client_1.getNMLEnvironmentsInfo)({
88
+ environments: uniqueEnvironments,
89
+ supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl,
90
+ proxy: eyes.test.eyesServer.proxy,
91
+ logger,
92
+ });
93
+ actualEnvironments = nmlEnvironmentsInfo.renderEnvironments;
94
+ }
95
+ }
81
96
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
82
97
  driver,
83
98
  settings: {
84
99
  ...settings,
85
- environments: uniqueEnvironments,
100
+ environments: actualEnvironments !== null && actualEnvironments !== void 0 ? actualEnvironments : uniqueEnvironments,
86
101
  regionsToCalculate: elementReferences.calculate,
87
102
  calculateView: !!settings.pageId,
88
103
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
89
104
  },
90
105
  logger,
91
106
  });
92
- exactEnvironments.push(...uniqueEnvironments);
107
+ if (actualEnvironments)
108
+ exactEnvironments.push(...actualEnvironments);
109
+ else
110
+ exactEnvironments.push(...uniqueEnvironments);
93
111
  screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
94
112
  baseTargets.push(baseTarget);
95
113
  baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
@@ -27,6 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheck = void 0;
30
+ const nml_client_1 = require("@applitools/nml-client");
30
31
  const driver_1 = require("@applitools/driver");
31
32
  const take_screenshots_1 = require("./utils/take-screenshots");
32
33
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
@@ -74,22 +75,32 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
74
75
  logger,
75
76
  });
76
77
  }
77
- const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
78
78
  if (driverEnvironment.isWeb ||
79
79
  !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) ||
80
80
  settings.screenshotMode === 'default') {
81
+ let actualEnvironments = uniqueEnvironments;
82
+ if (settings.screenshotMode === 'default') {
83
+ const { localEnvironment, renderEnvironments } = await (0, nml_client_1.getNMLEnvironmentsInfo)({
84
+ environments: uniqueEnvironments,
85
+ supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl,
86
+ proxy: eyes.test.eyesServer.proxy,
87
+ logger,
88
+ });
89
+ actualEnvironments = localEnvironment ? [localEnvironment] : renderEnvironments;
90
+ }
91
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
81
92
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
82
93
  driver,
83
94
  settings: {
84
95
  ...settings,
85
- environments: uniqueEnvironments,
96
+ environments: actualEnvironments,
86
97
  regionsToCalculate: elementReferences.calculate,
87
98
  calculateView: !!settings.pageId,
88
99
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
89
100
  },
90
101
  logger,
91
102
  });
92
- exactEnvironments.push(...uniqueEnvironments);
103
+ exactEnvironments.push(...actualEnvironments);
93
104
  screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
94
105
  baseTargets.push(baseTarget);
95
106
  baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
@@ -108,6 +119,15 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
108
119
  settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
109
120
  logger,
110
121
  });
122
+ if (settings.scrollRootElement || settings.region || (0, to_base_check_settings_1.hasCodedRegions)(settings))
123
+ await nmlClient.preTakeScreenshot({ logger });
124
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
125
+ settings: {
126
+ ...settings,
127
+ ...(await (0, to_base_check_settings_1.extractMobileElementsIntoCheckSettings)({ settings, driver, logger })),
128
+ },
129
+ });
130
+ const calculate = elementReferences.calculate;
111
131
  const screenshots = await nmlClient.takeScreenshots({
112
132
  settings: {
113
133
  environments: uniqueEnvironments,
@@ -120,13 +140,28 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
120
140
  waitBetweenStitches: settings.waitBetweenStitches,
121
141
  lazyLoad: settings.lazyLoad,
122
142
  name: settings.name,
143
+ region: elementReferences.target,
144
+ selectorsToFindRegionsFor: calculate.map(({ name }) => name),
145
+ scrollRootElement: elementReferences.scrolling,
123
146
  },
124
147
  logger,
125
148
  });
126
- screenshots.forEach(({ environment, ...baseTarget }) => {
149
+ screenshots.forEach(({ environment, calculateRegions, ...baseTarget }) => {
150
+ const aggregateCalculatedRegions = [];
151
+ calculate.forEach(({ reference }, index) => {
152
+ const regions = calculateRegions === null || calculateRegions === void 0 ? void 0 : calculateRegions[index];
153
+ if (regions) {
154
+ aggregateCalculatedRegions.push({ regions, selector: reference });
155
+ }
156
+ else {
157
+ logger.log(`Regions "${reference}" was not found in the screenshot`);
158
+ }
159
+ });
127
160
  exactEnvironments.push(environment);
128
161
  baseTargets.push({ ...baseTarget, isTransformed: true });
129
- baseSettings.push(getBaseCheckSettings({ calculatedRegions: [] }));
162
+ baseSettings.push(getBaseCheckSettings({
163
+ calculatedRegions: aggregateCalculatedRegions,
164
+ }));
130
165
  });
131
166
  }
132
167
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.7.0",
3
+ "version": "4.8.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -76,16 +76,16 @@
76
76
  "dependencies": {
77
77
  "@applitools/core-base": "1.9.0",
78
78
  "@applitools/dom-capture": "11.2.5",
79
- "@applitools/dom-snapshot": "4.7.16",
79
+ "@applitools/dom-snapshot": "4.7.17",
80
80
  "@applitools/driver": "1.16.2",
81
- "@applitools/ec-client": "1.7.23",
81
+ "@applitools/ec-client": "1.7.25",
82
82
  "@applitools/logger": "2.0.14",
83
- "@applitools/nml-client": "1.6.5",
83
+ "@applitools/nml-client": "1.7.0",
84
84
  "@applitools/req": "1.6.4",
85
- "@applitools/screenshoter": "3.8.21",
85
+ "@applitools/screenshoter": "3.8.23",
86
86
  "@applitools/snippets": "2.4.25",
87
87
  "@applitools/socket": "1.1.14",
88
- "@applitools/spec-driver-webdriver": "1.0.55",
88
+ "@applitools/spec-driver-webdriver": "1.0.57",
89
89
  "@applitools/ufg-client": "1.9.9",
90
90
  "@applitools/utils": "1.7.0",
91
91
  "@types/ws": "8.5.5",
@@ -98,9 +98,9 @@
98
98
  "yargs": "17.7.2"
99
99
  },
100
100
  "devDependencies": {
101
- "@applitools/bongo": "^5.9.0",
101
+ "@applitools/bongo": "^5.10.0",
102
102
  "@applitools/sea": "^1.0.0",
103
- "@applitools/spec-driver-puppeteer": "^1.3.5",
103
+ "@applitools/spec-driver-puppeteer": "^1.4.0",
104
104
  "@applitools/spec-driver-selenium": "^1.5.69",
105
105
  "@applitools/test-server": "^1.2.2",
106
106
  "@applitools/test-utils": "^1.5.17",
@@ -1,7 +1,14 @@
1
1
  import type { Region } from '@applitools/utils';
2
2
  import type { CheckSettings } from '../types';
3
3
  import type { CheckSettings as BaseCheckSettings } from '@applitools/core-base';
4
- import { type SpecType, type ElementReference, type Selector } from '@applitools/driver';
4
+ import type { SpecType, ElementReference, Selector, Driver } from '@applitools/driver';
5
+ import { Logger } from '@applitools/logger';
6
+ export declare function hasCodedRegions<TSpec extends SpecType>(settings: CheckSettings<TSpec>): boolean;
7
+ export declare function extractMobileElementsIntoCheckSettings<TSpec extends SpecType>({ settings, driver, logger, }: {
8
+ settings: CheckSettings<TSpec>;
9
+ driver: Driver<TSpec>;
10
+ logger: Logger;
11
+ }): Promise<any>;
5
12
  export declare function toBaseCheckSettings<TSpec extends SpecType>({ settings }: {
6
13
  settings: CheckSettings<TSpec>;
7
14
  }): {