@applitools/core 3.9.1 → 3.10.1
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 +107 -0
- package/dist/abort.js +40 -0
- package/dist/{ufg → automation}/abort.js +19 -3
- package/dist/{ufg → automation}/close.js +19 -3
- package/dist/automation/get-nml-client.js +3 -3
- package/dist/{ufg → automation}/get-results.js +4 -4
- package/dist/automation/utils/extract-renderer-key.js +35 -0
- package/dist/check-and-close.js +1 -10
- package/dist/check.js +8 -17
- package/dist/classic/check-and-close.js +125 -68
- package/dist/classic/check.js +108 -63
- package/dist/classic/core.js +4 -4
- package/dist/classic/get-base-eyes.js +30 -7
- package/dist/classic/open-eyes.js +42 -56
- package/dist/classic/utils/extract-default-renderers.js +72 -0
- package/dist/classic/utils/take-screenshots.js +60 -0
- package/dist/close.js +6 -3
- package/dist/core.js +4 -4
- package/dist/get-typed-eyes.js +3 -5
- package/dist/make-manager.js +2 -2
- package/dist/open-eyes.js +13 -10
- package/dist/ufg/check-and-close.js +61 -53
- package/dist/ufg/check.js +62 -59
- package/dist/ufg/core.js +2 -2
- package/dist/ufg/get-base-eyes.js +22 -13
- package/dist/ufg/open-eyes.js +24 -37
- package/dist/ufg/utils/extract-default-renderers.js +22 -0
- package/dist/universal/core.js +1 -0
- package/package.json +15 -15
- package/types/abort.d.ts +13 -0
- package/types/{classic → automation}/abort.d.ts +5 -4
- package/types/{classic → automation}/close.d.ts +3 -4
- package/types/automation/get-nml-client.d.ts +3 -3
- package/types/automation/get-results.d.ts +11 -0
- package/types/automation/types.d.ts +78 -8
- package/types/automation/utils/extract-renderer-key.d.ts +2 -0
- package/types/{ufg → automation}/utils/uniquify-renderers.d.ts +1 -1
- package/types/check.d.ts +2 -2
- package/types/classic/check-and-close.d.ts +11 -4
- package/types/classic/check.d.ts +6 -3
- package/types/classic/core.d.ts +2 -1
- package/types/classic/get-base-eyes.d.ts +4 -8
- package/types/classic/open-eyes.d.ts +3 -4
- package/types/classic/types.d.ts +3 -4
- package/types/classic/utils/extract-default-renderers.d.ts +9 -0
- package/types/classic/utils/take-screenshots.d.ts +18 -0
- package/types/close.d.ts +3 -2
- package/types/core.d.ts +7 -1
- package/types/get-typed-eyes.d.ts +5 -4
- package/types/make-manager.d.ts +7 -1
- package/types/open-eyes.d.ts +7 -1
- package/types/types.d.ts +5 -8
- package/types/ufg/check-and-close.d.ts +8 -12
- package/types/ufg/check.d.ts +4 -9
- package/types/ufg/core.d.ts +3 -3
- package/types/ufg/get-base-eyes.d.ts +3 -7
- package/types/ufg/open-eyes.d.ts +3 -4
- package/types/ufg/types.d.ts +3 -24
- package/types/ufg/utils/extract-default-renderers.d.ts +5 -0
- package/types/ufg/utils/take-dom-snapshots.d.ts +3 -3
- package/dist/classic/abort.js +0 -23
- package/dist/classic/close.js +0 -23
- package/types/ufg/abort.d.ts +0 -21
- package/types/ufg/close.d.ts +0 -19
- package/types/ufg/get-results.d.ts +0 -16
- /package/dist/{ufg → automation}/utils/uniquify-renderers.js +0 -0
package/dist/open-eyes.js
CHANGED
|
@@ -31,12 +31,13 @@ const get_typed_eyes_1 = require("./get-typed-eyes");
|
|
|
31
31
|
const check_1 = require("./check");
|
|
32
32
|
const check_and_close_1 = require("./check-and-close");
|
|
33
33
|
const close_1 = require("./close");
|
|
34
|
+
const abort_1 = require("./abort");
|
|
34
35
|
const get_eyes_results_1 = require("./get-eyes-results");
|
|
35
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
|
-
function makeOpenEyes({ type: defaultType = 'classic', concurrency, batch, core, cores, spec, environment, logger: mainLogger, }) {
|
|
37
|
+
function makeOpenEyes({ type: defaultType = 'classic', clients, concurrency, batch, core, cores, spec, environment, logger: mainLogger, }) {
|
|
37
38
|
return async function openEyes({ type = defaultType, settings, config, target, logger = mainLogger, }) {
|
|
38
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
39
|
-
var
|
|
39
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
40
|
+
var _v, _w, _x, _y;
|
|
40
41
|
logger = logger.extend(mainLogger, { tags: [`eyes-${type}-${utils.general.shortid()}`] });
|
|
41
42
|
settings = { ...config === null || config === void 0 ? void 0 : config.open, ...settings };
|
|
42
43
|
(_a = settings.userTestId) !== null && _a !== void 0 ? _a : (settings.userTestId = `${settings.testName}--${utils.general.guid()}`);
|
|
@@ -44,10 +45,10 @@ function makeOpenEyes({ type: defaultType = 'classic', concurrency, batch, core,
|
|
|
44
45
|
(_f = settings.apiKey) !== null && _f !== void 0 ? _f : (settings.apiKey = utils.general.getEnvValue('API_KEY'));
|
|
45
46
|
(_g = settings.useDnsCache) !== null && _g !== void 0 ? _g : (settings.useDnsCache = utils.general.getEnvValue('USE_DNS_CACHE', 'boolean'));
|
|
46
47
|
settings.batch = { ...batch, ...settings.batch };
|
|
47
|
-
(_h = (
|
|
48
|
-
(_k = (
|
|
49
|
-
(_l = (
|
|
50
|
-
(_m = (
|
|
48
|
+
(_h = (_v = settings.batch).id) !== null && _h !== void 0 ? _h : (_v.id = (_j = utils.general.getEnvValue('BATCH_ID')) !== null && _j !== void 0 ? _j : `generated-${utils.general.guid()}`);
|
|
49
|
+
(_k = (_w = settings.batch).name) !== null && _k !== void 0 ? _k : (_w.name = utils.general.getEnvValue('BATCH_NAME'));
|
|
50
|
+
(_l = (_x = settings.batch).sequenceName) !== null && _l !== void 0 ? _l : (_x.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
|
|
51
|
+
(_m = (_y = settings.batch).notifyOnCompletion) !== null && _m !== void 0 ? _m : (_y.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
|
|
51
52
|
(_o = settings.keepBatchOpen) !== null && _o !== void 0 ? _o : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean'));
|
|
52
53
|
(_p = settings.branchName) !== null && _p !== void 0 ? _p : (settings.branchName = utils.general.getEnvValue('BRANCH'));
|
|
53
54
|
(_q = settings.parentBranchName) !== null && _q !== void 0 ? _q : (settings.parentBranchName = utils.general.getEnvValue('PARENT_BRANCH'));
|
|
@@ -55,6 +56,7 @@ function makeOpenEyes({ type: defaultType = 'classic', concurrency, batch, core,
|
|
|
55
56
|
(_s = settings.ignoreBaseline) !== null && _s !== void 0 ? _s : (settings.ignoreBaseline = false);
|
|
56
57
|
(_t = settings.compareWithParentBranch) !== null && _t !== void 0 ? _t : (settings.compareWithParentBranch = false);
|
|
57
58
|
const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: settings }));
|
|
59
|
+
const renderers = (_u = config === null || config === void 0 ? void 0 : config.check) === null || _u === void 0 ? void 0 : _u.renderers;
|
|
58
60
|
core.logEvent({
|
|
59
61
|
settings: {
|
|
60
62
|
...settings,
|
|
@@ -73,8 +75,8 @@ function makeOpenEyes({ type: defaultType = 'classic', concurrency, batch, core,
|
|
|
73
75
|
settings: settings,
|
|
74
76
|
target: driver,
|
|
75
77
|
cores: cores !== null && cores !== void 0 ? cores : {
|
|
76
|
-
ufg: (0, core_2.makeCore)({ spec, base: core.base, concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : 5, logger }),
|
|
77
|
-
classic: (0, core_1.makeCore)({ spec, base: core.base, logger }),
|
|
78
|
+
ufg: (0, core_2.makeCore)({ spec, clients, base: core.base, concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : 5, logger }),
|
|
79
|
+
classic: (0, core_1.makeCore)({ spec, clients, base: core.base, logger }),
|
|
78
80
|
},
|
|
79
81
|
logger,
|
|
80
82
|
});
|
|
@@ -83,7 +85,8 @@ function makeOpenEyes({ type: defaultType = 'classic', concurrency, batch, core,
|
|
|
83
85
|
getTypedEyes,
|
|
84
86
|
check: (0, check_1.makeCheck)({ type, eyes, target: driver, spec, logger }),
|
|
85
87
|
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ type, eyes, target: driver, spec, logger }),
|
|
86
|
-
close: (0, close_1.makeClose)({ eyes, logger }),
|
|
88
|
+
close: (0, close_1.makeClose)({ eyes, renderers, logger }),
|
|
89
|
+
abort: (0, abort_1.makeAbort)({ eyes, renderers, logger }),
|
|
87
90
|
getResults: (0, get_eyes_results_1.makeGetEyesResults)({ eyes, logger }),
|
|
88
91
|
})); // TODO solve the types issue
|
|
89
92
|
};
|
|
@@ -32,11 +32,12 @@ 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
34
|
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
|
-
const uniquify_renderers_1 = require("
|
|
35
|
+
const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
|
|
36
|
+
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
36
37
|
const abort_error_1 = require("../errors/abort-error");
|
|
37
38
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
|
-
function makeCheckAndClose({ eyes,
|
|
40
|
+
function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
40
41
|
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
42
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
42
43
|
logger = logger.extend(mainLogger);
|
|
@@ -48,7 +49,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
48
49
|
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
49
50
|
settings,
|
|
50
51
|
});
|
|
51
|
-
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a :
|
|
52
|
+
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : defaultRenderers);
|
|
52
53
|
const ufgClient = await eyes.core.getUFGClient({
|
|
53
54
|
settings: {
|
|
54
55
|
...eyes.test.ufgServer,
|
|
@@ -69,15 +70,6 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
69
70
|
: null;
|
|
70
71
|
if (driver) {
|
|
71
72
|
const environment = await driver.getEnvironment();
|
|
72
|
-
if (uniqueRenderers.length === 0) {
|
|
73
|
-
if (environment.isWeb) {
|
|
74
|
-
const viewportSize = await driver.getViewportSize();
|
|
75
|
-
uniqueRenderers.push({ name: 'chrome', ...viewportSize });
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
// TODO add default nmg renderers
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
73
|
let cleanupGeneratedSelectors;
|
|
82
74
|
if (environment.isWeb) {
|
|
83
75
|
userAgent = await driver.getUserAgentLegacy();
|
|
@@ -111,37 +103,49 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
111
103
|
: undefined;
|
|
112
104
|
}
|
|
113
105
|
const currentContext = driver.currentContext;
|
|
114
|
-
const snapshotOptions = {
|
|
115
|
-
settings: {
|
|
116
|
-
...eyes.test.eyesServer,
|
|
117
|
-
waitBeforeCapture: settings.waitBeforeCapture,
|
|
118
|
-
disableBrowserFetching: settings.disableBrowserFetching,
|
|
119
|
-
layoutBreakpoints: settings.layoutBreakpoints,
|
|
120
|
-
renderers: uniqueRenderers,
|
|
121
|
-
skipResources: ufgClient.getCachedResourceUrls(),
|
|
122
|
-
},
|
|
123
|
-
hooks: {
|
|
124
|
-
async beforeSnapshots() {
|
|
125
|
-
if (settings.lazyLoad && environment.isWeb) {
|
|
126
|
-
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
127
|
-
context: driver.currentContext,
|
|
128
|
-
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
129
|
-
logger,
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
provides: {
|
|
135
|
-
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
136
|
-
getIOSDevices: ufgClient.getIOSDevices,
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
106
|
if (environment.isWeb) {
|
|
140
|
-
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
107
|
+
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
108
|
+
driver,
|
|
109
|
+
settings: {
|
|
110
|
+
...eyes.test.eyesServer,
|
|
111
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
112
|
+
disableBrowserFetching: settings.disableBrowserFetching,
|
|
113
|
+
layoutBreakpoints: settings.layoutBreakpoints,
|
|
114
|
+
renderers: uniqueRenderers,
|
|
115
|
+
skipResources: ufgClient.getCachedResourceUrls(),
|
|
116
|
+
},
|
|
117
|
+
hooks: {
|
|
118
|
+
async beforeSnapshots() {
|
|
119
|
+
if (settings.lazyLoad && environment.isWeb) {
|
|
120
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
121
|
+
context: driver.currentContext,
|
|
122
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
123
|
+
logger,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
provides: {
|
|
129
|
+
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
130
|
+
getIOSDevices: ufgClient.getIOSDevices,
|
|
131
|
+
},
|
|
132
|
+
logger,
|
|
133
|
+
});
|
|
141
134
|
}
|
|
142
135
|
else {
|
|
143
|
-
const nmlClient = await eyes.core.getNMLClient({
|
|
144
|
-
|
|
136
|
+
const nmlClient = await eyes.core.getNMLClient({
|
|
137
|
+
driver,
|
|
138
|
+
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
139
|
+
logger,
|
|
140
|
+
});
|
|
141
|
+
snapshots = (await nmlClient.takeSnapshots({
|
|
142
|
+
settings: {
|
|
143
|
+
...eyes.test.eyesServer,
|
|
144
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
145
|
+
renderers: uniqueRenderers,
|
|
146
|
+
},
|
|
147
|
+
logger,
|
|
148
|
+
}));
|
|
145
149
|
}
|
|
146
150
|
await currentContext.focus();
|
|
147
151
|
snapshotUrl = await driver.getUrl();
|
|
@@ -157,9 +161,10 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
157
161
|
originalSelector: selector,
|
|
158
162
|
safeSelector: selector,
|
|
159
163
|
})));
|
|
160
|
-
const promises = uniqueRenderers.map(async (
|
|
164
|
+
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
161
165
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
162
|
-
|
|
166
|
+
const ufgRenderer = renderer;
|
|
167
|
+
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
163
168
|
const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
|
|
164
169
|
rendererLogger.console.log(message);
|
|
165
170
|
}
|
|
@@ -169,13 +174,13 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
169
174
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
170
175
|
}
|
|
171
176
|
const { cookies, ...snapshot } = snapshots[index];
|
|
172
|
-
if (utils.types.has(
|
|
173
|
-
|
|
177
|
+
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
178
|
+
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
174
179
|
}
|
|
175
180
|
const renderTargetPromise = ufgClient.createRenderTarget({
|
|
176
181
|
snapshot,
|
|
177
182
|
settings: {
|
|
178
|
-
renderer,
|
|
183
|
+
renderer: ufgRenderer,
|
|
179
184
|
cookies,
|
|
180
185
|
headers: {
|
|
181
186
|
Referer: snapshotUrl,
|
|
@@ -187,7 +192,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
187
192
|
},
|
|
188
193
|
logger: rendererLogger,
|
|
189
194
|
});
|
|
190
|
-
const
|
|
195
|
+
const baseEyes = await eyes.getBaseEyes({ settings: { renderer }, logger });
|
|
191
196
|
try {
|
|
192
197
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
193
198
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
@@ -214,7 +219,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
214
219
|
scrollRootElement: scrollRootSelector,
|
|
215
220
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
216
221
|
includeFullPageSize: !!settings.pageId,
|
|
217
|
-
renderer,
|
|
222
|
+
renderer: ufgRenderer,
|
|
218
223
|
renderEnvironmentId: baseEyes.test.renderEnvironmentId,
|
|
219
224
|
uploadUrl: baseEyes.test.uploadUrl,
|
|
220
225
|
stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
|
|
@@ -245,7 +250,6 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
245
250
|
settings: baseSettings,
|
|
246
251
|
logger: rendererLogger,
|
|
247
252
|
});
|
|
248
|
-
return { eyes: baseEyes, renderer };
|
|
249
253
|
}
|
|
250
254
|
catch (error) {
|
|
251
255
|
rendererLogger.error(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
|
|
@@ -255,15 +259,19 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
255
259
|
}
|
|
256
260
|
}
|
|
257
261
|
catch (error) {
|
|
258
|
-
rendererLogger.error(`Renderer with id ${
|
|
259
|
-
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
262
|
+
rendererLogger.error(`Renderer with id ${ufgRenderer.id} failed before rendering started due to an error`, error);
|
|
263
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer: ufgRenderer };
|
|
260
264
|
throw error;
|
|
261
265
|
}
|
|
262
266
|
});
|
|
263
267
|
uniqueRenderers.forEach((renderer, index) => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
268
|
+
const key = (0, extract_renderer_key_1.extractRendererKey)(renderer);
|
|
269
|
+
let item = eyes.storage.get(key);
|
|
270
|
+
if (!item) {
|
|
271
|
+
item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
|
|
272
|
+
eyes.storage.set(key, item);
|
|
273
|
+
}
|
|
274
|
+
item.jobs.push(promises[index]);
|
|
267
275
|
});
|
|
268
276
|
};
|
|
269
277
|
}
|
package/dist/ufg/check.js
CHANGED
|
@@ -32,11 +32,12 @@ 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
34
|
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
|
-
const uniquify_renderers_1 = require("
|
|
35
|
+
const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
|
|
36
|
+
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
36
37
|
const abort_error_1 = require("../errors/abort-error");
|
|
37
38
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
|
-
function makeCheck({ eyes,
|
|
40
|
+
function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
40
41
|
return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
42
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
42
43
|
logger = logger.extend(mainLogger);
|
|
@@ -48,7 +49,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
48
49
|
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
49
50
|
settings,
|
|
50
51
|
});
|
|
51
|
-
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a :
|
|
52
|
+
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : defaultRenderers);
|
|
52
53
|
const ufgClient = await eyes.core.getUFGClient({
|
|
53
54
|
settings: {
|
|
54
55
|
...eyes.test.ufgServer,
|
|
@@ -70,15 +71,6 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
70
71
|
if (driver) {
|
|
71
72
|
const environment = await driver.getEnvironment();
|
|
72
73
|
await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
73
|
-
if (uniqueRenderers.length === 0) {
|
|
74
|
-
if (environment.isWeb) {
|
|
75
|
-
const viewportSize = await driver.getViewportSize();
|
|
76
|
-
uniqueRenderers.push({ name: 'chrome', ...viewportSize });
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
// TODO add default nmg renderers
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
74
|
let cleanupGeneratedSelectors;
|
|
83
75
|
if (environment.isWeb) {
|
|
84
76
|
userAgent = await driver.getUserAgentLegacy();
|
|
@@ -112,37 +104,49 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
112
104
|
: undefined;
|
|
113
105
|
}
|
|
114
106
|
const currentContext = driver.currentContext;
|
|
115
|
-
const snapshotOptions = {
|
|
116
|
-
settings: {
|
|
117
|
-
...eyes.test.eyesServer,
|
|
118
|
-
waitBeforeCapture: settings.waitBeforeCapture,
|
|
119
|
-
disableBrowserFetching: settings.disableBrowserFetching,
|
|
120
|
-
layoutBreakpoints: settings.layoutBreakpoints,
|
|
121
|
-
renderers: uniqueRenderers,
|
|
122
|
-
skipResources: ufgClient.getCachedResourceUrls(),
|
|
123
|
-
},
|
|
124
|
-
hooks: {
|
|
125
|
-
async beforeSnapshots() {
|
|
126
|
-
if (settings.lazyLoad && environment.isWeb) {
|
|
127
|
-
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
128
|
-
context: driver.currentContext,
|
|
129
|
-
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
130
|
-
logger,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
provides: {
|
|
136
|
-
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
137
|
-
getIOSDevices: ufgClient.getIOSDevices,
|
|
138
|
-
},
|
|
139
|
-
};
|
|
140
107
|
if (environment.isWeb) {
|
|
141
|
-
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
108
|
+
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
109
|
+
driver,
|
|
110
|
+
settings: {
|
|
111
|
+
...eyes.test.eyesServer,
|
|
112
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
113
|
+
disableBrowserFetching: settings.disableBrowserFetching,
|
|
114
|
+
layoutBreakpoints: settings.layoutBreakpoints,
|
|
115
|
+
renderers: uniqueRenderers,
|
|
116
|
+
skipResources: ufgClient.getCachedResourceUrls(),
|
|
117
|
+
},
|
|
118
|
+
hooks: {
|
|
119
|
+
async beforeSnapshots() {
|
|
120
|
+
if (settings.lazyLoad && environment.isWeb) {
|
|
121
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
122
|
+
context: driver.currentContext,
|
|
123
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
124
|
+
logger,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
provides: {
|
|
130
|
+
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
131
|
+
getIOSDevices: ufgClient.getIOSDevices,
|
|
132
|
+
},
|
|
133
|
+
logger,
|
|
134
|
+
});
|
|
142
135
|
}
|
|
143
136
|
else {
|
|
144
|
-
const nmlClient = await eyes.core.getNMLClient({
|
|
145
|
-
|
|
137
|
+
const nmlClient = await eyes.core.getNMLClient({
|
|
138
|
+
driver,
|
|
139
|
+
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
140
|
+
logger,
|
|
141
|
+
});
|
|
142
|
+
snapshots = (await nmlClient.takeSnapshots({
|
|
143
|
+
settings: {
|
|
144
|
+
...eyes.test.eyesServer,
|
|
145
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
146
|
+
renderers: uniqueRenderers,
|
|
147
|
+
},
|
|
148
|
+
logger,
|
|
149
|
+
}));
|
|
146
150
|
}
|
|
147
151
|
await currentContext.focus();
|
|
148
152
|
snapshotUrl = await driver.getUrl();
|
|
@@ -158,9 +162,10 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
158
162
|
originalSelector: selector,
|
|
159
163
|
safeSelector: selector,
|
|
160
164
|
})));
|
|
161
|
-
const promises = uniqueRenderers.map(async (
|
|
165
|
+
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
162
166
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
163
|
-
|
|
167
|
+
const ufgRenderer = renderer;
|
|
168
|
+
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
164
169
|
const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
|
|
165
170
|
rendererLogger.console.log(message);
|
|
166
171
|
}
|
|
@@ -170,13 +175,13 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
170
175
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
171
176
|
}
|
|
172
177
|
const { cookies, ...snapshot } = snapshots[index];
|
|
173
|
-
if (utils.types.has(
|
|
174
|
-
|
|
178
|
+
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
179
|
+
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
175
180
|
}
|
|
176
181
|
const renderTargetPromise = ufgClient.createRenderTarget({
|
|
177
182
|
snapshot,
|
|
178
183
|
settings: {
|
|
179
|
-
renderer,
|
|
184
|
+
renderer: ufgRenderer,
|
|
180
185
|
cookies,
|
|
181
186
|
headers: {
|
|
182
187
|
Referer: snapshotUrl,
|
|
@@ -188,7 +193,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
188
193
|
},
|
|
189
194
|
logger: rendererLogger,
|
|
190
195
|
});
|
|
191
|
-
const
|
|
196
|
+
const baseEyes = await eyes.getBaseEyes({ settings: { renderer }, logger: rendererLogger });
|
|
192
197
|
try {
|
|
193
198
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
194
199
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
@@ -215,7 +220,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
215
220
|
scrollRootElement: scrollRootSelector,
|
|
216
221
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
217
222
|
includeFullPageSize: Boolean(settings.pageId),
|
|
218
|
-
renderer,
|
|
223
|
+
renderer: ufgRenderer,
|
|
219
224
|
renderEnvironmentId: baseEyes.test.renderEnvironmentId,
|
|
220
225
|
uploadUrl: baseEyes.test.uploadUrl,
|
|
221
226
|
stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
|
|
@@ -246,11 +251,6 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
246
251
|
settings: baseSettings,
|
|
247
252
|
logger: rendererLogger,
|
|
248
253
|
});
|
|
249
|
-
if (!baseEyes.running) {
|
|
250
|
-
rendererLogger.warn(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
|
|
251
|
-
throw new abort_error_1.AbortError(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
|
|
252
|
-
}
|
|
253
|
-
return { eyes: baseEyes, renderer };
|
|
254
254
|
}
|
|
255
255
|
catch (error) {
|
|
256
256
|
rendererLogger.error(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
|
|
@@ -261,16 +261,19 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
catch (error) {
|
|
264
|
-
rendererLogger.error(`Renderer with id ${
|
|
265
|
-
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
264
|
+
rendererLogger.error(`Renderer with id ${ufgRenderer.id} failed before rendering started due to an error`, error);
|
|
265
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer: ufgRenderer };
|
|
266
266
|
throw error;
|
|
267
267
|
}
|
|
268
268
|
});
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
269
|
+
uniqueRenderers.forEach((renderer, index) => {
|
|
270
|
+
const key = (0, extract_renderer_key_1.extractRendererKey)(renderer);
|
|
271
|
+
let item = eyes.storage.get(key);
|
|
272
|
+
if (!item) {
|
|
273
|
+
item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
|
|
274
|
+
eyes.storage.set(key, item);
|
|
275
|
+
}
|
|
276
|
+
item.jobs.push(promises[index]);
|
|
274
277
|
});
|
|
275
278
|
};
|
|
276
279
|
}
|
package/dist/ufg/core.js
CHANGED
|
@@ -35,10 +35,10 @@ const get_nml_client_1 = require("../automation/get-nml-client");
|
|
|
35
35
|
const get_ufg_client_1 = require("./get-ufg-client");
|
|
36
36
|
const open_eyes_1 = require("./open-eyes");
|
|
37
37
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
|
-
function makeCore({
|
|
38
|
+
function makeCore({ spec, clients, base, concurrency, fetchConcurrency, agentId = 'core-ufg', cwd = process.cwd(), logger: defaultLogger, }) {
|
|
39
39
|
const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core-ufg' } });
|
|
40
40
|
logger.log(`Core ufg is initialized ${base ? 'with' : 'without'} custom base core`);
|
|
41
|
-
base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({
|
|
41
|
+
base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ concurrency, agentId, cwd, logger }));
|
|
42
42
|
return utils.general.extend(base, core => {
|
|
43
43
|
return {
|
|
44
44
|
type: 'ufg',
|
|
@@ -25,17 +25,22 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.makeGetBaseEyes = void 0;
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
-
function makeGetBaseEyes({ settings: defaultSettings, eyes,
|
|
29
|
-
const getBaseEyesWithCache = utils.general.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
function makeGetBaseEyes({ settings: defaultSettings, eyes, logger: mainLogger, }) {
|
|
29
|
+
const getBaseEyesWithCache = utils.general.wrap(getBaseEyes, (getBaseEyes, options) => {
|
|
30
|
+
const key = JSON.stringify(options.settings.renderer);
|
|
31
|
+
let item = eyes.storage.get(key);
|
|
32
|
+
if (!item) {
|
|
33
|
+
item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
|
|
34
|
+
eyes.storage.set(key, item);
|
|
35
|
+
}
|
|
36
|
+
if (!item.eyes.settled)
|
|
37
|
+
item.eyes.resolve(getBaseEyes(options));
|
|
38
|
+
return item.eyes;
|
|
39
|
+
});
|
|
33
40
|
return getBaseEyesWithCache;
|
|
34
|
-
async function getBaseEyes({ settings, logger = mainLogger, }
|
|
41
|
+
async function getBaseEyes({ settings, logger = mainLogger, }) {
|
|
35
42
|
logger = logger.extend(mainLogger);
|
|
36
43
|
logger.log(`Command "getBaseEyes" is called with settings`, settings);
|
|
37
|
-
if (!settings)
|
|
38
|
-
throw new Error('');
|
|
39
44
|
const ufgClient = await eyes.core.getUFGClient({
|
|
40
45
|
settings: {
|
|
41
46
|
...eyes.test.ufgServer,
|
|
@@ -44,13 +49,17 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLo
|
|
|
44
49
|
},
|
|
45
50
|
logger,
|
|
46
51
|
});
|
|
47
|
-
const environment = await ufgClient.getRenderEnvironment({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
const environment = await ufgClient.getRenderEnvironment({
|
|
53
|
+
settings: { renderer: settings.renderer },
|
|
54
|
+
logger,
|
|
55
|
+
});
|
|
56
|
+
return eyes.core.base.openEyes({
|
|
57
|
+
settings: {
|
|
58
|
+
...defaultSettings,
|
|
59
|
+
environment: { ...defaultSettings.environment, ...environment, properties: settings.renderer.properties },
|
|
60
|
+
},
|
|
51
61
|
logger,
|
|
52
62
|
});
|
|
53
|
-
return [baseEyes];
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
65
|
exports.makeGetBaseEyes = makeGetBaseEyes;
|
package/dist/ufg/open-eyes.js
CHANGED
|
@@ -28,35 +28,33 @@ const driver_1 = require("@applitools/driver");
|
|
|
28
28
|
const get_base_eyes_1 = require("./get-base-eyes");
|
|
29
29
|
const check_1 = require("./check");
|
|
30
30
|
const check_and_close_1 = require("./check-and-close");
|
|
31
|
-
const close_1 = require("
|
|
32
|
-
const abort_1 = require("
|
|
33
|
-
const get_results_1 = require("
|
|
31
|
+
const close_1 = require("../automation/close");
|
|
32
|
+
const abort_1 = require("../automation/abort");
|
|
33
|
+
const get_results_1 = require("../automation/get-results");
|
|
34
|
+
const extract_default_renderers_1 = require("./utils/extract-default-renderers");
|
|
34
35
|
const abort_controller_1 = require("abort-controller");
|
|
35
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
37
|
function makeOpenEyes({ core, spec, logger: mainLogger }) {
|
|
37
|
-
return async function openEyes({ target, settings,
|
|
38
|
-
var _a, _b;
|
|
38
|
+
return async function openEyes({ target, settings, storage = new Map(), logger = mainLogger, }) {
|
|
39
|
+
var _a, _b, _c;
|
|
39
40
|
logger = logger.extend(mainLogger);
|
|
40
|
-
logger.log(`Command "openEyes" is called with ${target ? 'default driver
|
|
41
|
+
logger.log(`Command "openEyes" is called with ${target ? 'default driver' : ''}`, ...(settings ? ['and settings', settings] : []), storage.size > 0 ? 'and default eyes storage' : '');
|
|
41
42
|
const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger }));
|
|
42
|
-
if (driver &&
|
|
43
|
-
const environment = await
|
|
44
|
-
|
|
45
|
-
(_a = settings.environment) !== null && _a !== void 0 ? _a : (settings.environment = {});
|
|
46
|
-
if (environment.isEC) {
|
|
47
|
-
settings.environment.ecSessionId = (_b = (await driver.getSessionId())) !== null && _b !== void 0 ? _b : undefined;
|
|
48
|
-
}
|
|
49
|
-
if (settings.environment.viewportSize) {
|
|
43
|
+
if (driver && storage.size === 0) {
|
|
44
|
+
const environment = await driver.getEnvironment();
|
|
45
|
+
if (((_a = settings.environment) === null || _a === void 0 ? void 0 : _a.viewportSize) && !environment.isMobile) {
|
|
50
46
|
await driver.setViewportSize(settings.environment.viewportSize);
|
|
51
47
|
}
|
|
52
|
-
|
|
48
|
+
(_b = settings.environment) !== null && _b !== void 0 ? _b : (settings.environment = {});
|
|
49
|
+
if (environment.isEC) {
|
|
50
|
+
settings.environment.ecSessionId = (_c = (await driver.getSessionId())) !== null && _c !== void 0 ? _c : undefined;
|
|
51
|
+
}
|
|
53
52
|
}
|
|
53
|
+
const renderers = await (0, extract_default_renderers_1.extractDefaultRenderers)({ driver });
|
|
54
54
|
const controller = new abort_controller_1.AbortController();
|
|
55
55
|
const account = await core.getAccountInfo({ settings, logger });
|
|
56
56
|
return utils.general.extend({}, eyes => {
|
|
57
57
|
var _a;
|
|
58
|
-
const storage = new Map();
|
|
59
|
-
let running = true;
|
|
60
58
|
return {
|
|
61
59
|
type: 'ufg',
|
|
62
60
|
core,
|
|
@@ -68,28 +66,17 @@ function makeOpenEyes({ core, spec, logger: mainLogger }) {
|
|
|
68
66
|
ufgServer: account.ufgServer,
|
|
69
67
|
uploadUrl: account.uploadUrl,
|
|
70
68
|
stitchingServiceUrl: account.stitchingServiceUrl,
|
|
69
|
+
renderEnvironmentsUrl: account.renderEnvironmentsUrl,
|
|
71
70
|
account,
|
|
72
71
|
},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (!running)
|
|
82
|
-
return;
|
|
83
|
-
running = false;
|
|
84
|
-
return close(options);
|
|
85
|
-
}),
|
|
86
|
-
abort: utils.general.wrap((0, abort_1.makeAbort)({ storage, target: driver, spec, controller, logger }), async (abort, options) => {
|
|
87
|
-
if (!running)
|
|
88
|
-
return;
|
|
89
|
-
running = false;
|
|
90
|
-
return abort(options);
|
|
91
|
-
}),
|
|
92
|
-
getResults: (0, get_results_1.makeGetResults)({ storage, logger }),
|
|
72
|
+
running: true,
|
|
73
|
+
storage,
|
|
74
|
+
getBaseEyes: (0, get_base_eyes_1.makeGetBaseEyes)({ settings, eyes, logger }),
|
|
75
|
+
check: (0, check_1.makeCheck)({ eyes, target: driver, renderers, spec, signal: controller.signal, logger }),
|
|
76
|
+
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, target: driver, renderers, spec, signal: controller.signal, logger }),
|
|
77
|
+
close: (0, close_1.makeClose)({ eyes, target: driver, logger }),
|
|
78
|
+
abort: (0, abort_1.makeAbort)({ eyes, target: driver, spec, controller, logger }),
|
|
79
|
+
getResults: (0, get_results_1.makeGetResults)({ eyes, logger }),
|
|
93
80
|
};
|
|
94
81
|
});
|
|
95
82
|
};
|