@applitools/core 3.9.1 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -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/check-and-close.js +1 -10
- package/dist/check.js +8 -17
- package/dist/classic/check-and-close.js +111 -69
- package/dist/classic/check.js +103 -63
- package/dist/classic/core.js +4 -4
- package/dist/classic/get-base-eyes.js +29 -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 +59 -52
- package/dist/ufg/check.js +60 -58
- package/dist/ufg/core.js +2 -2
- package/dist/ufg/get-base-eyes.js +23 -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 -7
- 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 +3 -6
- 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/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,11 @@ 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
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
37
37
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
|
-
function makeCheckAndClose({ eyes,
|
|
39
|
+
function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
40
40
|
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
41
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
42
42
|
logger = logger.extend(mainLogger);
|
|
@@ -48,7 +48,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
48
48
|
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
49
49
|
settings,
|
|
50
50
|
});
|
|
51
|
-
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a :
|
|
51
|
+
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : defaultRenderers);
|
|
52
52
|
const ufgClient = await eyes.core.getUFGClient({
|
|
53
53
|
settings: {
|
|
54
54
|
...eyes.test.ufgServer,
|
|
@@ -69,15 +69,6 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
69
69
|
: null;
|
|
70
70
|
if (driver) {
|
|
71
71
|
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
72
|
let cleanupGeneratedSelectors;
|
|
82
73
|
if (environment.isWeb) {
|
|
83
74
|
userAgent = await driver.getUserAgentLegacy();
|
|
@@ -111,37 +102,49 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
111
102
|
: undefined;
|
|
112
103
|
}
|
|
113
104
|
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
105
|
if (environment.isWeb) {
|
|
140
|
-
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
106
|
+
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
107
|
+
driver,
|
|
108
|
+
settings: {
|
|
109
|
+
...eyes.test.eyesServer,
|
|
110
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
111
|
+
disableBrowserFetching: settings.disableBrowserFetching,
|
|
112
|
+
layoutBreakpoints: settings.layoutBreakpoints,
|
|
113
|
+
renderers: uniqueRenderers,
|
|
114
|
+
skipResources: ufgClient.getCachedResourceUrls(),
|
|
115
|
+
},
|
|
116
|
+
hooks: {
|
|
117
|
+
async beforeSnapshots() {
|
|
118
|
+
if (settings.lazyLoad && environment.isWeb) {
|
|
119
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
120
|
+
context: driver.currentContext,
|
|
121
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
122
|
+
logger,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
provides: {
|
|
128
|
+
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
129
|
+
getIOSDevices: ufgClient.getIOSDevices,
|
|
130
|
+
},
|
|
131
|
+
logger,
|
|
132
|
+
});
|
|
141
133
|
}
|
|
142
134
|
else {
|
|
143
|
-
const nmlClient = await eyes.core.getNMLClient({
|
|
144
|
-
|
|
135
|
+
const nmlClient = await eyes.core.getNMLClient({
|
|
136
|
+
driver,
|
|
137
|
+
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
138
|
+
logger,
|
|
139
|
+
});
|
|
140
|
+
snapshots = (await nmlClient.takeSnapshots({
|
|
141
|
+
settings: {
|
|
142
|
+
...eyes.test.eyesServer,
|
|
143
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
144
|
+
renderers: uniqueRenderers,
|
|
145
|
+
},
|
|
146
|
+
logger,
|
|
147
|
+
}));
|
|
145
148
|
}
|
|
146
149
|
await currentContext.focus();
|
|
147
150
|
snapshotUrl = await driver.getUrl();
|
|
@@ -157,9 +160,10 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
157
160
|
originalSelector: selector,
|
|
158
161
|
safeSelector: selector,
|
|
159
162
|
})));
|
|
160
|
-
const promises = uniqueRenderers.map(async (
|
|
163
|
+
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
161
164
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
162
|
-
|
|
165
|
+
const ufgRenderer = renderer;
|
|
166
|
+
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
163
167
|
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
168
|
rendererLogger.console.log(message);
|
|
165
169
|
}
|
|
@@ -169,13 +173,13 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
169
173
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
170
174
|
}
|
|
171
175
|
const { cookies, ...snapshot } = snapshots[index];
|
|
172
|
-
if (utils.types.has(
|
|
173
|
-
|
|
176
|
+
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
177
|
+
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
174
178
|
}
|
|
175
179
|
const renderTargetPromise = ufgClient.createRenderTarget({
|
|
176
180
|
snapshot,
|
|
177
181
|
settings: {
|
|
178
|
-
renderer,
|
|
182
|
+
renderer: ufgRenderer,
|
|
179
183
|
cookies,
|
|
180
184
|
headers: {
|
|
181
185
|
Referer: snapshotUrl,
|
|
@@ -187,7 +191,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
187
191
|
},
|
|
188
192
|
logger: rendererLogger,
|
|
189
193
|
});
|
|
190
|
-
const
|
|
194
|
+
const baseEyes = await eyes.getBaseEyes({ settings: { renderer }, logger });
|
|
191
195
|
try {
|
|
192
196
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
193
197
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
@@ -214,7 +218,7 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
214
218
|
scrollRootElement: scrollRootSelector,
|
|
215
219
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
216
220
|
includeFullPageSize: !!settings.pageId,
|
|
217
|
-
renderer,
|
|
221
|
+
renderer: ufgRenderer,
|
|
218
222
|
renderEnvironmentId: baseEyes.test.renderEnvironmentId,
|
|
219
223
|
uploadUrl: baseEyes.test.uploadUrl,
|
|
220
224
|
stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
|
|
@@ -245,7 +249,6 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
245
249
|
settings: baseSettings,
|
|
246
250
|
logger: rendererLogger,
|
|
247
251
|
});
|
|
248
|
-
return { eyes: baseEyes, renderer };
|
|
249
252
|
}
|
|
250
253
|
catch (error) {
|
|
251
254
|
rendererLogger.error(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
|
|
@@ -255,15 +258,19 @@ function makeCheckAndClose({ eyes, storage, target: defaultTarget, spec, signal,
|
|
|
255
258
|
}
|
|
256
259
|
}
|
|
257
260
|
catch (error) {
|
|
258
|
-
rendererLogger.error(`Renderer with id ${
|
|
259
|
-
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
261
|
+
rendererLogger.error(`Renderer with id ${ufgRenderer.id} failed before rendering started due to an error`, error);
|
|
262
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer: ufgRenderer };
|
|
260
263
|
throw error;
|
|
261
264
|
}
|
|
262
265
|
});
|
|
263
266
|
uniqueRenderers.forEach((renderer, index) => {
|
|
264
|
-
var _a;
|
|
265
267
|
const key = JSON.stringify(renderer);
|
|
266
|
-
|
|
268
|
+
let item = eyes.storage.get(key);
|
|
269
|
+
if (!item) {
|
|
270
|
+
item = { renderer, eyes: null, jobs: [] };
|
|
271
|
+
eyes.storage.set(key, item);
|
|
272
|
+
}
|
|
273
|
+
item.jobs.push(promises[index]);
|
|
267
274
|
});
|
|
268
275
|
};
|
|
269
276
|
}
|
package/dist/ufg/check.js
CHANGED
|
@@ -32,11 +32,11 @@ 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
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
37
37
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
|
-
function makeCheck({ eyes,
|
|
39
|
+
function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
40
40
|
return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
41
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
42
42
|
logger = logger.extend(mainLogger);
|
|
@@ -48,7 +48,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
48
48
|
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
49
49
|
settings,
|
|
50
50
|
});
|
|
51
|
-
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a :
|
|
51
|
+
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : defaultRenderers);
|
|
52
52
|
const ufgClient = await eyes.core.getUFGClient({
|
|
53
53
|
settings: {
|
|
54
54
|
...eyes.test.ufgServer,
|
|
@@ -70,15 +70,6 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
70
70
|
if (driver) {
|
|
71
71
|
const environment = await driver.getEnvironment();
|
|
72
72
|
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
73
|
let cleanupGeneratedSelectors;
|
|
83
74
|
if (environment.isWeb) {
|
|
84
75
|
userAgent = await driver.getUserAgentLegacy();
|
|
@@ -112,37 +103,49 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
112
103
|
: undefined;
|
|
113
104
|
}
|
|
114
105
|
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
106
|
if (environment.isWeb) {
|
|
141
|
-
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
|
+
});
|
|
142
134
|
}
|
|
143
135
|
else {
|
|
144
|
-
const nmlClient = await eyes.core.getNMLClient({
|
|
145
|
-
|
|
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
|
+
}));
|
|
146
149
|
}
|
|
147
150
|
await currentContext.focus();
|
|
148
151
|
snapshotUrl = await driver.getUrl();
|
|
@@ -158,9 +161,10 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
158
161
|
originalSelector: selector,
|
|
159
162
|
safeSelector: selector,
|
|
160
163
|
})));
|
|
161
|
-
const promises = uniqueRenderers.map(async (
|
|
164
|
+
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
162
165
|
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
163
|
-
|
|
166
|
+
const ufgRenderer = renderer;
|
|
167
|
+
if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
|
|
164
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.`);
|
|
165
169
|
rendererLogger.console.log(message);
|
|
166
170
|
}
|
|
@@ -170,13 +174,13 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
170
174
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
171
175
|
}
|
|
172
176
|
const { cookies, ...snapshot } = snapshots[index];
|
|
173
|
-
if (utils.types.has(
|
|
174
|
-
|
|
177
|
+
if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
|
|
178
|
+
ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
175
179
|
}
|
|
176
180
|
const renderTargetPromise = ufgClient.createRenderTarget({
|
|
177
181
|
snapshot,
|
|
178
182
|
settings: {
|
|
179
|
-
renderer,
|
|
183
|
+
renderer: ufgRenderer,
|
|
180
184
|
cookies,
|
|
181
185
|
headers: {
|
|
182
186
|
Referer: snapshotUrl,
|
|
@@ -188,7 +192,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
188
192
|
},
|
|
189
193
|
logger: rendererLogger,
|
|
190
194
|
});
|
|
191
|
-
const
|
|
195
|
+
const baseEyes = await eyes.getBaseEyes({ settings: { renderer }, logger: rendererLogger });
|
|
192
196
|
try {
|
|
193
197
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
194
198
|
rendererLogger.warn('Command "check" was aborted before rendering');
|
|
@@ -215,7 +219,7 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
215
219
|
scrollRootElement: scrollRootSelector,
|
|
216
220
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
217
221
|
includeFullPageSize: Boolean(settings.pageId),
|
|
218
|
-
renderer,
|
|
222
|
+
renderer: ufgRenderer,
|
|
219
223
|
renderEnvironmentId: baseEyes.test.renderEnvironmentId,
|
|
220
224
|
uploadUrl: baseEyes.test.uploadUrl,
|
|
221
225
|
stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
|
|
@@ -246,11 +250,6 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
246
250
|
settings: baseSettings,
|
|
247
251
|
logger: rendererLogger,
|
|
248
252
|
});
|
|
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
253
|
}
|
|
255
254
|
catch (error) {
|
|
256
255
|
rendererLogger.error(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
|
|
@@ -261,16 +260,19 @@ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger:
|
|
|
261
260
|
}
|
|
262
261
|
}
|
|
263
262
|
catch (error) {
|
|
264
|
-
rendererLogger.error(`Renderer with id ${
|
|
265
|
-
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
263
|
+
rendererLogger.error(`Renderer with id ${ufgRenderer.id} failed before rendering started due to an error`, error);
|
|
264
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer: ufgRenderer };
|
|
266
265
|
throw error;
|
|
267
266
|
}
|
|
268
267
|
});
|
|
269
|
-
|
|
270
|
-
var _a;
|
|
268
|
+
uniqueRenderers.forEach((renderer, index) => {
|
|
271
269
|
const key = JSON.stringify(renderer);
|
|
272
|
-
|
|
273
|
-
|
|
270
|
+
let item = eyes.storage.get(key);
|
|
271
|
+
if (!item) {
|
|
272
|
+
item = { renderer, eyes: null, jobs: [] };
|
|
273
|
+
eyes.storage.set(key, item);
|
|
274
|
+
}
|
|
275
|
+
item.jobs.push(promises[index]);
|
|
274
276
|
});
|
|
275
277
|
};
|
|
276
278
|
}
|
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,23 @@ 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 = { renderer: options.settings.renderer, eyes: getBaseEyes(options), jobs: [] };
|
|
34
|
+
eyes.storage.set(key, item);
|
|
35
|
+
}
|
|
36
|
+
else if (!item.eyes) {
|
|
37
|
+
item.eyes = getBaseEyes(options);
|
|
38
|
+
}
|
|
39
|
+
return item.eyes;
|
|
40
|
+
});
|
|
33
41
|
return getBaseEyesWithCache;
|
|
34
|
-
async function getBaseEyes({ settings, logger = mainLogger, }
|
|
42
|
+
async function getBaseEyes({ settings, logger = mainLogger, }) {
|
|
35
43
|
logger = logger.extend(mainLogger);
|
|
36
44
|
logger.log(`Command "getBaseEyes" is called with settings`, settings);
|
|
37
|
-
if (!settings)
|
|
38
|
-
throw new Error('');
|
|
39
45
|
const ufgClient = await eyes.core.getUFGClient({
|
|
40
46
|
settings: {
|
|
41
47
|
...eyes.test.ufgServer,
|
|
@@ -44,13 +50,17 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLo
|
|
|
44
50
|
},
|
|
45
51
|
logger,
|
|
46
52
|
});
|
|
47
|
-
const environment = await ufgClient.getRenderEnvironment({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
const environment = await ufgClient.getRenderEnvironment({
|
|
54
|
+
settings: { renderer: settings.renderer },
|
|
55
|
+
logger,
|
|
56
|
+
});
|
|
57
|
+
return eyes.core.base.openEyes({
|
|
58
|
+
settings: {
|
|
59
|
+
...defaultSettings,
|
|
60
|
+
environment: { ...defaultSettings.environment, ...environment, properties: settings.renderer.properties },
|
|
61
|
+
},
|
|
51
62
|
logger,
|
|
52
63
|
});
|
|
53
|
-
return [baseEyes];
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
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
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractDefaultRenderers = void 0;
|
|
4
|
+
async function extractDefaultRenderers({ driver, }) {
|
|
5
|
+
if (!driver)
|
|
6
|
+
return [];
|
|
7
|
+
const currentContext = driver.currentContext;
|
|
8
|
+
try {
|
|
9
|
+
const environment = await driver.getEnvironment();
|
|
10
|
+
if (environment.isWeb) {
|
|
11
|
+
const viewportSize = await driver.getViewportSize();
|
|
12
|
+
return [{ name: 'chrome', ...viewportSize }];
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
await currentContext.focus();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.extractDefaultRenderers = extractDefaultRenderers;
|