@applitools/core 3.10.2 → 3.10.3
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 +7 -0
- package/dist/ufg/check-and-close.js +34 -50
- package/dist/ufg/check.js +34 -51
- package/dist/ufg/utils/calculate-regions.js +31 -0
- package/dist/ufg/utils/take-dom-snapshots.js +32 -10
- package/package.json +1 -1
- package/types/ufg/types.d.ts +12 -3
- package/types/ufg/utils/calculate-regions.d.ts +22 -0
- package/types/ufg/utils/take-dom-snapshots.d.ts +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.10.3](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.10.2...js/core@3.10.3) (2023-09-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* suppport coded regions with layoutBreakpoints reload ([7903347](https://github.com/applitools/eyes.sdk.javascript1/commit/79033472b9475992a44cf3828ff334c958ae2066))
|
|
9
|
+
|
|
3
10
|
## [3.10.2](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.10.1...js/core@3.10.2) (2023-09-05)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -31,7 +31,6 @@ const driver_1 = require("@applitools/driver");
|
|
|
31
31
|
const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
|
|
32
32
|
const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
|
|
33
33
|
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
34
|
-
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
34
|
const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
|
|
36
35
|
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
37
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
@@ -39,7 +38,7 @@ const utils = __importStar(require("@applitools/utils"));
|
|
|
39
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
40
39
|
function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
41
40
|
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
42
|
-
var _a, _b, _c
|
|
41
|
+
var _a, _b, _c;
|
|
43
42
|
logger = logger.extend(mainLogger);
|
|
44
43
|
logger.log('Command "checkAndClose" is called with settings', settings);
|
|
45
44
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
@@ -58,53 +57,20 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
58
57
|
},
|
|
59
58
|
logger,
|
|
60
59
|
});
|
|
61
|
-
let
|
|
60
|
+
let snapshotResults;
|
|
62
61
|
let snapshotUrl;
|
|
63
62
|
let snapshotTitle;
|
|
64
63
|
let userAgent;
|
|
65
|
-
let regionToTarget;
|
|
66
|
-
let scrollRootSelector;
|
|
67
|
-
let selectorsToCalculate;
|
|
68
64
|
const driver = spec && (0, driver_1.isDriver)(target, spec)
|
|
69
65
|
? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
|
|
70
66
|
: null;
|
|
71
67
|
if (driver) {
|
|
72
68
|
const environment = await driver.getEnvironment();
|
|
73
|
-
let cleanupGeneratedSelectors;
|
|
74
|
-
if (environment.isWeb) {
|
|
75
|
-
userAgent = await driver.getUserAgentLegacy();
|
|
76
|
-
const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
77
|
-
context: driver.currentContext,
|
|
78
|
-
elementReferences: [
|
|
79
|
-
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
80
|
-
...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
|
|
81
|
-
...elementReferencesToCalculate,
|
|
82
|
-
],
|
|
83
|
-
});
|
|
84
|
-
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
85
|
-
selectorsToCalculate = generated.selectors;
|
|
86
|
-
if (elementReferenceToTarget) {
|
|
87
|
-
if (!((_b = selectorsToCalculate[0]) === null || _b === void 0 ? void 0 : _b.safeSelector))
|
|
88
|
-
throw new Error('Target element not found');
|
|
89
|
-
regionToTarget = selectorsToCalculate[0].safeSelector;
|
|
90
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
91
|
-
}
|
|
92
|
-
if (settings.scrollRootElement) {
|
|
93
|
-
scrollRootSelector = (_c = selectorsToCalculate[0].safeSelector) !== null && _c !== void 0 ? _c : undefined;
|
|
94
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
99
|
-
? (_e = (_d = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _d === void 0 ? void 0 : _d.call(spec, settings.scrollRootElement)) !== null && _e !== void 0 ? _e : undefined
|
|
100
|
-
: undefined;
|
|
101
|
-
scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
102
|
-
? (_g = (_f = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _f === void 0 ? void 0 : _f.call(spec, settings.scrollRootElement)) !== null && _g !== void 0 ? _g : undefined
|
|
103
|
-
: undefined;
|
|
104
|
-
}
|
|
105
69
|
const currentContext = driver.currentContext;
|
|
70
|
+
await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
106
71
|
if (environment.isWeb) {
|
|
107
|
-
|
|
72
|
+
userAgent = await driver.getUserAgentLegacy();
|
|
73
|
+
snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
108
74
|
driver,
|
|
109
75
|
settings: {
|
|
110
76
|
...eyes.test.eyesServer,
|
|
@@ -113,6 +79,11 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
113
79
|
layoutBreakpoints: settings.layoutBreakpoints,
|
|
114
80
|
renderers: uniqueRenderers,
|
|
115
81
|
skipResources: ufgClient.getCachedResourceUrls(),
|
|
82
|
+
calculateRegionsOptions: {
|
|
83
|
+
elementReferencesToCalculate,
|
|
84
|
+
elementReferenceToTarget,
|
|
85
|
+
scrollRootElement: settings.scrollRootElement,
|
|
86
|
+
},
|
|
116
87
|
},
|
|
117
88
|
hooks: {
|
|
118
89
|
async beforeSnapshots() {
|
|
@@ -138,7 +109,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
138
109
|
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
139
110
|
logger,
|
|
140
111
|
});
|
|
141
|
-
snapshots = (await nmlClient.takeSnapshots({
|
|
112
|
+
const snapshots = (await nmlClient.takeSnapshots({
|
|
142
113
|
settings: {
|
|
143
114
|
...eyes.test.eyesServer,
|
|
144
115
|
waitBeforeCapture: settings.waitBeforeCapture,
|
|
@@ -146,22 +117,29 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
146
117
|
},
|
|
147
118
|
logger,
|
|
148
119
|
}));
|
|
120
|
+
snapshotResults = snapshots.map(snapshot => {
|
|
121
|
+
var _a, _b, _c, _d;
|
|
122
|
+
return ({
|
|
123
|
+
snapshot,
|
|
124
|
+
regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
125
|
+
? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
|
|
126
|
+
: undefined,
|
|
127
|
+
scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
128
|
+
? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
|
|
129
|
+
: undefined,
|
|
130
|
+
});
|
|
131
|
+
});
|
|
149
132
|
}
|
|
150
133
|
await currentContext.focus();
|
|
151
134
|
snapshotUrl = await driver.getUrl();
|
|
152
135
|
snapshotTitle = await driver.getTitle();
|
|
153
|
-
await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
|
|
154
136
|
}
|
|
155
137
|
else {
|
|
156
|
-
|
|
157
|
-
snapshotUrl = utils.types.has(
|
|
138
|
+
snapshotResults = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
|
|
139
|
+
snapshotUrl = utils.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, 'url') ? snapshotResults[0].snapshot.url : undefined;
|
|
158
140
|
}
|
|
159
|
-
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_h = elementReferenceToTarget) !== null && _h !== void 0 ? _h : settings.region);
|
|
160
|
-
selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
|
|
161
|
-
originalSelector: selector,
|
|
162
|
-
safeSelector: selector,
|
|
163
|
-
})));
|
|
164
141
|
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
142
|
+
var _a;
|
|
165
143
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
166
144
|
const ufgRenderer = renderer;
|
|
167
145
|
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
@@ -173,7 +151,13 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
173
151
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
174
152
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
175
153
|
}
|
|
176
|
-
const {
|
|
154
|
+
const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector, } = snapshotResults[index];
|
|
155
|
+
const { cookies, ...snapshot } = snapshotFromResult;
|
|
156
|
+
const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
|
|
157
|
+
const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
|
|
158
|
+
originalSelector: selector,
|
|
159
|
+
safeSelector: selector,
|
|
160
|
+
}));
|
|
177
161
|
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
178
162
|
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
179
163
|
}
|
|
@@ -215,7 +199,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
|
|
|
215
199
|
target: renderTarget,
|
|
216
200
|
settings: {
|
|
217
201
|
...settings,
|
|
218
|
-
region
|
|
202
|
+
region,
|
|
219
203
|
scrollRootElement: scrollRootSelector,
|
|
220
204
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
221
205
|
includeFullPageSize: !!settings.pageId,
|
package/dist/ufg/check.js
CHANGED
|
@@ -31,7 +31,6 @@ const driver_1 = require("@applitools/driver");
|
|
|
31
31
|
const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
|
|
32
32
|
const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
|
|
33
33
|
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
34
|
-
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
34
|
const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
|
|
36
35
|
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
37
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
@@ -39,7 +38,7 @@ const utils = __importStar(require("@applitools/utils"));
|
|
|
39
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
40
39
|
function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
41
40
|
return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
42
|
-
var _a, _b, _c
|
|
41
|
+
var _a, _b, _c;
|
|
43
42
|
logger = logger.extend(mainLogger);
|
|
44
43
|
logger.log('Command "check" is called with settings', settings);
|
|
45
44
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
@@ -58,54 +57,20 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
58
57
|
},
|
|
59
58
|
logger,
|
|
60
59
|
});
|
|
61
|
-
let
|
|
60
|
+
let snapshotResults;
|
|
62
61
|
let snapshotUrl;
|
|
63
62
|
let snapshotTitle;
|
|
64
63
|
let userAgent;
|
|
65
|
-
let regionToTarget;
|
|
66
|
-
let scrollRootSelector;
|
|
67
|
-
let selectorsToCalculate;
|
|
68
64
|
const driver = spec && (0, driver_1.isDriver)(target, spec)
|
|
69
65
|
? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
|
|
70
66
|
: null;
|
|
71
67
|
if (driver) {
|
|
72
68
|
const environment = await driver.getEnvironment();
|
|
73
|
-
await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
74
|
-
let cleanupGeneratedSelectors;
|
|
75
|
-
if (environment.isWeb) {
|
|
76
|
-
userAgent = await driver.getUserAgentLegacy();
|
|
77
|
-
const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
78
|
-
context: driver.currentContext,
|
|
79
|
-
elementReferences: [
|
|
80
|
-
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
81
|
-
...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
|
|
82
|
-
...elementReferencesToCalculate,
|
|
83
|
-
],
|
|
84
|
-
});
|
|
85
|
-
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
86
|
-
selectorsToCalculate = generated.selectors;
|
|
87
|
-
if (elementReferenceToTarget) {
|
|
88
|
-
if (!((_c = selectorsToCalculate[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
|
|
89
|
-
throw new Error('Target element not found');
|
|
90
|
-
regionToTarget = selectorsToCalculate[0].safeSelector;
|
|
91
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
92
|
-
}
|
|
93
|
-
if (settings.scrollRootElement) {
|
|
94
|
-
scrollRootSelector = (_d = selectorsToCalculate[0].safeSelector) !== null && _d !== void 0 ? _d : undefined;
|
|
95
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
100
|
-
? (_f = (_e = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _e === void 0 ? void 0 : _e.call(spec, settings.scrollRootElement)) !== null && _f !== void 0 ? _f : undefined
|
|
101
|
-
: undefined;
|
|
102
|
-
scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
103
|
-
? (_h = (_g = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _g === void 0 ? void 0 : _g.call(spec, settings.scrollRootElement)) !== null && _h !== void 0 ? _h : undefined
|
|
104
|
-
: undefined;
|
|
105
|
-
}
|
|
106
69
|
const currentContext = driver.currentContext;
|
|
70
|
+
await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
107
71
|
if (environment.isWeb) {
|
|
108
|
-
|
|
72
|
+
userAgent = await driver.getUserAgentLegacy();
|
|
73
|
+
snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
109
74
|
driver,
|
|
110
75
|
settings: {
|
|
111
76
|
...eyes.test.eyesServer,
|
|
@@ -114,6 +79,11 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
114
79
|
layoutBreakpoints: settings.layoutBreakpoints,
|
|
115
80
|
renderers: uniqueRenderers,
|
|
116
81
|
skipResources: ufgClient.getCachedResourceUrls(),
|
|
82
|
+
calculateRegionsOptions: {
|
|
83
|
+
elementReferencesToCalculate,
|
|
84
|
+
elementReferenceToTarget,
|
|
85
|
+
scrollRootElement: settings.scrollRootElement,
|
|
86
|
+
},
|
|
117
87
|
},
|
|
118
88
|
hooks: {
|
|
119
89
|
async beforeSnapshots() {
|
|
@@ -139,7 +109,7 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
139
109
|
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
140
110
|
logger,
|
|
141
111
|
});
|
|
142
|
-
snapshots = (await nmlClient.takeSnapshots({
|
|
112
|
+
const snapshots = (await nmlClient.takeSnapshots({
|
|
143
113
|
settings: {
|
|
144
114
|
...eyes.test.eyesServer,
|
|
145
115
|
waitBeforeCapture: settings.waitBeforeCapture,
|
|
@@ -147,22 +117,29 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
147
117
|
},
|
|
148
118
|
logger,
|
|
149
119
|
}));
|
|
120
|
+
snapshotResults = snapshots.map(snapshot => {
|
|
121
|
+
var _a, _b, _c, _d;
|
|
122
|
+
return ({
|
|
123
|
+
snapshot,
|
|
124
|
+
regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
125
|
+
? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
|
|
126
|
+
: undefined,
|
|
127
|
+
scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
128
|
+
? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
|
|
129
|
+
: undefined,
|
|
130
|
+
});
|
|
131
|
+
});
|
|
150
132
|
}
|
|
151
133
|
await currentContext.focus();
|
|
152
134
|
snapshotUrl = await driver.getUrl();
|
|
153
135
|
snapshotTitle = await driver.getTitle();
|
|
154
|
-
await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
|
|
155
136
|
}
|
|
156
137
|
else {
|
|
157
|
-
|
|
158
|
-
snapshotUrl = utils.types.has(
|
|
138
|
+
snapshotResults = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
|
|
139
|
+
snapshotUrl = utils.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, 'url') ? snapshotResults[0].snapshot.url : undefined;
|
|
159
140
|
}
|
|
160
|
-
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_j = elementReferenceToTarget) !== null && _j !== void 0 ? _j : settings.region);
|
|
161
|
-
selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
|
|
162
|
-
originalSelector: selector,
|
|
163
|
-
safeSelector: selector,
|
|
164
|
-
})));
|
|
165
141
|
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
142
|
+
var _a;
|
|
166
143
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
167
144
|
const ufgRenderer = renderer;
|
|
168
145
|
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
@@ -174,7 +151,13 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
174
151
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
175
152
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
176
153
|
}
|
|
177
|
-
const {
|
|
154
|
+
const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector, } = snapshotResults[index];
|
|
155
|
+
const { cookies, ...snapshot } = snapshotFromResult;
|
|
156
|
+
const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
|
|
157
|
+
const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
|
|
158
|
+
originalSelector: selector,
|
|
159
|
+
safeSelector: selector,
|
|
160
|
+
}));
|
|
178
161
|
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
179
162
|
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
180
163
|
}
|
|
@@ -216,7 +199,7 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
|
|
|
216
199
|
target: renderTarget,
|
|
217
200
|
settings: {
|
|
218
201
|
...settings,
|
|
219
|
-
region
|
|
202
|
+
region,
|
|
220
203
|
scrollRootElement: scrollRootSelector,
|
|
221
204
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
222
205
|
includeFullPageSize: Boolean(settings.pageId),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateRegions = void 0;
|
|
4
|
+
const generate_safe_selectors_1 = require("../utils/generate-safe-selectors");
|
|
5
|
+
async function calculateRegions({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }) {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
const elementReferences = [
|
|
8
|
+
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
9
|
+
...(scrollRootElement ? [scrollRootElement] : []),
|
|
10
|
+
...elementReferencesToCalculate,
|
|
11
|
+
];
|
|
12
|
+
const { cleanupGeneratedSelectors, selectors } = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
13
|
+
context: driver.currentContext,
|
|
14
|
+
elementReferences,
|
|
15
|
+
});
|
|
16
|
+
let selectorsToCalculate = selectors;
|
|
17
|
+
let regionToTarget;
|
|
18
|
+
let scrollRootSelector;
|
|
19
|
+
if (elementReferenceToTarget) {
|
|
20
|
+
if (!((_a = selectorsToCalculate[0]) === null || _a === void 0 ? void 0 : _a.safeSelector))
|
|
21
|
+
throw new Error('Target element not found');
|
|
22
|
+
regionToTarget = selectorsToCalculate[0].safeSelector;
|
|
23
|
+
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
24
|
+
}
|
|
25
|
+
if (scrollRootElement) {
|
|
26
|
+
scrollRootSelector = (_b = selectorsToCalculate[0].safeSelector) !== null && _b !== void 0 ? _b : undefined;
|
|
27
|
+
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
28
|
+
}
|
|
29
|
+
return { cleanupGeneratedSelectors, selectorsToCalculate, regionToTarget, scrollRootSelector };
|
|
30
|
+
}
|
|
31
|
+
exports.calculateRegions = calculateRegions;
|
|
@@ -33,10 +33,12 @@ exports.takeDomSnapshots = void 0;
|
|
|
33
33
|
const take_dom_snapshot_1 = require("./take-dom-snapshot");
|
|
34
34
|
const utils = __importStar(require("@applitools/utils"));
|
|
35
35
|
const chalk_1 = __importDefault(require("chalk"));
|
|
36
|
+
const calculate_regions_1 = require("./calculate-regions");
|
|
36
37
|
__exportStar(require("./take-dom-snapshot"), exports);
|
|
37
38
|
async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
|
|
38
|
-
var _a, _b, _c, _d, _e;
|
|
39
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
39
40
|
const currentContext = driver.currentContext;
|
|
41
|
+
let calculateRegionsResults = {};
|
|
40
42
|
const waitBeforeCapture = async () => {
|
|
41
43
|
if (utils.types.isFunction(settings.waitBeforeCapture)) {
|
|
42
44
|
await settings.waitBeforeCapture();
|
|
@@ -46,14 +48,21 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
46
48
|
}
|
|
47
49
|
};
|
|
48
50
|
await ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.beforeSnapshots) === null || _a === void 0 ? void 0 : _a.call(hooks));
|
|
51
|
+
if (!((_b = settings.layoutBreakpoints) === null || _b === void 0 ? void 0 : _b.reload) && settings.calculateRegionsOptions) {
|
|
52
|
+
calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
|
|
53
|
+
...settings.calculateRegionsOptions,
|
|
54
|
+
driver,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
49
57
|
if (!settings.layoutBreakpoints) {
|
|
50
58
|
logger.log(`taking single dom snapshot`);
|
|
51
|
-
await ((
|
|
59
|
+
await ((_c = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _c === void 0 ? void 0 : _c.call(hooks));
|
|
52
60
|
await waitBeforeCapture();
|
|
53
61
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
54
|
-
|
|
62
|
+
await ((_d = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _d === void 0 ? void 0 : _d.call(calculateRegionsResults));
|
|
63
|
+
return Array(settings.renderers.length).fill({ snapshot, ...calculateRegionsResults });
|
|
55
64
|
}
|
|
56
|
-
const isStrictBreakpoints = utils.types.isArray((
|
|
65
|
+
const isStrictBreakpoints = utils.types.isArray((_e = settings.layoutBreakpoints) === null || _e === void 0 ? void 0 : _e.breakpoints);
|
|
57
66
|
const requiredWidths = await settings.renderers.reduce(async (prev, renderer, index) => {
|
|
58
67
|
const { name, width } = (await extractRendererInfo({ renderer }));
|
|
59
68
|
const requiredWidths = await prev;
|
|
@@ -78,13 +87,15 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
78
87
|
logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints.breakpoints);
|
|
79
88
|
logger.log(`required widths: ${[...requiredWidths.keys()].join(', ')}`);
|
|
80
89
|
const viewportSize = await driver.getViewportSize();
|
|
81
|
-
const
|
|
90
|
+
const snapshotsResults = Array(settings.renderers.length);
|
|
82
91
|
if (requiredWidths.has(viewportSize.width)) {
|
|
83
92
|
logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
|
|
84
|
-
await ((
|
|
93
|
+
await ((_f = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _f === void 0 ? void 0 : _f.call(hooks));
|
|
85
94
|
await waitBeforeCapture();
|
|
86
95
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
87
|
-
requiredWidths.get(viewportSize.width).forEach(({ index }) =>
|
|
96
|
+
requiredWidths.get(viewportSize.width).forEach(({ index }) => {
|
|
97
|
+
snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
|
|
98
|
+
});
|
|
88
99
|
}
|
|
89
100
|
for (const [requiredWidth, browsersInfo] of requiredWidths.entries()) {
|
|
90
101
|
logger.log(`taking dom snapshot for width ${requiredWidth}`);
|
|
@@ -93,6 +104,12 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
93
104
|
if (settings.layoutBreakpoints.reload) {
|
|
94
105
|
await driver.reloadPage();
|
|
95
106
|
await waitBeforeCapture();
|
|
107
|
+
if (settings.calculateRegionsOptions) {
|
|
108
|
+
calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
|
|
109
|
+
...settings.calculateRegionsOptions,
|
|
110
|
+
driver,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
96
113
|
}
|
|
97
114
|
}
|
|
98
115
|
catch (err) {
|
|
@@ -111,17 +128,22 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
111
128
|
logger.log(message);
|
|
112
129
|
}
|
|
113
130
|
}
|
|
114
|
-
await ((
|
|
131
|
+
await ((_g = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _g === void 0 ? void 0 : _g.call(hooks));
|
|
115
132
|
await waitBeforeCapture();
|
|
116
133
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
117
|
-
browsersInfo.forEach(({ index }) =>
|
|
134
|
+
browsersInfo.forEach(({ index }) => {
|
|
135
|
+
snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
|
|
136
|
+
});
|
|
118
137
|
}
|
|
119
138
|
await driver.setViewportSize(viewportSize);
|
|
120
139
|
if (settings.layoutBreakpoints.reload) {
|
|
121
140
|
await driver.reloadPage();
|
|
122
141
|
await waitBeforeCapture();
|
|
123
142
|
}
|
|
124
|
-
|
|
143
|
+
else {
|
|
144
|
+
(_h = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _h === void 0 ? void 0 : _h.call(calculateRegionsResults);
|
|
145
|
+
}
|
|
146
|
+
return snapshotsResults;
|
|
125
147
|
function calculateBreakpoint({ breakpoints, value }) {
|
|
126
148
|
const nextBreakpointIndex = breakpoints
|
|
127
149
|
.sort((item1, item2) => (item1 > item2 ? 1 : -1))
|
package/package.json
CHANGED
package/types/ufg/types.d.ts
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
import type { MaybeArray } from '@applitools/utils';
|
|
1
|
+
import type { MaybeArray, Region } from '@applitools/utils';
|
|
2
2
|
import type * as AutomationCore from '../automation/types';
|
|
3
|
-
import { type SpecType } from '@applitools/driver';
|
|
3
|
+
import { type Selector, type SpecType } from '@applitools/driver';
|
|
4
4
|
import { type Logger } from '@applitools/logger';
|
|
5
5
|
import { type Proxy } from '@applitools/req';
|
|
6
6
|
import { type UFGClient, type UFGClientSettings, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
|
|
7
7
|
export * from '../automation/types';
|
|
8
|
-
export type SnapshotTarget = MaybeArray<DomSnapshot
|
|
8
|
+
export type SnapshotTarget = MaybeArray<SnapshotResult<DomSnapshot>> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
|
|
9
9
|
export type Target<TSpec extends SpecType> = SnapshotTarget | AutomationCore.Target<TSpec>;
|
|
10
|
+
export type SnapshotResult<TSnapshotType extends DomSnapshot | AndroidSnapshot | IOSSnapshot> = {
|
|
11
|
+
snapshot: TSnapshotType;
|
|
12
|
+
selectorsToCalculate?: {
|
|
13
|
+
originalSelector: Selector | null;
|
|
14
|
+
safeSelector: Selector | null;
|
|
15
|
+
}[];
|
|
16
|
+
regionToTarget?: Selector | Region;
|
|
17
|
+
scrollRootSelector?: Selector;
|
|
18
|
+
};
|
|
10
19
|
export interface Core<TSpec extends SpecType> extends AutomationCore.Core<TSpec> {
|
|
11
20
|
readonly type: 'ufg';
|
|
12
21
|
getUFGClient(options?: {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SpecType, Driver, ElementReference } from '@applitools/driver';
|
|
2
|
+
export type CalculateRegionsOptions = {
|
|
3
|
+
elementReferencesToCalculate: ElementReference<SpecType>[];
|
|
4
|
+
elementReferenceToTarget?: ElementReference<SpecType>;
|
|
5
|
+
scrollRootElement?: ElementReference<SpecType>;
|
|
6
|
+
};
|
|
7
|
+
export declare function calculateRegions<TSpec extends SpecType>({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }: {
|
|
8
|
+
driver: Driver<TSpec>;
|
|
9
|
+
} & CalculateRegionsOptions): Promise<{
|
|
10
|
+
cleanupGeneratedSelectors: () => Promise<void>;
|
|
11
|
+
selectorsToCalculate: ({
|
|
12
|
+
safeSelector: null;
|
|
13
|
+
originalSelector: null;
|
|
14
|
+
elementReference: ElementReference<TSpec>;
|
|
15
|
+
} | {
|
|
16
|
+
safeSelector: import("@applitools/driver").CommonSelector;
|
|
17
|
+
originalSelector: import("@applitools/driver").CommonSelector | null;
|
|
18
|
+
elementReference: ElementReference<TSpec>;
|
|
19
|
+
})[];
|
|
20
|
+
regionToTarget: import("@applitools/driver").CommonSelector | undefined;
|
|
21
|
+
scrollRootSelector: import("@applitools/driver").CommonSelector | undefined;
|
|
22
|
+
}>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Size } from '@applitools/utils';
|
|
2
2
|
import { type Logger } from '@applitools/logger';
|
|
3
3
|
import { type SpecType, type Driver } from '@applitools/driver';
|
|
4
4
|
import { type DomSnapshot, type Renderer } from '@applitools/ufg-client';
|
|
5
5
|
import { type DomSnapshotSettings } from './take-dom-snapshot';
|
|
6
|
+
import { type CalculateRegionsOptions } from './calculate-regions';
|
|
7
|
+
import { SnapshotResult } from '../types';
|
|
6
8
|
export * from './take-dom-snapshot';
|
|
7
9
|
export type DomSnapshotsSettings = DomSnapshotSettings & {
|
|
8
10
|
renderers: Renderer[];
|
|
@@ -11,6 +13,7 @@ export type DomSnapshotsSettings = DomSnapshotSettings & {
|
|
|
11
13
|
breakpoints: number[] | boolean;
|
|
12
14
|
reload?: boolean;
|
|
13
15
|
};
|
|
16
|
+
calculateRegionsOptions?: CalculateRegionsOptions;
|
|
14
17
|
};
|
|
15
18
|
export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, settings, hooks, provides, logger, }: {
|
|
16
19
|
driver: Driver<TSpec>;
|
|
@@ -24,4 +27,4 @@ export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, setti
|
|
|
24
27
|
getIOSDevices(): Promise<Record<string, Record<string, Size>>>;
|
|
25
28
|
};
|
|
26
29
|
logger: Logger;
|
|
27
|
-
}): Promise<DomSnapshot[]>;
|
|
30
|
+
}): Promise<SnapshotResult<DomSnapshot>[]>;
|