@applitools/eyes-browser 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/dist/index.js +369 -150
  3. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,81 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/eyes-browser-v1.0.7...js/eyes-browser@1.1.0) (2024-02-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * add support for browser in eyes ([#2054](https://github.com/applitools/eyes.sdk.javascript1/issues/2054)) ([4af82dd](https://github.com/applitools/eyes.sdk.javascript1/commit/4af82dd2a667c13adfed0be98a026181755256c6))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * @applitools/dom-snapshot bumped to 4.7.17
14
+ #### Bug Fixes
15
+
16
+ * 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))
17
+ * @applitools/spec-driver-webdriver bumped to 1.0.57
18
+ #### Bug Fixes
19
+
20
+ * 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))
21
+ * @applitools/spec-driver-puppeteer bumped to 1.4.0
22
+ #### Features
23
+
24
+ * 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))
25
+ * @applitools/core bumped to 4.8.0
26
+ #### Features
27
+
28
+ * 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))
29
+
30
+
31
+ #### Bug Fixes
32
+
33
+ * 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))
34
+ * nml coded region integration with universal ([6fb0934](https://github.com/applitools/eyes.sdk.javascript1/commit/6fb09348238dfe4698856f88e762a9abf80c686f))
35
+ * 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))
36
+
37
+
38
+
39
+ * @applitools/screenshoter bumped to 3.8.23
40
+
41
+ * @applitools/nml-client bumped to 1.7.0
42
+ #### Features
43
+
44
+ * 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))
45
+
46
+
47
+ #### Bug Fixes
48
+
49
+ * 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))
50
+
51
+
52
+
53
+ * @applitools/ec-client bumped to 1.7.25
54
+
55
+ * @applitools/eyes bumped to 1.14.0
56
+ #### Features
57
+
58
+ * add Eyes.getResults method ([#2046](https://github.com/applitools/eyes.sdk.javascript1/issues/2046)) ([#2069](https://github.com/applitools/eyes.sdk.javascript1/issues/2069)) ([4d263e1](https://github.com/applitools/eyes.sdk.javascript1/commit/4d263e19cb5e5708790a1a7ef90ff8f3eee50d91))
59
+ * added `enableEyesLogs` configuration to the eyes service ([639ca8a](https://github.com/applitools/eyes.sdk.javascript1/commit/639ca8a021008d06fc09d19ca58ac3d00a18e4c3))
60
+ * added `useExecutionCloud` configuration to the eyes service ([#2033](https://github.com/applitools/eyes.sdk.javascript1/issues/2033)) ([639ca8a](https://github.com/applitools/eyes.sdk.javascript1/commit/639ca8a021008d06fc09d19ca58ac3d00a18e4c3))
61
+ * generate more enums ([#2179](https://github.com/applitools/eyes.sdk.javascript1/issues/2179)) ([5f4f916](https://github.com/applitools/eyes.sdk.javascript1/commit/5f4f91621b791a02464191123f69b12f590b9efe))
62
+
63
+
64
+ #### Bug Fixes
65
+
66
+ * error to unknown type in exception ([#2035](https://github.com/applitools/eyes.sdk.javascript1/issues/2035)) ([16d78c3](https://github.com/applitools/eyes.sdk.javascript1/commit/16d78c3cce90a5cb50cc2aa4e9ab6a58b7b93f89))
67
+ * fixed `serverUrl` configuration propagation ([247b7d8](https://github.com/applitools/eyes.sdk.javascript1/commit/247b7d88853dd1a9068d2d963582ad795752ace4))
68
+ * fixed default value in `useSystemScreenshot` method of check settings ([42a773c](https://github.com/applitools/eyes.sdk.javascript1/commit/42a773cc57e8e5de528a049b376159615892003b))
69
+ * fixed issue when w3c properties were added to legacy capabilities object in `Eyes.setMobileCapabilities` method ([94d785f](https://github.com/applitools/eyes.sdk.javascript1/commit/94d785f0428df101c207d6f09a55c46f2bdbf19e))
70
+
71
+
72
+ #### Code Refactoring
73
+
74
+ * disallow usage of global Buffer ([#1957](https://github.com/applitools/eyes.sdk.javascript1/issues/1957)) ([adcc082](https://github.com/applitools/eyes.sdk.javascript1/commit/adcc082f20f6b92e819b96424e995d9a69d99758))
75
+
76
+
77
+
78
+
3
79
  ## [1.0.6](https://github.com/applitools/eyes.sdk.javascript1/compare/js/eyes-browser@1.0.5...js/eyes-browser@1.0.6) (2024-01-30)
4
80
 
5
81
 
package/dist/index.js CHANGED
@@ -32863,9 +32863,9 @@ var require_req_broker = __commonJS({
32863
32863
  }
32864
32864
  });
32865
32865
 
32866
- // ../nml-client/dist/server/requests.js
32867
- var require_requests2 = __commonJS({
32868
- "../nml-client/dist/server/requests.js"(exports) {
32866
+ // ../nml-client/dist/utils/get-environments-info.js
32867
+ var require_get_environments_info = __commonJS({
32868
+ "../nml-client/dist/utils/get-environments-info.js"(exports) {
32869
32869
  "use strict";
32870
32870
  init_process();
32871
32871
  init_setImmediate();
@@ -32906,50 +32906,129 @@ var require_requests2 = __commonJS({
32906
32906
  return mod && mod.__esModule ? mod : { "default": mod };
32907
32907
  };
32908
32908
  Object.defineProperty(exports, "__esModule", { value: true });
32909
+ exports.getNMLEnvironmentsInfo = void 0;
32910
+ var utils34 = __importStar(require_browser3());
32911
+ var req_1 = __importDefault((init_dist(), __toCommonJS(dist_exports)));
32912
+ var getNMLSupportedEnvironmentsWithCache = utils34.general.cachify(getNMLSupportedEnvironments);
32913
+ async function getNMLSupportedEnvironments({ supportedEnvironmentsUrl, proxy }) {
32914
+ const response = await (0, req_1.default)(supportedEnvironmentsUrl, { proxy });
32915
+ const result = await response.json();
32916
+ return result;
32917
+ }
32918
+ async function getNMLEnvironmentsInfo({ environments, supportedEnvironmentsUrl, proxy, logger: _logger }) {
32919
+ const supportedEnvironments = await getNMLSupportedEnvironmentsWithCache({ supportedEnvironmentsUrl, proxy });
32920
+ return environments.reduce((result, environment) => {
32921
+ var _a;
32922
+ if (!utils34.types.has(environment, "iosDeviceInfo") && !utils34.types.has(environment, "androidDeviceInfo")) {
32923
+ result.localEnvironment = environment;
32924
+ } else {
32925
+ const deviceInfo = utils34.types.has(environment, "iosDeviceInfo") ? environment.iosDeviceInfo : environment.androidDeviceInfo;
32926
+ const orientation = deviceInfo.screenOrientation === "landscape" ? "landscapeLeft" : (_a = deviceInfo.screenOrientation) !== null && _a !== void 0 ? _a : "portrait";
32927
+ const rawEnvironment = supportedEnvironments[deviceInfo.deviceName][orientation].env;
32928
+ result.renderEnvironments.push({
32929
+ requested: environment,
32930
+ environmentId: utils34.general.guid(),
32931
+ deviceName: rawEnvironment.deviceInfo,
32932
+ os: rawEnvironment.os + (deviceInfo.version ? ` ${deviceInfo.version}` : ""),
32933
+ viewportSize: rawEnvironment.displaySize
32934
+ });
32935
+ result.environmentSettings.push({ ...supportedEnvironments[deviceInfo.deviceName], orientation });
32936
+ }
32937
+ return result;
32938
+ }, {
32939
+ localEnvironment: void 0,
32940
+ renderEnvironments: [],
32941
+ environmentSettings: []
32942
+ });
32943
+ }
32944
+ exports.getNMLEnvironmentsInfo = getNMLEnvironmentsInfo;
32945
+ }
32946
+ });
32947
+
32948
+ // ../nml-client/dist/server/requests.js
32949
+ var require_requests2 = __commonJS({
32950
+ "../nml-client/dist/server/requests.js"(exports) {
32951
+ "use strict";
32952
+ init_process();
32953
+ init_setImmediate();
32954
+ init_buffer();
32955
+ var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
32956
+ if (k2 === void 0)
32957
+ k2 = k;
32958
+ var desc = Object.getOwnPropertyDescriptor(m, k);
32959
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32960
+ desc = { enumerable: true, get: function() {
32961
+ return m[k];
32962
+ } };
32963
+ }
32964
+ Object.defineProperty(o, k2, desc);
32965
+ } : function(o, m, k, k2) {
32966
+ if (k2 === void 0)
32967
+ k2 = k;
32968
+ o[k2] = m[k];
32969
+ });
32970
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
32971
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32972
+ } : function(o, v) {
32973
+ o["default"] = v;
32974
+ });
32975
+ var __importStar = exports && exports.__importStar || function(mod) {
32976
+ if (mod && mod.__esModule)
32977
+ return mod;
32978
+ var result = {};
32979
+ if (mod != null) {
32980
+ for (var k in mod)
32981
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
32982
+ __createBinding(result, mod, k);
32983
+ }
32984
+ __setModuleDefault(result, mod);
32985
+ return result;
32986
+ };
32987
+ Object.defineProperty(exports, "__esModule", { value: true });
32909
32988
  exports.makeNMLRequests = void 0;
32910
32989
  var req_broker_1 = require_req_broker();
32911
- var req_1 = __importDefault((init_dist(), __toCommonJS(dist_exports)));
32912
32990
  var utils34 = __importStar(require_browser3());
32991
+ var get_environments_info_1 = require_get_environments_info();
32913
32992
  function makeNMLRequests({ settings, logger: mainLogger }) {
32914
32993
  let brokerUrl = settings.brokerUrl;
32994
+ const supportedEnvironmentsUrl = settings.supportedEnvironmentsUrl;
32995
+ const proxy = settings.proxy;
32915
32996
  const req2 = (0, req_broker_1.makeReqBroker)({ settings, logger: mainLogger });
32916
- const getSupportedEnvironmentsWithCache = utils34.general.cachify(getSupportedEnvironments, () => "default");
32917
32997
  return {
32918
- getSupportedEnvironments: getSupportedEnvironmentsWithCache,
32998
+ preTakeScreenshot,
32919
32999
  takeScreenshots,
32920
33000
  takeSnapshots
32921
33001
  };
32922
- async function getSupportedEnvironments({ logger: _logger }) {
32923
- const response = await (0, req_1.default)(settings.supportedEnvironmentsUrl);
33002
+ async function preTakeScreenshot({ logger = mainLogger } = {}) {
33003
+ var _a;
33004
+ logger = logger.extend(mainLogger, { tags: [`nml-request-${utils34.general.shortid()}`] });
33005
+ logger.log('Request "preTakeScreenshot" called');
33006
+ const response = await req2(brokerUrl, {
33007
+ name: "PRE_TAKE_SCREENSHOT",
33008
+ body: {
33009
+ protocolVersion: "1.0",
33010
+ name: "PRE_TAKE_SCREENSHOT",
33011
+ key: utils34.general.guid(),
33012
+ payload: {}
33013
+ },
33014
+ logger
33015
+ });
32924
33016
  const result = await response.json();
32925
- return result;
33017
+ if (((_a = result === null || result === void 0 ? void 0 : result.payload) === null || _a === void 0 ? void 0 : _a.result) === "success")
33018
+ logger.log('Request "preTakeScreenshot" finished successfully with body', result.payload);
33019
+ else
33020
+ throw new Error(`There was a problem in pre take screenshot. The provided error message was "${result}"`);
33021
+ brokerUrl = result.nextPath;
32926
33022
  }
32927
33023
  async function takeScreenshots({ settings: settings2, logger = mainLogger }) {
33024
+ var _a, _b;
32928
33025
  logger = logger.extend(mainLogger, { tags: [`nml-request-${utils34.general.shortid()}`] });
32929
33026
  logger.log('Request "takeScreenshots" called with settings', settings2);
32930
- const supportedEnvironments = await getSupportedEnvironmentsWithCache({ logger });
32931
- const { localEnvironment, renderEnvironments, environmentSettings } = settings2.environments.reduce((result, environment) => {
32932
- var _a;
32933
- if (!utils34.types.has(environment, "iosDeviceInfo") && !utils34.types.has(environment, "androidDeviceInfo")) {
32934
- result.localEnvironment = environment;
32935
- } else {
32936
- const deviceInfo = utils34.types.has(environment, "iosDeviceInfo") ? environment.iosDeviceInfo : environment.androidDeviceInfo;
32937
- const orientation = deviceInfo.screenOrientation === "landscape" ? "landscapeLeft" : (_a = deviceInfo.screenOrientation) !== null && _a !== void 0 ? _a : "portrait";
32938
- const rawEnvironment = supportedEnvironments[deviceInfo.deviceName][orientation].env;
32939
- result.renderEnvironments.push({
32940
- requested: environment,
32941
- environmentId: utils34.general.guid(),
32942
- deviceName: rawEnvironment.deviceInfo,
32943
- os: rawEnvironment.os + (deviceInfo.version ? ` ${deviceInfo.version}` : ""),
32944
- viewportSize: rawEnvironment.displaySize
32945
- });
32946
- result.environmentSettings.push({ ...supportedEnvironments[deviceInfo.deviceName], orientation });
32947
- }
32948
- return result;
32949
- }, {
32950
- localEnvironment: void 0,
32951
- renderEnvironments: [],
32952
- environmentSettings: []
33027
+ const { localEnvironment, renderEnvironments, environmentSettings } = await (0, get_environments_info_1.getNMLEnvironmentsInfo)({
33028
+ environments: settings2.environments,
33029
+ supportedEnvironmentsUrl,
33030
+ proxy,
33031
+ logger
32953
33032
  });
32954
33033
  try {
32955
33034
  const response = await req2(brokerUrl, {
@@ -32961,7 +33040,10 @@ var require_requests2 = __commonJS({
32961
33040
  payload: {
32962
33041
  ...settings2,
32963
33042
  environments: void 0,
32964
- deviceList: !localEnvironment ? environmentSettings : void 0
33043
+ deviceList: !localEnvironment ? environmentSettings : void 0,
33044
+ scrollRootElement: fallbackId(settings2.scrollRootElement),
33045
+ region: fallbackId(settings2.region),
33046
+ selectorsToFindRegionsFor: (_a = settings2.selectorsToFindRegionsFor) === null || _a === void 0 ? void 0 : _a.map((selector) => fallbackId(selector))
32965
33047
  }
32966
33048
  },
32967
33049
  logger
@@ -32971,11 +33053,22 @@ var require_requests2 = __commonJS({
32971
33053
  let screenshots;
32972
33054
  if (Number(result.protocolVersion) >= 2) {
32973
33055
  logger.log(`Request "takeScreenshots" was performed on applitools lib v${result.nmlVersion} through protocol v${result.protocolVersion} on device`, result.payload.debugInfo);
32974
- screenshots = localEnvironment ? [{ image: result.payload.result[0].result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
33056
+ screenshots = localEnvironment ? [
33057
+ {
33058
+ image: result.payload.result[0].result.screenshotUrl,
33059
+ environment: localEnvironment,
33060
+ calculateRegions: (_b = result.payload.result[0].result) === null || _b === void 0 ? void 0 : _b.selectorRegions
33061
+ }
33062
+ ] : renderEnvironments.map((environment, index) => {
33063
+ var _a2;
32975
33064
  if (result.payload.result[index].error) {
32976
33065
  throw new Error(`There was a problem in taking screenshot for environment ${JSON.stringify(environment)}. The provided error message was "${result.payload.result[index].error.message}" and had a stack trace of "${result.payload.result[index].error.stack}"`);
32977
33066
  }
32978
- return { image: result.payload.result[index].result.screenshotUrl, environment };
33067
+ return {
33068
+ image: result.payload.result[index].result.screenshotUrl,
33069
+ calculateRegions: (_a2 = result.payload.result[index].result) === null || _a2 === void 0 ? void 0 : _a2.selectorRegions,
33070
+ environment
33071
+ };
32979
33072
  });
32980
33073
  } else {
32981
33074
  screenshots = localEnvironment ? [{ image: result.payload.result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
@@ -32989,6 +33082,9 @@ var require_requests2 = __commonJS({
32989
33082
  brokerUrl = error.nextPath;
32990
33083
  throw error;
32991
33084
  }
33085
+ function fallbackId(selector) {
33086
+ return utils34.types.isString(selector) ? { type: "accessibility-identifier", selector } : selector;
33087
+ }
32992
33088
  }
32993
33089
  async function takeSnapshots({ settings: settings2, logger = mainLogger }) {
32994
33090
  try {
@@ -33066,6 +33162,24 @@ var require_take_screenshots = __commonJS({
33066
33162
  }
33067
33163
  });
33068
33164
 
33165
+ // ../nml-client/dist/pre-take-screenshot.js
33166
+ var require_pre_take_screenshot = __commonJS({
33167
+ "../nml-client/dist/pre-take-screenshot.js"(exports) {
33168
+ "use strict";
33169
+ init_process();
33170
+ init_setImmediate();
33171
+ init_buffer();
33172
+ Object.defineProperty(exports, "__esModule", { value: true });
33173
+ exports.makePreTakeScreenshot = void 0;
33174
+ function makePreTakeScreenshot({ requests, logger: defaultLogger }) {
33175
+ return async function preTakeScreenshot({ logger = defaultLogger }) {
33176
+ return requests.preTakeScreenshot({ logger });
33177
+ };
33178
+ }
33179
+ exports.makePreTakeScreenshot = makePreTakeScreenshot;
33180
+ }
33181
+ });
33182
+
33069
33183
  // ../nml-client/dist/client.js
33070
33184
  var require_client = __commonJS({
33071
33185
  "../nml-client/dist/client.js"(exports) {
@@ -33079,13 +33193,14 @@ var require_client = __commonJS({
33079
33193
  var requests_1 = require_requests2();
33080
33194
  var take_snapshots_1 = require_take_snapshots();
33081
33195
  var take_screenshots_1 = require_take_screenshots();
33196
+ var pre_take_screenshot_1 = require_pre_take_screenshot();
33082
33197
  function makeNMLClient({ settings, logger: defaultLogger }) {
33083
33198
  const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: "nml-client" } });
33084
33199
  const requests = (0, requests_1.makeNMLRequests)({ settings, logger });
33085
33200
  return {
33201
+ preTakeScreenshot: (0, pre_take_screenshot_1.makePreTakeScreenshot)({ requests, logger }),
33086
33202
  takeScreenshots: (0, take_screenshots_1.makeTakeScreenshots)({ requests, logger }),
33087
- takeSnapshots: (0, take_snapshots_1.makeTakeSnapshots)({ requests, logger }),
33088
- getSupportedEnvironments: requests.getSupportedEnvironments
33203
+ takeSnapshots: (0, take_snapshots_1.makeTakeSnapshots)({ requests, logger })
33089
33204
  };
33090
33205
  }
33091
33206
  exports.makeNMLClient = makeNMLClient;
@@ -33134,6 +33249,7 @@ var require_dist5 = __commonJS({
33134
33249
  __exportStar(require_client(), exports);
33135
33250
  __exportStar(require_types7(), exports);
33136
33251
  __exportStar(require_requests2(), exports);
33252
+ __exportStar(require_get_environments_info(), exports);
33137
33253
  }
33138
33254
  });
33139
33255
 
@@ -35747,10 +35863,70 @@ var require_to_base_check_settings = __commonJS({
35747
35863
  return result;
35748
35864
  };
35749
35865
  Object.defineProperty(exports, "__esModule", { value: true });
35750
- exports.toBaseCheckSettings = void 0;
35866
+ exports.toBaseCheckSettings = exports.extractMobileElementsIntoCheckSettings = exports.hasCodedRegions = void 0;
35751
35867
  var utils34 = __importStar(require_browser3());
35868
+ var regionTypes = ["ignore", "layout", "strict", "content", "floating", "accessibility"];
35869
+ function hasCodedRegions(settings) {
35870
+ for (const regionType of regionTypes) {
35871
+ if (settings[`${regionType}Regions`])
35872
+ return true;
35873
+ }
35874
+ return false;
35875
+ }
35876
+ exports.hasCodedRegions = hasCodedRegions;
35877
+ async function extractMobileElementsIntoCheckSettings({ settings, driver, logger }) {
35878
+ logger = logger.extend({ tags: [`extract-mobile-elements-${utils34.general.shortid()}`] });
35879
+ if (settings.region) {
35880
+ logger.log("extract element form region", settings.region);
35881
+ const region = await driver.element(settings.region).catch((error) => logger.log(error));
35882
+ if (!region) {
35883
+ throw new Error("region not found");
35884
+ }
35885
+ settings.region = await (region === null || region === void 0 ? void 0 : region.getAttribute("name"));
35886
+ }
35887
+ if (settings.scrollRootElement) {
35888
+ logger.log("extract element form scrollRootElement", settings.scrollRootElement);
35889
+ const scrollRootElement = await driver.element(settings.scrollRootElement).catch((error) => logger.log(error));
35890
+ if (!scrollRootElement) {
35891
+ throw new Error("scrollRootElement not found");
35892
+ }
35893
+ settings.scrollRootElement = await scrollRootElement.getAttribute("name");
35894
+ }
35895
+ const codedRegionsAsElement = await regionTypes.reduce(async (promise, regionType) => {
35896
+ var _a, _b;
35897
+ const obj = await promise;
35898
+ if (!settings[`${regionType}Regions`])
35899
+ return obj;
35900
+ obj[`${regionType}Regions`] = (await Promise.all((_b = (_a = settings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(async (reference) => {
35901
+ logger.log("extract element form region", reference);
35902
+ const { region } = utils34.types.has(reference, "region") ? reference : { region: reference };
35903
+ const handleRegion = /* @__PURE__ */ new Set();
35904
+ const elements = await driver.elements(region).catch((error) => logger.log(error));
35905
+ if (!elements)
35906
+ return [];
35907
+ return elements === null || elements === void 0 ? void 0 : elements.reduce(async (promise2, element) => {
35908
+ const arr = await promise2;
35909
+ const name = await element.getAttribute("name");
35910
+ if (handleRegion.has(name))
35911
+ return arr;
35912
+ handleRegion.add(name);
35913
+ return arr.concat({
35914
+ region: {
35915
+ name,
35916
+ reference: region
35917
+ }
35918
+ });
35919
+ }, Promise.resolve([]));
35920
+ })) !== null && _b !== void 0 ? _b : [])).flat();
35921
+ return obj;
35922
+ }, Promise.resolve({}));
35923
+ return {
35924
+ ...settings,
35925
+ ...codedRegionsAsElement
35926
+ };
35927
+ }
35928
+ exports.extractMobileElementsIntoCheckSettings = extractMobileElementsIntoCheckSettings;
35752
35929
  function toBaseCheckSettings({ settings }) {
35753
- const regionTypes = ["ignore", "layout", "strict", "content", "floating", "accessibility"];
35754
35930
  const calculate = regionTypes.flatMap((regionType) => {
35755
35931
  var _a;
35756
35932
  return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
@@ -35963,6 +36139,7 @@ var require_check2 = __commonJS({
35963
36139
  };
35964
36140
  Object.defineProperty(exports, "__esModule", { value: true });
35965
36141
  exports.makeCheck = void 0;
36142
+ var nml_client_1 = require_dist5();
35966
36143
  var driver_1 = require_dist4();
35967
36144
  var take_screenshots_1 = require_take_screenshots2();
35968
36145
  var to_base_check_settings_1 = require_to_base_check_settings();
@@ -36009,20 +36186,30 @@ var require_check2 = __commonJS({
36009
36186
  logger
36010
36187
  });
36011
36188
  }
36012
- const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
36013
36189
  if (driverEnvironment.isWeb || !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) || settings.screenshotMode === "default") {
36190
+ let actualEnvironments = uniqueEnvironments;
36191
+ if (settings.screenshotMode === "default") {
36192
+ const { localEnvironment, renderEnvironments } = await (0, nml_client_1.getNMLEnvironmentsInfo)({
36193
+ environments: uniqueEnvironments,
36194
+ supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl,
36195
+ proxy: eyes.test.eyesServer.proxy,
36196
+ logger
36197
+ });
36198
+ actualEnvironments = localEnvironment ? [localEnvironment] : renderEnvironments;
36199
+ }
36200
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
36014
36201
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
36015
36202
  driver,
36016
36203
  settings: {
36017
36204
  ...settings,
36018
- environments: uniqueEnvironments,
36205
+ environments: actualEnvironments,
36019
36206
  regionsToCalculate: elementReferences.calculate,
36020
36207
  calculateView: !!settings.pageId,
36021
36208
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : void 0
36022
36209
  },
36023
36210
  logger
36024
36211
  });
36025
- exactEnvironments.push(...uniqueEnvironments);
36212
+ exactEnvironments.push(...actualEnvironments);
36026
36213
  screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
36027
36214
  baseTargets.push(baseTarget);
36028
36215
  baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
@@ -36040,6 +36227,15 @@ var require_check2 = __commonJS({
36040
36227
  settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
36041
36228
  logger
36042
36229
  });
36230
+ if (settings.scrollRootElement || settings.region || (0, to_base_check_settings_1.hasCodedRegions)(settings))
36231
+ await nmlClient.preTakeScreenshot({ logger });
36232
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
36233
+ settings: {
36234
+ ...settings,
36235
+ ...await (0, to_base_check_settings_1.extractMobileElementsIntoCheckSettings)({ settings, driver, logger })
36236
+ }
36237
+ });
36238
+ const calculate = elementReferences.calculate;
36043
36239
  const screenshots = await nmlClient.takeScreenshots({
36044
36240
  settings: {
36045
36241
  environments: uniqueEnvironments,
@@ -36051,14 +36247,28 @@ var require_check2 = __commonJS({
36051
36247
  waitBeforeCapture: settings.waitBeforeCapture,
36052
36248
  waitBetweenStitches: settings.waitBetweenStitches,
36053
36249
  lazyLoad: settings.lazyLoad,
36054
- name: settings.name
36250
+ name: settings.name,
36251
+ region: elementReferences.target,
36252
+ selectorsToFindRegionsFor: calculate.map(({ name }) => name),
36253
+ scrollRootElement: elementReferences.scrolling
36055
36254
  },
36056
36255
  logger
36057
36256
  });
36058
- screenshots.forEach(({ environment, ...baseTarget }) => {
36257
+ screenshots.forEach(({ environment, calculateRegions, ...baseTarget }) => {
36258
+ const aggregateCalculatedRegions = [];
36259
+ calculate.forEach(({ reference }, index) => {
36260
+ const regions = calculateRegions === null || calculateRegions === void 0 ? void 0 : calculateRegions[index];
36261
+ if (regions) {
36262
+ aggregateCalculatedRegions.push({ regions, selector: reference });
36263
+ } else {
36264
+ logger.log(`Regions "${reference}" was not found in the screenshot`);
36265
+ }
36266
+ });
36059
36267
  exactEnvironments.push(environment);
36060
36268
  baseTargets.push({ ...baseTarget, isTransformed: true });
36061
- baseSettings.push(getBaseCheckSettings({ calculatedRegions: [] }));
36269
+ baseSettings.push(getBaseCheckSettings({
36270
+ calculatedRegions: aggregateCalculatedRegions
36271
+ }));
36062
36272
  });
36063
36273
  }
36064
36274
  } else {
@@ -36158,6 +36368,7 @@ var require_check_and_close2 = __commonJS({
36158
36368
  };
36159
36369
  Object.defineProperty(exports, "__esModule", { value: true });
36160
36370
  exports.makeCheckAndClose = void 0;
36371
+ var nml_client_1 = require_dist5();
36161
36372
  var driver_1 = require_dist4();
36162
36373
  var take_screenshots_1 = require_take_screenshots2();
36163
36374
  var to_base_check_settings_1 = require_to_base_check_settings();
@@ -36206,18 +36417,35 @@ var require_check_and_close2 = __commonJS({
36206
36417
  }
36207
36418
  const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
36208
36419
  if (driverEnvironment.isWeb || !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) || settings.screenshotMode === "default") {
36420
+ let actualEnvironments;
36421
+ if (settings.screenshotMode === "default") {
36422
+ if (!uniqueEnvironments.every((environment) => {
36423
+ return !utils34.types.has(environment, "iosDeviceInfo") && !utils34.types.has(environment, "androidDeviceInfo");
36424
+ })) {
36425
+ const nmlEnvironmentsInfo = await (0, nml_client_1.getNMLEnvironmentsInfo)({
36426
+ environments: uniqueEnvironments,
36427
+ supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl,
36428
+ proxy: eyes.test.eyesServer.proxy,
36429
+ logger
36430
+ });
36431
+ actualEnvironments = nmlEnvironmentsInfo.renderEnvironments;
36432
+ }
36433
+ }
36209
36434
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
36210
36435
  driver,
36211
36436
  settings: {
36212
36437
  ...settings,
36213
- environments: uniqueEnvironments,
36438
+ environments: actualEnvironments !== null && actualEnvironments !== void 0 ? actualEnvironments : uniqueEnvironments,
36214
36439
  regionsToCalculate: elementReferences.calculate,
36215
36440
  calculateView: !!settings.pageId,
36216
36441
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : void 0
36217
36442
  },
36218
36443
  logger
36219
36444
  });
36220
- exactEnvironments.push(...uniqueEnvironments);
36445
+ if (actualEnvironments)
36446
+ exactEnvironments.push(...actualEnvironments);
36447
+ else
36448
+ exactEnvironments.push(...uniqueEnvironments);
36221
36449
  screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
36222
36450
  baseTargets.push(baseTarget);
36223
36451
  baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
@@ -82101,10 +82329,17 @@ creating temp style for access.`), r2 = Em(e4);
82101
82329
  }(t4))
82102
82330
  return Um(t4);
82103
82331
  }, rf = function(e4) {
82104
- return e4 && e4.replace(/(\\[0-9a-fA-F]{1,6}\s?)/g, (e5) => {
82105
- const t4 = parseInt(e5.substr(1).trim(), 16);
82106
- return String.fromCodePoint(t4);
82332
+ const t4 = e4 && e4.replace(/(\\[0-9a-fA-F]{1,6}\s?)/g, (e5) => {
82333
+ const t5 = parseInt(e5.substr(1).trim(), 16);
82334
+ try {
82335
+ return String.fromCodePoint(t5);
82336
+ } catch (t6) {
82337
+ if (t6 instanceof RangeError)
82338
+ return e5;
82339
+ throw t6;
82340
+ }
82107
82341
  }) || e4;
82342
+ return t4;
82108
82343
  }, of = um, af = yh, sf = hm, lf = cm, cf = function(e4) {
82109
82344
  return function() {
82110
82345
  const t4 = ["[dom-snapshot]", `[+${Date.now() - e4}ms]`].concat(Array.from(arguments));
@@ -82155,7 +82390,7 @@ creating temp style for access.`), r2 = Em(e4);
82155
82390
  function D2(e5) {
82156
82391
  return t5.defaultView && t5.defaultView.frameElement && t5.defaultView.frameElement.getAttribute(e5);
82157
82392
  }
82158
- }(t4).then((e4) => (u2("processPage end"), e4.scriptVersion = "4.7.16", e4));
82393
+ }(t4).then((e4) => (u2("processPage end"), e4.scriptVersion = "4.7.17", e4));
82159
82394
  };
82160
82395
  window[mf] = window[mf] || {};
82161
82396
  const bf = pf(gf, window[mf], ff);
@@ -84481,7 +84716,7 @@ var require_package2 = __commonJS({
84481
84716
  "../core/package.json"(exports, module) {
84482
84717
  module.exports = {
84483
84718
  name: "@applitools/core",
84484
- version: "4.7.0",
84719
+ version: "4.8.0",
84485
84720
  homepage: "https://applitools.com",
84486
84721
  bugs: {
84487
84722
  url: "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -86507,15 +86742,6 @@ var require_spec_driver2 = __commonJS({
86507
86742
  isW3C
86508
86743
  };
86509
86744
  }
86510
- function command(method, url, body) {
86511
- if (getFrameworkMajorVersion() < 8) {
86512
- const { default: command2 } = __require("webdriver/build/command");
86513
- return command2(method, url, body);
86514
- } else {
86515
- const { command: command2 } = __require("webdriver");
86516
- return command2(method, url, body);
86517
- }
86518
- }
86519
86745
  function getFrameworkMajorVersion() {
86520
86746
  const version = __require("webdriver/package.json").version;
86521
86747
  return Number.parseInt(version);
@@ -86576,88 +86802,87 @@ var require_spec_driver2 = __commonJS({
86576
86802
  exports.isStaleElementError = isStaleElementError;
86577
86803
  function toDriver(driver) {
86578
86804
  var _a, _b, _c;
86579
- if (!utils34.types.has(driver, ["sessionId", "serverUrl"]))
86580
- return driver;
86581
- const url = new URL(driver.serverUrl);
86582
- const environment = extractEnvironment(driver.capabilities);
86583
- const options = {
86584
- sessionId: driver.sessionId,
86585
- protocol: url.protocol ? url.protocol.replace(/:$/, "") : void 0,
86586
- hostname: url.hostname,
86587
- port: Number(url.port) || void 0,
86588
- path: url.pathname,
86589
- capabilities: driver.capabilities,
86590
- logLevel: "silent",
86591
- ...environment
86592
- };
86593
- if (!options.port) {
86594
- if (options.protocol === "http")
86595
- options.port = 80;
86596
- if (options.protocol === "https")
86597
- options.port = 443;
86598
- }
86599
- if ((_a = driver.proxy) === null || _a === void 0 ? void 0 : _a.url) {
86600
- const proxyUrl = new URL(driver.proxy.url);
86601
- proxyUrl.username = (_b = driver.proxy.username) !== null && _b !== void 0 ? _b : proxyUrl.username;
86602
- proxyUrl.password = (_c = driver.proxy.password) !== null && _c !== void 0 ? _c : proxyUrl.password;
86603
- const proxyOptions = { ...(0, url_1.parse)(proxyUrl.href), rejectUnauthorized: false };
86604
- const httpAgent = (0, http_proxy_agent_1.default)(proxyOptions);
86605
- const httpsAgent = (0, https_proxy_agent_1.default)(proxyOptions);
86606
- httpsAgent.callback = utils34.general.wrap(httpsAgent.callback.bind(httpsAgent), (fn, request, options2, ...rest) => {
86607
- return fn(request, { ...options2, rejectUnauthorized: false }, ...rest);
86608
- });
86609
- options.agent = { http: httpAgent, https: httpsAgent };
86805
+ let transformedDriver;
86806
+ if (utils34.types.has(driver, ["sessionId", "serverUrl"])) {
86807
+ const url = new URL(driver.serverUrl);
86808
+ const environment = extractEnvironment(driver.capabilities);
86809
+ const options = {
86810
+ sessionId: driver.sessionId,
86811
+ protocol: url.protocol ? url.protocol.replace(/:$/, "") : void 0,
86812
+ hostname: url.hostname,
86813
+ port: Number(url.port) || void 0,
86814
+ path: url.pathname,
86815
+ capabilities: driver.capabilities,
86816
+ logLevel: "silent",
86817
+ ...environment
86818
+ };
86819
+ if (!options.port) {
86820
+ if (options.protocol === "http")
86821
+ options.port = 80;
86822
+ if (options.protocol === "https")
86823
+ options.port = 443;
86824
+ }
86825
+ if ((_a = driver.proxy) === null || _a === void 0 ? void 0 : _a.url) {
86826
+ const proxyUrl = new URL(driver.proxy.url);
86827
+ proxyUrl.username = (_b = driver.proxy.username) !== null && _b !== void 0 ? _b : proxyUrl.username;
86828
+ proxyUrl.password = (_c = driver.proxy.password) !== null && _c !== void 0 ? _c : proxyUrl.password;
86829
+ const proxyOptions = { ...(0, url_1.parse)(proxyUrl.href), rejectUnauthorized: false };
86830
+ const httpAgent = (0, http_proxy_agent_1.default)(proxyOptions);
86831
+ const httpsAgent = (0, https_proxy_agent_1.default)(proxyOptions);
86832
+ httpsAgent.callback = utils34.general.wrap(httpsAgent.callback.bind(httpsAgent), (fn, request, options2, ...rest) => {
86833
+ return fn(request, { ...options2, rejectUnauthorized: false }, ...rest);
86834
+ });
86835
+ options.agent = { http: httpAgent, https: httpsAgent };
86836
+ } else {
86837
+ const httpAgent = http_1.default.globalAgent;
86838
+ const httpsAgent = new https_1.default.Agent({ rejectUnauthorized: false });
86839
+ options.agent = { http: httpAgent, https: httpsAgent };
86840
+ }
86841
+ const WebDriver = getWebDriver();
86842
+ transformedDriver = WebDriver.attachToSession(options);
86843
+ transformedDriver.original = driver.original;
86610
86844
  } else {
86611
- const httpAgent = http_1.default.globalAgent;
86612
- const httpsAgent = new https_1.default.Agent({ rejectUnauthorized: false });
86613
- options.agent = { http: httpAgent, https: httpsAgent };
86845
+ transformedDriver = Object.create(driver, {
86846
+ original: { enumerable: false, get: () => driver }
86847
+ });
86614
86848
  }
86615
- const WebDriver = getWebDriver();
86616
- const attachedDriver = WebDriver.attachToSession(options, void 0, {
86617
- _getWindowSize: {
86618
- value: command("GET", "/session/:sessionId/window/current/size", {
86619
- command: "_getWindowSize",
86620
- description: "",
86621
- ref: "",
86622
- parameters: []
86623
- })
86624
- },
86625
- _setWindowSize: {
86626
- value: command("POST", "/session/:sessionId/window/current/size", {
86627
- command: "_setWindowSize",
86628
- parameters: [
86629
- { name: "width", type: "number", required: true, description: "" },
86630
- { name: "height", type: "number", required: true, description: "" }
86631
- ],
86632
- description: "",
86633
- ref: ""
86634
- })
86635
- },
86636
- setWindowPosition: {
86637
- value: command("POST", "/session/:sessionId/window/current/position", {
86638
- command: "setWindowPosition",
86639
- parameters: [
86640
- { name: "x", type: "number", required: true, description: "" },
86641
- { name: "y", type: "number", required: true, description: "" }
86642
- ],
86643
- description: "",
86644
- ref: ""
86645
- })
86646
- },
86647
- sendCommandAndGetResult: {
86648
- value: command("POST", "/session/:sessionId/chromium/send_command_and_get_result", {
86649
- command: "sendCommandAndGetResult",
86650
- parameters: [
86651
- { name: "cmd", type: "string", required: true, description: "" },
86652
- { name: "params", type: "object", required: true, description: "" }
86653
- ],
86654
- description: "Send a command to the DevTools debugger and wait for the result.",
86655
- ref: ""
86656
- })
86657
- }
86658
- });
86659
- attachedDriver.original = driver.original;
86660
- return attachedDriver;
86849
+ if (utils34.types.isFunction(transformedDriver, "addCommand")) {
86850
+ const command = getFrameworkMajorVersion() < 8 ? __require("webdriver/build/command").default : __require("webdriver").command;
86851
+ transformedDriver.addCommand("_getWindowSize", command("GET", "/session/:sessionId/window/current/size", {
86852
+ command: "_getWindowSize",
86853
+ description: "",
86854
+ ref: "",
86855
+ parameters: []
86856
+ }));
86857
+ transformedDriver.addCommand("_setWindowSize", command("POST", "/session/:sessionId/window/current/size", {
86858
+ command: "_setWindowSize",
86859
+ parameters: [
86860
+ { name: "width", type: "number", required: true, description: "" },
86861
+ { name: "height", type: "number", required: true, description: "" }
86862
+ ],
86863
+ description: "",
86864
+ ref: ""
86865
+ }));
86866
+ transformedDriver.addCommand("setWindowPosition", command("POST", "/session/:sessionId/window/current/position", {
86867
+ command: "setWindowPosition",
86868
+ parameters: [
86869
+ { name: "x", type: "number", required: true, description: "" },
86870
+ { name: "y", type: "number", required: true, description: "" }
86871
+ ],
86872
+ description: "",
86873
+ ref: ""
86874
+ }));
86875
+ transformedDriver.addCommand("sendCommandAndGetResult", command("POST", "/session/:sessionId/chromium/send_command_and_get_result", {
86876
+ command: "sendCommandAndGetResult",
86877
+ parameters: [
86878
+ { name: "cmd", type: "string", required: true, description: "" },
86879
+ { name: "params", type: "object", required: true, description: "" }
86880
+ ],
86881
+ description: "Send a command to the DevTools debugger and wait for the result.",
86882
+ ref: ""
86883
+ }));
86884
+ }
86885
+ return transformedDriver;
86661
86886
  }
86662
86887
  exports.toDriver = toDriver;
86663
86888
  function toElement(element) {
@@ -86768,14 +86993,8 @@ var require_spec_driver2 = __commonJS({
86768
86993
  exports.getDriverInfo = getDriverInfo;
86769
86994
  async function getCapabilities(driver) {
86770
86995
  var _a;
86771
- try {
86772
- const capabilities = await ((_a = driver.getSession) === null || _a === void 0 ? void 0 : _a.call(driver));
86773
- return utils34.types.isObject(capabilities) ? capabilities : driver.capabilities;
86774
- } catch (error) {
86775
- if (/Cannot call non W3C standard command while in W3C mode/i.test(error.message))
86776
- return driver.capabilities;
86777
- throw new Error(`Unable to retrieve capabilities due to an error. The original error is ${error.message}`);
86778
- }
86996
+ const capabilities = await ((_a = driver.getSession) === null || _a === void 0 ? void 0 : _a.call(driver).catch(() => null));
86997
+ return utils34.types.isObject(capabilities) ? capabilities : driver.capabilities;
86779
86998
  }
86780
86999
  exports.getCapabilities = getCapabilities;
86781
87000
  async function getWindowSize(driver) {
@@ -88225,7 +88444,7 @@ var require_package3 = __commonJS({
88225
88444
  "../eyes/package.json"(exports, module) {
88226
88445
  module.exports = {
88227
88446
  name: "@applitools/eyes",
88228
- version: "1.13.6",
88447
+ version: "1.14.0",
88229
88448
  keywords: [
88230
88449
  "applitools",
88231
88450
  "eyes",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/eyes-browser",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "keywords": [
5
5
  "applitools",
6
6
  "browser",
@@ -48,7 +48,7 @@
48
48
  "test": "run --top-level mocha './test/**/*.spec.ts'"
49
49
  },
50
50
  "dependencies": {
51
- "@applitools/eyes": "1.13.6"
51
+ "@applitools/eyes": "1.14.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/node": "^12.20.55",