@applitools/core 1.2.17 → 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/automation/get-viewport-size.js +3 -3
- package/dist/automation/locate.js +5 -5
- package/dist/automation/set-viewport-size.js +3 -3
- package/dist/check-and-close.js +11 -6
- package/dist/check.js +28 -17
- package/dist/classic/check-and-close.js +12 -8
- package/dist/classic/check.js +15 -11
- package/dist/classic/extract-text.js +5 -9
- package/dist/classic/get-base-eyes.js +4 -4
- package/dist/classic/locate-text.js +5 -5
- package/dist/classic/open-eyes.js +7 -7
- package/dist/close.js +2 -1
- package/dist/extract-text.js +2 -1
- package/dist/get-typed-eyes.js +27 -0
- package/dist/index.js +3 -1
- package/dist/locate-text.js +2 -1
- package/dist/make-manager.js +9 -2
- package/dist/open-eyes.js +37 -39
- package/dist/types.js +1 -0
- package/dist/ufg/abort.js +1 -1
- package/dist/ufg/check-and-close.js +220 -2
- package/dist/ufg/check.js +14 -9
- package/dist/ufg/core.js +2 -0
- package/dist/ufg/get-base-eyes.js +1 -17
- package/dist/ufg/open-eyes.js +5 -11
- package/dist/ufg/utils/take-dom-snapshots.js +11 -3
- package/dist/utils/wait-for-lazy-load.js +10 -8
- package/package.json +18 -16
- package/types/automation/get-viewport-size.d.ts +6 -3
- package/types/automation/locate.d.ts +7 -4
- package/types/automation/set-viewport-size.d.ts +8 -3
- package/types/automation/types.d.ts +18 -69
- package/types/automation/utils/take-screenshot.d.ts +1 -1
- package/types/check-and-close.d.ts +13 -13
- package/types/check.d.ts +9 -11
- package/types/classic/check-and-close.d.ts +9 -5
- package/types/classic/check.d.ts +9 -5
- package/types/classic/core.d.ts +1 -1
- package/types/classic/extract-text.d.ts +10 -5
- package/types/classic/get-base-eyes.d.ts +3 -3
- package/types/classic/locate-text.d.ts +9 -5
- package/types/classic/open-eyes.d.ts +9 -4
- package/types/classic/types.d.ts +8 -35
- package/types/classic/utils/take-dom-capture.d.ts +1 -1
- package/types/close-batch.d.ts +1 -1
- package/types/close-manager.d.ts +1 -1
- package/types/close.d.ts +4 -6
- package/types/core.d.ts +1 -1
- package/types/delete-test.d.ts +1 -1
- package/types/extract-text.d.ts +7 -9
- package/types/get-typed-eyes.d.ts +21 -0
- package/types/index.d.ts +1 -0
- package/types/locate-text.d.ts +7 -9
- package/types/locate.d.ts +3 -4
- package/types/make-manager.d.ts +2 -1
- package/types/open-eyes.d.ts +13 -9
- package/types/types.d.ts +38 -23
- package/types/ufg/abort.d.ts +5 -3
- package/types/ufg/check-and-close.d.ts +11 -5
- package/types/ufg/check.d.ts +9 -5
- package/types/ufg/close.d.ts +6 -3
- package/types/ufg/core.d.ts +1 -1
- package/types/ufg/get-base-eyes.d.ts +3 -3
- package/types/ufg/open-eyes.d.ts +6 -7
- package/types/ufg/types.d.ts +12 -37
- package/types/ufg/utils/take-dom-snapshot.d.ts +1 -1
- package/types/ufg/utils/take-dom-snapshots.d.ts +2 -2
- package/types/ufg/utils/take-vhses.d.ts +1 -1
- package/types/utils/wait-for-lazy-load.d.ts +4 -4
|
@@ -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/check.js
CHANGED
|
@@ -35,9 +35,9 @@ const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
|
35
35
|
const abort_error_1 = require("../errors/abort-error");
|
|
36
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
37
37
|
const chalk_1 = __importDefault(require("chalk"));
|
|
38
|
-
function makeCheck({ eyes, client,
|
|
39
|
-
return async function check({ settings = {},
|
|
40
|
-
var _a, _b;
|
|
38
|
+
function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
|
|
39
|
+
return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
|
|
40
|
+
var _a, _b, _c;
|
|
41
41
|
logger.log('Command "check" is called with settings', settings);
|
|
42
42
|
if (signal.aborted) {
|
|
43
43
|
logger.warn('Command "check" was called after test was already aborted');
|
|
@@ -45,8 +45,9 @@ function makeCheck({ eyes, client, driver: defaultDriver, spec, signal, logger:
|
|
|
45
45
|
}
|
|
46
46
|
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
47
47
|
let snapshots, snapshotUrl, snapshotTitle, userAgent, regionToTarget, selectorsToCalculate;
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
if ((0, driver_1.isDriver)(target, spec)) {
|
|
49
|
+
const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
|
|
50
|
+
await driver.currentContext.setScrollingElement((_a = settings.scrollRootElement) !== null && _a !== void 0 ? _a : null);
|
|
50
51
|
if (driver.isWeb && (!settings.renderers || settings.renderers.length === 0)) {
|
|
51
52
|
const viewportSize = await driver.getViewportSize();
|
|
52
53
|
settings.renderers = [{ name: 'chrome', ...viewportSize }];
|
|
@@ -60,7 +61,7 @@ function makeCheck({ eyes, client, driver: defaultDriver, spec, signal, logger:
|
|
|
60
61
|
});
|
|
61
62
|
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
62
63
|
if (elementReferenceToTarget) {
|
|
63
|
-
regionToTarget = (
|
|
64
|
+
regionToTarget = (_b = generated.selectors[0]) === null || _b === void 0 ? void 0 : _b.safeSelector;
|
|
64
65
|
if (!regionToTarget)
|
|
65
66
|
throw new Error('Target element not found');
|
|
66
67
|
selectorsToCalculate = generated.selectors.slice(1);
|
|
@@ -82,8 +83,12 @@ function makeCheck({ eyes, client, driver: defaultDriver, spec, signal, logger:
|
|
|
82
83
|
},
|
|
83
84
|
hooks: {
|
|
84
85
|
async beforeSnapshots() {
|
|
85
|
-
if (
|
|
86
|
-
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
86
|
+
if (settings.lazyLoad && driver.isWeb) {
|
|
87
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
88
|
+
context: driver.currentContext,
|
|
89
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
90
|
+
logger,
|
|
91
|
+
});
|
|
87
92
|
}
|
|
88
93
|
},
|
|
89
94
|
},
|
|
@@ -102,7 +107,7 @@ function makeCheck({ eyes, client, driver: defaultDriver, spec, signal, logger:
|
|
|
102
107
|
snapshots = !utils.types.isArray(target) ? Array(settings.renderers.length).fill(target) : target;
|
|
103
108
|
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
104
109
|
}
|
|
105
|
-
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (
|
|
110
|
+
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_c = elementReferenceToTarget) !== null && _c !== void 0 ? _c : settings.region);
|
|
106
111
|
selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
|
|
107
112
|
originalSelector: selector,
|
|
108
113
|
safeSelector: selector,
|
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) {
|
|
@@ -27,29 +27,13 @@ exports.makeGetBaseEyes = void 0;
|
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
28
|
function makeGetBaseEyes({ settings: defaultSettings, core, client, eyes, logger: defaultLogger }) {
|
|
29
29
|
const getBaseEyesWithCache = utils.general.cachify(getBaseEyes, ([options]) => options === null || options === void 0 ? void 0 : options.settings);
|
|
30
|
-
if (eyes)
|
|
30
|
+
if (eyes)
|
|
31
31
|
eyes.forEach(eyes => getBaseEyesWithCache.setCachedValue(eyes.test.rendererInfo, Promise.resolve([eyes])));
|
|
32
|
-
}
|
|
33
32
|
return getBaseEyesWithCache;
|
|
34
33
|
async function getBaseEyes({ settings, logger = defaultLogger, } = {}) {
|
|
35
34
|
logger.log(`Command "getBaseEyes" is called with settings`, settings);
|
|
36
35
|
const environment = await client.bookRenderer({ settings });
|
|
37
36
|
const eyes = await core.openEyes({ settings: { ...defaultSettings, environment }, logger });
|
|
38
|
-
const aborted = utils.promises.makeControlledPromise();
|
|
39
|
-
const queue = [];
|
|
40
|
-
eyes.check = utils.general.wrap(eyes.check, async (check, options) => {
|
|
41
|
-
var _a, _b;
|
|
42
|
-
var _c;
|
|
43
|
-
const index = options.settings.stepIndex;
|
|
44
|
-
(_a = queue[index]) !== null && _a !== void 0 ? _a : (queue[index] = utils.promises.makeControlledPromise());
|
|
45
|
-
if (index > 0)
|
|
46
|
-
await Promise.race([((_b = queue[_c = index - 1]) !== null && _b !== void 0 ? _b : (queue[_c] = utils.promises.makeControlledPromise())), aborted]);
|
|
47
|
-
return check(options).finally(queue[index].resolve);
|
|
48
|
-
});
|
|
49
|
-
eyes.abort = utils.general.wrap(eyes.abort, async (abort, options) => {
|
|
50
|
-
aborted.reject(new Error('Command "check" was aborted due to possible error in previous step'));
|
|
51
|
-
return abort(options);
|
|
52
|
-
});
|
|
53
37
|
return [eyes];
|
|
54
38
|
}
|
|
55
39
|
}
|
package/dist/ufg/open-eyes.js
CHANGED
|
@@ -34,12 +34,10 @@ const abort_1 = require("./abort");
|
|
|
34
34
|
const abort_controller_1 = require("abort-controller");
|
|
35
35
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
36
|
function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
37
|
-
return async function openEyes({ settings, eyes,
|
|
37
|
+
return async function openEyes({ target, settings, eyes, logger = defaultLogger, }) {
|
|
38
38
|
var _a, _b;
|
|
39
|
-
logger.log(`Command "openEyes" is called with ${
|
|
40
|
-
driver
|
|
41
|
-
? await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: { disableHelper: true } })
|
|
42
|
-
: null);
|
|
39
|
+
logger.log(`Command "openEyes" is called with ${target ? 'default driver and' : ''}`, ...(settings ? ['settings', settings] : []), eyes ? 'predefined eyes' : '');
|
|
40
|
+
const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: { disableHelper: true } }));
|
|
43
41
|
if (driver && !eyes) {
|
|
44
42
|
const currentContext = driver.currentContext;
|
|
45
43
|
if ((_a = settings.environment) === null || _a === void 0 ? void 0 : _a.viewportSize) {
|
|
@@ -58,7 +56,6 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
58
56
|
return utils.general.extend({}, eyes => {
|
|
59
57
|
var _a;
|
|
60
58
|
const storage = [];
|
|
61
|
-
let stepIndex = 0;
|
|
62
59
|
let closed = false;
|
|
63
60
|
let aborted = false;
|
|
64
61
|
return {
|
|
@@ -81,15 +78,12 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
81
78
|
},
|
|
82
79
|
getBaseEyes,
|
|
83
80
|
// check with indexing and storage
|
|
84
|
-
check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client, driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
|
|
85
|
-
var _a;
|
|
86
|
-
(_a = options.settings) !== null && _a !== void 0 ? _a : (options.settings = {});
|
|
87
|
-
options.settings.stepIndex = stepIndex++;
|
|
81
|
+
check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
|
|
88
82
|
const results = await check(options);
|
|
89
83
|
storage.push(...results.map(result => ({ promise: result.promise, renderer: result.renderer })));
|
|
90
84
|
return results;
|
|
91
85
|
}),
|
|
92
|
-
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, client, driver, spec, signal: controller.signal, logger }),
|
|
86
|
+
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, client, target: driver, spec, signal: controller.signal, logger }),
|
|
93
87
|
// close only once
|
|
94
88
|
close: utils.general.wrap((0, close_1.makeClose)({ storage, logger }), async (close, options) => {
|
|
95
89
|
if (closed || aborted)
|
|
@@ -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
|
}
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.waitForLazyLoad = void 0;
|
|
4
4
|
const snippets_1 = require("@applitools/snippets");
|
|
5
|
-
async function waitForLazyLoad({
|
|
5
|
+
async function waitForLazyLoad({ context, settings, logger, }) {
|
|
6
6
|
var _a, _b, _c, _d, _e;
|
|
7
7
|
logger.log('lazy loading the page before capturing a screenshot');
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
await context.executePoll(snippets_1.lazyLoad, {
|
|
9
|
+
main: [
|
|
10
|
+
await context.getScrollingElement(),
|
|
11
|
+
{
|
|
12
|
+
scrollLength: (_a = settings.scrollLength) !== null && _a !== void 0 ? _a : 300,
|
|
13
|
+
waitingTime: (_b = settings.waitingTime) !== null && _b !== void 0 ? _b : 2000,
|
|
14
|
+
maxAmountToScroll: (_c = settings.maxAmountToScroll) !== null && _c !== void 0 ? _c : 15000,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
15
17
|
poll: [],
|
|
16
18
|
executionTimeout: 5 * 60 * 1000,
|
|
17
19
|
pollTimeout: (_e = (_d = settings.pollTimeout) !== null && _d !== void 0 ? _d : settings.waitingTime) !== null && _e !== void 0 ? _e : 2000,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/core",
|
|
3
|
-
"version": "1.
|
|
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,28 +61,30 @@
|
|
|
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
|
-
"@applitools/dom-snapshot": "4.7.
|
|
67
|
-
"@applitools/driver": "1.11.
|
|
68
|
-
"@applitools/logger": "1.1.
|
|
69
|
-
"@applitools/nml-client": "1.3.
|
|
70
|
-
"@applitools/req": "1.1.
|
|
71
|
-
"@applitools/screenshoter": "3.7.
|
|
72
|
-
"@applitools/snippets": "2.4.
|
|
73
|
-
"@applitools/ufg-client": "1.1.
|
|
74
|
-
"@applitools/utils": "1.3.
|
|
66
|
+
"@applitools/dom-snapshot": "4.7.2",
|
|
67
|
+
"@applitools/driver": "1.11.14",
|
|
68
|
+
"@applitools/logger": "1.1.32",
|
|
69
|
+
"@applitools/nml-client": "1.3.15",
|
|
70
|
+
"@applitools/req": "1.1.19",
|
|
71
|
+
"@applitools/screenshoter": "3.7.14",
|
|
72
|
+
"@applitools/snippets": "2.4.10",
|
|
73
|
+
"@applitools/ufg-client": "1.1.8",
|
|
74
|
+
"@applitools/utils": "1.3.18",
|
|
75
75
|
"abort-controller": "3.0.0",
|
|
76
|
+
"chalk": "4.1.2",
|
|
77
|
+
"node-fetch": "2.6.7",
|
|
76
78
|
"throat": "6.0.1"
|
|
77
79
|
},
|
|
78
80
|
"devDependencies": {
|
|
79
81
|
"@applitools/bongo": "^2.2.0",
|
|
80
82
|
"@applitools/sdk-fake-eyes-server": "^2.1.3",
|
|
81
|
-
"@applitools/spec-driver-puppeteer": "^1.1.
|
|
82
|
-
"@applitools/spec-driver-selenium": "^1.5.
|
|
83
|
+
"@applitools/spec-driver-puppeteer": "^1.1.26",
|
|
84
|
+
"@applitools/spec-driver-selenium": "^1.5.12",
|
|
83
85
|
"@applitools/spec-driver-webdriverio": "^1.4.9",
|
|
84
|
-
"@applitools/test-server": "^1.1.
|
|
85
|
-
"@applitools/test-utils": "^1.5.
|
|
86
|
+
"@applitools/test-server": "^1.1.13",
|
|
87
|
+
"@applitools/test-utils": "^1.5.3",
|
|
86
88
|
"@types/mocha": "^9.1.1",
|
|
87
89
|
"@types/node": "12",
|
|
88
90
|
"@types/selenium-webdriver": "^4.1.2",
|
|
@@ -102,7 +104,7 @@
|
|
|
102
104
|
"puppeteer": "^16.2.0",
|
|
103
105
|
"selenium-webdriver": "4.4",
|
|
104
106
|
"ts-node": "^10.7.0",
|
|
105
|
-
"typescript": "^4.
|
|
107
|
+
"typescript": "^4.9.4",
|
|
106
108
|
"webdriverio": "^7.25.0"
|
|
107
109
|
},
|
|
108
110
|
"engines": {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DriverTarget } from './types';
|
|
2
2
|
import { type Logger } from '@applitools/logger';
|
|
3
3
|
import { type SpecDriver } from '@applitools/driver';
|
|
4
|
-
|
|
4
|
+
type Options<TDriver, TContext, TElement, TSelector> = {
|
|
5
5
|
spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
|
|
6
6
|
logger?: Logger;
|
|
7
7
|
};
|
|
8
|
-
export declare function makeGetViewportSize<TDriver, TContext, TElement, TSelector>({ spec, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>):
|
|
8
|
+
export declare function makeGetViewportSize<TDriver, TContext, TElement, TSelector>({ spec, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): ({ target, logger, }: {
|
|
9
|
+
target: DriverTarget<TDriver, TContext, TElement, TSelector>;
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
}) => Promise<import("@applitools/utils").Size>;
|
|
9
12
|
export {};
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DriverTarget, ImageTarget, LocateSettings, LocateResult } from './types';
|
|
2
2
|
import type { Core as BaseCore } 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> = {
|
|
6
6
|
core: BaseCore;
|
|
7
7
|
spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
|
|
8
|
-
target?: Target<TDriver>;
|
|
9
8
|
logger?: Logger;
|
|
10
9
|
};
|
|
11
|
-
export declare function makeLocate<TDriver, TContext, TElement, TSelector>({ spec, core, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>):
|
|
10
|
+
export declare function makeLocate<TDriver, TContext, TElement, TSelector>({ spec, core, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): <TLocator extends string>({ settings, target, logger, }: {
|
|
11
|
+
target: DriverTarget<TDriver, TContext, TElement, TSelector> | ImageTarget;
|
|
12
|
+
settings: LocateSettings<TLocator, TElement, TSelector>;
|
|
13
|
+
logger?: Logger;
|
|
14
|
+
}) => Promise<LocateResult<TLocator>>;
|
|
12
15
|
export {};
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Size } from '@applitools/utils';
|
|
2
|
+
import type { DriverTarget } from './types';
|
|
2
3
|
import { type Logger } from '@applitools/logger';
|
|
3
4
|
import { type SpecDriver } from '@applitools/driver';
|
|
4
|
-
|
|
5
|
+
type Options<TDriver, TContext, TElement, TSelector> = {
|
|
5
6
|
spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
|
|
6
7
|
logger?: Logger;
|
|
7
8
|
};
|
|
8
|
-
export declare function makeSetViewportSize<TDriver, TContext, TElement, TSelector>({ spec, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>):
|
|
9
|
+
export declare function makeSetViewportSize<TDriver, TContext, TElement, TSelector>({ spec, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): ({ target, size, logger, }: {
|
|
10
|
+
target: DriverTarget<TDriver, TContext, TElement, TSelector>;
|
|
11
|
+
size: Size;
|
|
12
|
+
logger?: Logger;
|
|
13
|
+
}) => Promise<void>;
|
|
9
14
|
export {};
|