@applitools/core 1.3.0 → 1.3.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/dist/check.js +2 -0
- package/dist/index.js +3 -1
- package/dist/make-manager.js +8 -1
- package/dist/open-eyes.js +19 -15
- package/dist/ufg/check-and-close.js +220 -2
- package/dist/ufg/core.js +2 -0
- package/dist/ufg/open-eyes.js +1 -2
- package/dist/ufg/utils/take-dom-snapshots.js +11 -3
- package/package.json +4 -4
- package/types/index.d.ts +1 -0
- package/types/open-eyes.d.ts +3 -2
- package/types/ufg/check-and-close.d.ts +9 -3
- package/types/ufg/utils/take-dom-snapshots.d.ts +1 -1
package/dist/check.js
CHANGED
|
@@ -31,6 +31,7 @@ const driver_1 = require("@applitools/driver");
|
|
|
31
31
|
const utils = __importStar(require("@applitools/utils"));
|
|
32
32
|
const chalk_1 = __importDefault(require("chalk"));
|
|
33
33
|
function makeCheck({ type: defaultType, eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
|
|
34
|
+
let stepIndex = 0;
|
|
34
35
|
return async function check({ type = defaultType, target = defaultTarget, settings, config, logger = defaultLogger, } = {}) {
|
|
35
36
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
36
37
|
var _r, _s, _t, _u;
|
|
@@ -53,6 +54,7 @@ function makeCheck({ type: defaultType, eyes, target: defaultTarget, spec, logge
|
|
|
53
54
|
(_o = (_t = settings.lazyLoad).waitingTime) !== null && _o !== void 0 ? _o : (_t.waitingTime = 2000);
|
|
54
55
|
(_p = (_u = settings.lazyLoad).maxAmountToScroll) !== null && _p !== void 0 ? _p : (_u.maxAmountToScroll = 15000);
|
|
55
56
|
}
|
|
57
|
+
settings.stepIndex = stepIndex++;
|
|
56
58
|
(_q = settings.waitBetweenStitches) !== null && _q !== void 0 ? _q : (settings.waitBetweenStitches = utils.types.isObject(settings.lazyLoad) ? settings.lazyLoad.waitingTime : 100);
|
|
57
59
|
if (settings.matchLevel === 'Content') {
|
|
58
60
|
logger.console.log(chalk_1.default.yellow(`The "Content" match level value has been deprecated, use "IgnoreColors" instead.`));
|
package/dist/index.js
CHANGED
|
@@ -26,8 +26,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
26
26
|
return result;
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.formatters = void 0;
|
|
29
|
+
exports.formatters = exports.takeDomSnapshots = void 0;
|
|
30
30
|
__exportStar(require("./types"), exports);
|
|
31
31
|
__exportStar(require("./core"), exports);
|
|
32
|
+
var take_dom_snapshots_1 = require("./ufg/utils/take-dom-snapshots");
|
|
33
|
+
Object.defineProperty(exports, "takeDomSnapshots", { enumerable: true, get: function () { return take_dom_snapshots_1.takeDomSnapshots; } });
|
|
32
34
|
exports.formatters = __importStar(require("./utils/format-results"));
|
|
33
35
|
__exportStar(require("@applitools/driver/dist/debug"), exports);
|
package/dist/make-manager.js
CHANGED
|
@@ -38,9 +38,10 @@ function makeMakeManager({ spec, core, concurrency: defaultConcurrency = utils.g
|
|
|
38
38
|
ufg: (0, core_2.makeCore)({ spec, core, concurrency, logger }),
|
|
39
39
|
classic: (0, core_1.makeCore)({ spec, core, logger }),
|
|
40
40
|
};
|
|
41
|
+
const batch = { id: `generated-${utils.general.guid()}` };
|
|
41
42
|
const storage = [];
|
|
42
43
|
// open eyes with result storage
|
|
43
|
-
const openEyes = utils.general.wrap((0, open_eyes_1.makeOpenEyes)({ type, spec, core, cores, logger }), async (openEyes, options) => {
|
|
44
|
+
const openEyes = utils.general.wrap((0, open_eyes_1.makeOpenEyes)({ type, spec, core, cores, logger, batch }), async (openEyes, options) => {
|
|
44
45
|
const eyes = await openEyes(options);
|
|
45
46
|
const item = { eyes };
|
|
46
47
|
storage.push(item);
|
|
@@ -51,6 +52,12 @@ function makeMakeManager({ spec, core, concurrency: defaultConcurrency = utils.g
|
|
|
51
52
|
(_a = item.promise) !== null && _a !== void 0 ? _a : (item.promise = promise);
|
|
52
53
|
return promise;
|
|
53
54
|
},
|
|
55
|
+
checkAndClose(options) {
|
|
56
|
+
var _a;
|
|
57
|
+
const promise = eyes.checkAndClose(options);
|
|
58
|
+
(_a = item.promise) !== null && _a !== void 0 ? _a : (item.promise = promise);
|
|
59
|
+
return promise;
|
|
60
|
+
},
|
|
54
61
|
abort(options) {
|
|
55
62
|
var _a;
|
|
56
63
|
const promise = eyes.abort(options);
|
package/dist/open-eyes.js
CHANGED
|
@@ -33,29 +33,33 @@ const locate_text_1 = require("./locate-text");
|
|
|
33
33
|
const extract_text_1 = require("./extract-text");
|
|
34
34
|
const close_1 = require("./close");
|
|
35
35
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
|
-
function makeOpenEyes({ type: defaultType = 'classic', concurrency, core, cores, spec, logger: defaultLogger, }) {
|
|
36
|
+
function makeOpenEyes({ type: defaultType = 'classic', concurrency, core, cores, spec, logger: defaultLogger, batch, }) {
|
|
37
37
|
return async function openEyes({ type = defaultType, settings, config, target, logger = defaultLogger, }) {
|
|
38
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
39
|
-
var
|
|
38
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
39
|
+
var _x, _y, _z, _0;
|
|
40
40
|
settings = { ...config === null || config === void 0 ? void 0 : config.open, ...settings };
|
|
41
41
|
(_a = settings.userTestId) !== null && _a !== void 0 ? _a : (settings.userTestId = `${settings.testName}--${utils.general.guid()}`);
|
|
42
42
|
(_b = settings.serverUrl) !== null && _b !== void 0 ? _b : (settings.serverUrl = (_c = utils.general.getEnvValue('SERVER_URL')) !== null && _c !== void 0 ? _c : 'https://eyesapi.applitools.com');
|
|
43
43
|
(_d = settings.apiKey) !== null && _d !== void 0 ? _d : (settings.apiKey = utils.general.getEnvValue('API_KEY'));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
(
|
|
50
|
-
(
|
|
51
|
-
(
|
|
52
|
-
(
|
|
53
|
-
(
|
|
54
|
-
(
|
|
44
|
+
settings.batch = {
|
|
45
|
+
...settings.batch,
|
|
46
|
+
properties: [...((_e = batch === null || batch === void 0 ? void 0 : batch.properties) !== null && _e !== void 0 ? _e : []), ...((_g = (_f = settings.batch) === null || _f === void 0 ? void 0 : _f.properties) !== null && _g !== void 0 ? _g : [])],
|
|
47
|
+
...batch,
|
|
48
|
+
};
|
|
49
|
+
(_h = (_x = settings.batch).id) !== null && _h !== void 0 ? _h : (_x.id = (_j = utils.general.getEnvValue('BATCH_ID')) !== null && _j !== void 0 ? _j : `generated-${utils.general.guid()}`);
|
|
50
|
+
(_k = (_y = settings.batch).name) !== null && _k !== void 0 ? _k : (_y.name = utils.general.getEnvValue('BATCH_NAME'));
|
|
51
|
+
(_l = (_z = settings.batch).sequenceName) !== null && _l !== void 0 ? _l : (_z.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
|
|
52
|
+
(_m = (_0 = settings.batch).notifyOnCompletion) !== null && _m !== void 0 ? _m : (_0.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
|
|
53
|
+
(_o = settings.keepBatchOpen) !== null && _o !== void 0 ? _o : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean'));
|
|
54
|
+
(_p = settings.branchName) !== null && _p !== void 0 ? _p : (settings.branchName = utils.general.getEnvValue('BRANCH'));
|
|
55
|
+
(_q = settings.parentBranchName) !== null && _q !== void 0 ? _q : (settings.parentBranchName = utils.general.getEnvValue('PARENT_BRANCH'));
|
|
56
|
+
(_r = settings.baselineBranchName) !== null && _r !== void 0 ? _r : (settings.baselineBranchName = utils.general.getEnvValue('BASELINE_BRANCH'));
|
|
57
|
+
(_s = settings.ignoreBaseline) !== null && _s !== void 0 ? _s : (settings.ignoreBaseline = false);
|
|
58
|
+
(_t = settings.compareWithParentBranch) !== null && _t !== void 0 ? _t : (settings.compareWithParentBranch = false);
|
|
55
59
|
if (type === 'ufg') {
|
|
56
60
|
const ufgSettings = settings;
|
|
57
61
|
const ufgConfig = config;
|
|
58
|
-
(
|
|
62
|
+
(_u = ufgSettings.renderConcurrency) !== null && _u !== void 0 ? _u : (ufgSettings.renderConcurrency = (_w = (_v = ufgConfig === null || ufgConfig === void 0 ? void 0 : ufgConfig.check) === null || _v === void 0 ? void 0 : _v.renderers) === null || _w === void 0 ? void 0 : _w.length);
|
|
59
63
|
}
|
|
60
64
|
core.logEvent({
|
|
61
65
|
settings: {
|
|
@@ -1,7 +1,225 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
2
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
29
|
exports.makeCheckAndClose = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
30
|
+
const driver_1 = require("@applitools/driver");
|
|
31
|
+
const take_snapshots_1 = require("./utils/take-snapshots");
|
|
32
|
+
const wait_for_lazy_load_1 = require("../utils/wait-for-lazy-load");
|
|
33
|
+
const to_base_check_settings_1 = require("../utils/to-base-check-settings");
|
|
34
|
+
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
|
+
const abort_error_1 = require("../errors/abort-error");
|
|
36
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
37
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
38
|
+
function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget, logger: defaultLogger, }) {
|
|
39
|
+
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, snapshots, }) {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
logger.log('Command "checkAndClose" is called with settings', settings);
|
|
42
|
+
if (signal.aborted) {
|
|
43
|
+
logger.warn('Command "checkAndClose" was called after test was already aborted');
|
|
44
|
+
throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
|
|
45
|
+
}
|
|
46
|
+
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
47
|
+
let snapshotUrl, snapshotTitle, userAgent, regionToTarget, selectorsToCalculate;
|
|
48
|
+
if ((0, driver_1.isDriver)(target, spec)) {
|
|
49
|
+
// TODO driver custom config
|
|
50
|
+
const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
|
|
51
|
+
if (driver.isWeb && (!settings.renderers || settings.renderers.length === 0)) {
|
|
52
|
+
const viewportSize = await driver.getViewportSize();
|
|
53
|
+
settings.renderers = [{ name: 'chrome', ...viewportSize }];
|
|
54
|
+
}
|
|
55
|
+
let cleanupGeneratedSelectors;
|
|
56
|
+
if (driver.isWeb) {
|
|
57
|
+
userAgent = driver.userAgent;
|
|
58
|
+
const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
59
|
+
context: driver.currentContext,
|
|
60
|
+
elementReferences: [...(elementReferenceToTarget ? [elementReferenceToTarget] : []), ...elementReferencesToCalculate],
|
|
61
|
+
});
|
|
62
|
+
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
63
|
+
if (elementReferenceToTarget) {
|
|
64
|
+
regionToTarget = (_a = generated.selectors[0]) === null || _a === void 0 ? void 0 : _a.safeSelector;
|
|
65
|
+
if (!regionToTarget)
|
|
66
|
+
throw new Error('Target element not found');
|
|
67
|
+
selectorsToCalculate = generated.selectors.slice(1);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
selectorsToCalculate = generated.selectors;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const currentContext = driver.currentContext;
|
|
74
|
+
if (!snapshots) {
|
|
75
|
+
snapshots = await (0, take_snapshots_1.takeSnapshots)({
|
|
76
|
+
driver,
|
|
77
|
+
settings: {
|
|
78
|
+
...eyes.test.server,
|
|
79
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
80
|
+
disableBrowserFetching: settings.disableBrowserFetching,
|
|
81
|
+
layoutBreakpoints: settings.layoutBreakpoints,
|
|
82
|
+
renderers: settings.renderers,
|
|
83
|
+
skipResources: client.getCachedResourceUrls(),
|
|
84
|
+
},
|
|
85
|
+
hooks: {
|
|
86
|
+
async beforeSnapshots() {
|
|
87
|
+
if (driver.isWeb && settings.lazyLoad) {
|
|
88
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
89
|
+
context: driver.currentContext,
|
|
90
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
91
|
+
logger,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
provides: {
|
|
97
|
+
getChromeEmulationDevices: client.getChromeEmulationDevices,
|
|
98
|
+
getIOSDevices: client.getIOSDevices,
|
|
99
|
+
},
|
|
100
|
+
logger,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
await currentContext.focus();
|
|
104
|
+
snapshotUrl = await driver.getUrl();
|
|
105
|
+
snapshotTitle = await driver.getTitle();
|
|
106
|
+
await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
snapshots = !utils.types.isArray(target) ? Array(settings.renderers.length).fill(target) : target;
|
|
110
|
+
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
111
|
+
}
|
|
112
|
+
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_b = elementReferenceToTarget) !== null && _b !== void 0 ? _b : settings.region);
|
|
113
|
+
selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
|
|
114
|
+
originalSelector: selector,
|
|
115
|
+
safeSelector: selector,
|
|
116
|
+
})));
|
|
117
|
+
const promises = settings.renderers.map(async (renderer, index) => {
|
|
118
|
+
if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
|
|
119
|
+
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.`);
|
|
120
|
+
logger.console.log(message);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
if (signal.aborted) {
|
|
124
|
+
logger.warn('Command "check" was aborted before rendering');
|
|
125
|
+
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
126
|
+
}
|
|
127
|
+
const { cookies, ...snapshot } = snapshots[index];
|
|
128
|
+
const snapshotType = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
129
|
+
const renderTargetPromise = client.createRenderTarget({
|
|
130
|
+
snapshot,
|
|
131
|
+
settings: {
|
|
132
|
+
renderer,
|
|
133
|
+
referer: snapshotUrl,
|
|
134
|
+
cookies,
|
|
135
|
+
proxy: eyes.test.server.proxy,
|
|
136
|
+
autProxy: settings.autProxy,
|
|
137
|
+
userAgent,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
|
|
141
|
+
try {
|
|
142
|
+
if (signal.aborted) {
|
|
143
|
+
logger.warn('Command "check" was aborted before rendering');
|
|
144
|
+
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
145
|
+
}
|
|
146
|
+
else if (baseEyes.aborted) {
|
|
147
|
+
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
148
|
+
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
149
|
+
}
|
|
150
|
+
const renderTarget = await renderTargetPromise;
|
|
151
|
+
if (signal.aborted) {
|
|
152
|
+
logger.warn('Command "check" was aborted before rendering');
|
|
153
|
+
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
154
|
+
}
|
|
155
|
+
else if (baseEyes.aborted) {
|
|
156
|
+
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
157
|
+
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
158
|
+
}
|
|
159
|
+
const { renderId, selectorRegions, ...baseTarget } = await client.render({
|
|
160
|
+
target: renderTarget,
|
|
161
|
+
settings: {
|
|
162
|
+
...settings,
|
|
163
|
+
rendererId: baseEyes.test.rendererId,
|
|
164
|
+
region: regionToTarget,
|
|
165
|
+
type: utils.types.has(snapshot, 'cdt') ? 'web' : 'native',
|
|
166
|
+
renderer,
|
|
167
|
+
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
168
|
+
includeFullPageSize: Boolean(settings.pageId),
|
|
169
|
+
},
|
|
170
|
+
signal,
|
|
171
|
+
});
|
|
172
|
+
let offset = 0;
|
|
173
|
+
const baseSettings = getBaseCheckSettings({
|
|
174
|
+
calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
|
|
175
|
+
selector: originalSelector,
|
|
176
|
+
regions: safeSelector ? selectorRegions[offset++] : [],
|
|
177
|
+
})),
|
|
178
|
+
});
|
|
179
|
+
baseSettings.renderId = renderId;
|
|
180
|
+
baseTarget.source = snapshotUrl;
|
|
181
|
+
baseTarget.name = snapshotTitle;
|
|
182
|
+
if (signal.aborted) {
|
|
183
|
+
logger.warn('Command "check" was aborted after rendering');
|
|
184
|
+
throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
|
|
185
|
+
}
|
|
186
|
+
else if (baseEyes.aborted) {
|
|
187
|
+
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
188
|
+
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
189
|
+
}
|
|
190
|
+
const [result] = await baseEyes.checkAndClose({
|
|
191
|
+
target: { ...baseTarget, isTransformed: true },
|
|
192
|
+
settings: baseSettings,
|
|
193
|
+
logger,
|
|
194
|
+
});
|
|
195
|
+
if (baseEyes.aborted) {
|
|
196
|
+
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
197
|
+
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
198
|
+
}
|
|
199
|
+
return { ...result, eyes, renderer };
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
await baseEyes.abort();
|
|
203
|
+
error.info = { eyes: baseEyes };
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return Promise.all(promises.map(async (promise) => {
|
|
213
|
+
var _a, _b;
|
|
214
|
+
try {
|
|
215
|
+
const result = await promise;
|
|
216
|
+
return { ...result, userTestId: eyes.test.userTestId, asExpected: true };
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
await ((_b = (_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ logger }));
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
}));
|
|
223
|
+
};
|
|
6
224
|
}
|
|
7
225
|
exports.makeCheckAndClose = makeCheckAndClose;
|
package/dist/ufg/core.js
CHANGED
|
@@ -53,6 +53,8 @@ function makeCore({ concurrency, spec, client, core, agentId = 'core-ufg', cwd =
|
|
|
53
53
|
close: utils.general.wrap(eyes.close, (close, options) => close(options).finally(done)),
|
|
54
54
|
// release concurrency slot when aborted
|
|
55
55
|
abort: utils.general.wrap(eyes.abort, (abort, options) => abort(options).finally(done)),
|
|
56
|
+
// release concurrency slot when checkAndClose is done
|
|
57
|
+
checkAndClose: utils.general.wrap(eyes.checkAndClose, (checkAndClose, options) => checkAndClose(options).finally(done)),
|
|
56
58
|
}));
|
|
57
59
|
}
|
|
58
60
|
catch (error) {
|
package/dist/ufg/open-eyes.js
CHANGED
|
@@ -56,7 +56,6 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
56
56
|
return utils.general.extend({}, eyes => {
|
|
57
57
|
var _a;
|
|
58
58
|
const storage = [];
|
|
59
|
-
let stepIndex = 0;
|
|
60
59
|
let closed = false;
|
|
61
60
|
let aborted = false;
|
|
62
61
|
return {
|
|
@@ -80,7 +79,7 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
80
79
|
getBaseEyes,
|
|
81
80
|
// check with indexing and storage
|
|
82
81
|
check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
|
|
83
|
-
const results = await check(
|
|
82
|
+
const results = await check(options);
|
|
84
83
|
storage.push(...results.map(result => ({ promise: result.promise, renderer: result.renderer })));
|
|
85
84
|
return results;
|
|
86
85
|
}),
|
|
@@ -37,11 +37,19 @@ __exportStar(require("./take-dom-snapshot"), exports);
|
|
|
37
37
|
async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
|
|
38
38
|
var _a, _b, _c, _d;
|
|
39
39
|
const currentContext = driver.currentContext;
|
|
40
|
+
const waitBeforeCapture = async () => {
|
|
41
|
+
if (typeof settings.waitBeforeCapture === 'function') {
|
|
42
|
+
await settings.waitBeforeCapture();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
await utils.general.sleep(settings.waitBeforeCapture);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
40
48
|
await ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.beforeSnapshots) === null || _a === void 0 ? void 0 : _a.call(hooks));
|
|
41
49
|
if (!settings.layoutBreakpoints) {
|
|
42
50
|
logger.log(`taking single dom snapshot`);
|
|
43
51
|
await ((_b = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _b === void 0 ? void 0 : _b.call(hooks));
|
|
44
|
-
await
|
|
52
|
+
await waitBeforeCapture();
|
|
45
53
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
46
54
|
return Array(settings.renderers.length).fill(snapshot);
|
|
47
55
|
}
|
|
@@ -74,7 +82,7 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
74
82
|
if (requiredWidths.has(viewportSize.width)) {
|
|
75
83
|
logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
|
|
76
84
|
await ((_c = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _c === void 0 ? void 0 : _c.call(hooks));
|
|
77
|
-
await
|
|
85
|
+
await waitBeforeCapture();
|
|
78
86
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
79
87
|
requiredWidths.get(viewportSize.width).forEach(({ index }) => (snapshots[index] = snapshot));
|
|
80
88
|
}
|
|
@@ -100,7 +108,7 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
100
108
|
}
|
|
101
109
|
}
|
|
102
110
|
await ((_d = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _d === void 0 ? void 0 : _d.call(hooks));
|
|
103
|
-
await
|
|
111
|
+
await waitBeforeCapture();
|
|
104
112
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
105
113
|
browsersInfo.forEach(({ index }) => (snapshots[index] = snapshot));
|
|
106
114
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"homepage": "https://applitools.com",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
|
|
@@ -61,14 +61,14 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@applitools/core-base": "1.1.
|
|
64
|
+
"@applitools/core-base": "1.1.18",
|
|
65
65
|
"@applitools/dom-capture": "11.2.0",
|
|
66
66
|
"@applitools/dom-snapshot": "4.7.2",
|
|
67
67
|
"@applitools/driver": "1.11.14",
|
|
68
68
|
"@applitools/logger": "1.1.32",
|
|
69
|
-
"@applitools/nml-client": "1.3.
|
|
69
|
+
"@applitools/nml-client": "1.3.15",
|
|
70
70
|
"@applitools/req": "1.1.19",
|
|
71
|
-
"@applitools/screenshoter": "3.7.
|
|
71
|
+
"@applitools/screenshoter": "3.7.14",
|
|
72
72
|
"@applitools/snippets": "2.4.10",
|
|
73
73
|
"@applitools/ufg-client": "1.1.8",
|
|
74
74
|
"@applitools/utils": "1.3.18",
|
package/types/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export { type Selector } from '@applitools/driver';
|
|
3
3
|
export * from './core';
|
|
4
|
+
export { takeDomSnapshots } from './ufg/utils/take-dom-snapshots';
|
|
4
5
|
export * as formatters from './utils/format-results';
|
|
5
6
|
export * from '@applitools/driver/dist/debug';
|
package/types/open-eyes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TypedCore, Eyes, Config, OpenSettings } from './types';
|
|
2
|
-
import type { Core as BaseCore } from '@applitools/core-base';
|
|
2
|
+
import type { Core as BaseCore, Batch } from '@applitools/core-base';
|
|
3
3
|
import { type Logger } from '@applitools/logger';
|
|
4
4
|
import { type SpecDriver } from '@applitools/driver';
|
|
5
5
|
type Options<TDriver, TContext, TElement, TSelector, TType extends 'classic' | 'ufg'> = {
|
|
@@ -11,8 +11,9 @@ type Options<TDriver, TContext, TElement, TSelector, TType extends 'classic' | '
|
|
|
11
11
|
};
|
|
12
12
|
spec?: SpecDriver<TDriver, TContext, TElement, TSelector>;
|
|
13
13
|
logger?: Logger;
|
|
14
|
+
batch?: Batch;
|
|
14
15
|
};
|
|
15
|
-
export declare function makeOpenEyes<TDriver, TContext, TElement, TSelector, TDefaultType extends 'classic' | 'ufg' = 'classic'>({ type: defaultType, concurrency, core, cores, spec, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, settings, config, target, logger, }: {
|
|
16
|
+
export declare function makeOpenEyes<TDriver, TContext, TElement, TSelector, TDefaultType extends 'classic' | 'ufg' = 'classic'>({ type: defaultType, concurrency, core, cores, spec, logger: defaultLogger, batch, }: Options<TDriver, TContext, TElement, TSelector, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, settings, config, target, logger, }: {
|
|
16
17
|
type?: TType;
|
|
17
18
|
settings?: Partial<OpenSettings<TDefaultType> & OpenSettings<TType>>;
|
|
18
19
|
config?: Config<TElement, TSelector, TDefaultType> & Config<TElement, TSelector, TType>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { DriverTarget, Eyes } from './types';
|
|
1
|
+
import type { DriverTarget, UFGTarget, Eyes, CheckSettings, TestResult, CloseSettings } from './types';
|
|
2
|
+
import { type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
|
|
2
3
|
import { type AbortSignal } from 'abort-controller';
|
|
3
4
|
import { type Logger } from '@applitools/logger';
|
|
4
|
-
import { type SpecDriver } from '@applitools/driver';
|
|
5
5
|
import { type UFGClient } from '@applitools/ufg-client';
|
|
6
|
+
import { type SpecDriver } from '@applitools/driver';
|
|
6
7
|
type Options<TDriver, TContext, TElement, TSelector> = {
|
|
7
8
|
eyes: Eyes<TDriver, TContext, TElement, TSelector>;
|
|
8
9
|
client: UFGClient;
|
|
@@ -11,5 +12,10 @@ type Options<TDriver, TContext, TElement, TSelector> = {
|
|
|
11
12
|
signal?: AbortSignal;
|
|
12
13
|
logger?: Logger;
|
|
13
14
|
};
|
|
14
|
-
export declare function makeCheckAndClose<TDriver, TContext, TElement, TSelector>(
|
|
15
|
+
export declare function makeCheckAndClose<TDriver, TContext, TElement, TSelector>({ spec, eyes, client, signal, target: defaultTarget, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): ({ target, settings, logger, snapshots, }: {
|
|
16
|
+
target?: UFGTarget<TDriver, TContext, TElement, TSelector>;
|
|
17
|
+
settings?: CheckSettings<TElement, TSelector> & CloseSettings;
|
|
18
|
+
logger?: Logger;
|
|
19
|
+
snapshots?: DomSnapshot[] | AndroidSnapshot[] | IOSSnapshot[];
|
|
20
|
+
}) => Promise<TestResult[]>;
|
|
15
21
|
export {};
|
|
@@ -6,7 +6,7 @@ import { type DomSnapshotSettings } from './take-dom-snapshot';
|
|
|
6
6
|
export * from './take-dom-snapshot';
|
|
7
7
|
export type DomSnapshotsSettings = DomSnapshotSettings & {
|
|
8
8
|
renderers: Renderer[];
|
|
9
|
-
waitBeforeCapture?: number;
|
|
9
|
+
waitBeforeCapture?: number | (() => void);
|
|
10
10
|
layoutBreakpoints?: number[] | boolean;
|
|
11
11
|
};
|
|
12
12
|
export declare function takeDomSnapshots<TDriver extends Driver<unknown, unknown, unknown, unknown>>({ driver, settings, hooks, provides, logger, }: {
|