@applitools/core 3.9.1 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +107 -0
- package/dist/abort.js +40 -0
- package/dist/{ufg → automation}/abort.js +19 -3
- package/dist/{ufg → automation}/close.js +19 -3
- package/dist/automation/get-nml-client.js +3 -3
- package/dist/{ufg → automation}/get-results.js +4 -4
- package/dist/automation/utils/extract-renderer-key.js +35 -0
- package/dist/check-and-close.js +1 -10
- package/dist/check.js +8 -17
- package/dist/classic/check-and-close.js +125 -68
- package/dist/classic/check.js +108 -63
- package/dist/classic/core.js +4 -4
- package/dist/classic/get-base-eyes.js +30 -7
- package/dist/classic/open-eyes.js +42 -56
- package/dist/classic/utils/extract-default-renderers.js +72 -0
- package/dist/classic/utils/take-screenshots.js +60 -0
- package/dist/close.js +6 -3
- package/dist/core.js +4 -4
- package/dist/get-typed-eyes.js +3 -5
- package/dist/make-manager.js +2 -2
- package/dist/open-eyes.js +13 -10
- package/dist/ufg/check-and-close.js +61 -53
- package/dist/ufg/check.js +62 -59
- package/dist/ufg/core.js +2 -2
- package/dist/ufg/get-base-eyes.js +22 -13
- package/dist/ufg/open-eyes.js +24 -37
- package/dist/ufg/utils/extract-default-renderers.js +22 -0
- package/dist/universal/core.js +1 -0
- package/package.json +15 -15
- package/types/abort.d.ts +13 -0
- package/types/{classic → automation}/abort.d.ts +5 -4
- package/types/{classic → automation}/close.d.ts +3 -4
- package/types/automation/get-nml-client.d.ts +3 -3
- package/types/automation/get-results.d.ts +11 -0
- package/types/automation/types.d.ts +78 -8
- package/types/automation/utils/extract-renderer-key.d.ts +2 -0
- package/types/{ufg → automation}/utils/uniquify-renderers.d.ts +1 -1
- package/types/check.d.ts +2 -2
- package/types/classic/check-and-close.d.ts +11 -4
- package/types/classic/check.d.ts +6 -3
- package/types/classic/core.d.ts +2 -1
- package/types/classic/get-base-eyes.d.ts +4 -8
- package/types/classic/open-eyes.d.ts +3 -4
- package/types/classic/types.d.ts +3 -4
- package/types/classic/utils/extract-default-renderers.d.ts +9 -0
- package/types/classic/utils/take-screenshots.d.ts +18 -0
- package/types/close.d.ts +3 -2
- package/types/core.d.ts +7 -1
- package/types/get-typed-eyes.d.ts +5 -4
- package/types/make-manager.d.ts +7 -1
- package/types/open-eyes.d.ts +7 -1
- package/types/types.d.ts +5 -8
- package/types/ufg/check-and-close.d.ts +8 -12
- package/types/ufg/check.d.ts +4 -9
- package/types/ufg/core.d.ts +3 -3
- package/types/ufg/get-base-eyes.d.ts +3 -7
- package/types/ufg/open-eyes.d.ts +3 -4
- package/types/ufg/types.d.ts +3 -24
- package/types/ufg/utils/extract-default-renderers.d.ts +5 -0
- package/types/ufg/utils/take-dom-snapshots.d.ts +3 -3
- package/dist/classic/abort.js +0 -23
- package/dist/classic/close.js +0 -23
- package/types/ufg/abort.d.ts +0 -21
- package/types/ufg/close.d.ts +0 -19
- package/types/ufg/get-results.d.ts +0 -16
- /package/dist/{ufg → automation}/utils/uniquify-renderers.js +0 -0
package/dist/classic/check.js
CHANGED
|
@@ -25,81 +25,78 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.makeCheck = void 0;
|
|
27
27
|
const driver_1 = require("@applitools/driver");
|
|
28
|
-
const
|
|
29
|
-
const take_dom_capture_1 = require("./utils/take-dom-capture");
|
|
28
|
+
const take_screenshots_1 = require("./utils/take-screenshots");
|
|
30
29
|
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
31
30
|
const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
|
|
31
|
+
const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
|
|
32
|
+
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
33
|
+
const abort_error_1 = require("../errors/abort-error");
|
|
32
34
|
const utils = __importStar(require("@applitools/utils"));
|
|
33
|
-
function makeCheck({ eyes, target: defaultTarget, spec, logger: mainLogger, }) {
|
|
35
|
+
function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
|
|
34
36
|
return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
35
|
-
var _a, _b
|
|
37
|
+
var _a, _b;
|
|
36
38
|
logger = logger.extend(mainLogger);
|
|
37
39
|
logger.log('Command "check" is called with settings', settings);
|
|
38
40
|
if (!target)
|
|
39
41
|
throw new Error('Method was called with no target');
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
43
|
+
logger.warn('Command "check" was called after test was already aborted');
|
|
44
|
+
throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
|
|
43
45
|
}
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : defaultRenderers);
|
|
47
|
+
const baseTargets = [];
|
|
48
|
+
const baseSettings = [];
|
|
49
|
+
const transformedRenderers = [];
|
|
50
|
+
if ((0, driver_1.isDriver)(target, spec)) {
|
|
51
|
+
const driver = await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger });
|
|
52
|
+
await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
53
|
+
const environment = await driver.getEnvironment();
|
|
54
|
+
uniqueRenderers.forEach(renderer => {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
var _c, _d;
|
|
57
|
+
if (utils.types.has(renderer, 'iosDeviceInfo')) {
|
|
58
|
+
(_a = (_c = renderer.iosDeviceInfo).version) !== null && _a !== void 0 ? _a : (_c.version = environment.platformVersion);
|
|
59
|
+
}
|
|
60
|
+
else if (utils.types.has(renderer, 'androidDeviceInfo')) {
|
|
61
|
+
(_b = (_d = renderer.androidDeviceInfo).version) !== null && _b !== void 0 ? _b : (_d.version = environment.platformVersion);
|
|
62
|
+
}
|
|
63
|
+
return renderer;
|
|
64
|
+
});
|
|
65
|
+
if (settings.lazyLoad && environment.isWeb) {
|
|
49
66
|
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
50
67
|
context: driver.currentContext,
|
|
51
68
|
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
52
69
|
logger,
|
|
53
70
|
});
|
|
54
71
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const finishAt = Date.now() + ((_b = settings.retryTimeout) !== null && _b !== void 0 ? _b : 0);
|
|
59
|
-
let baseTarget;
|
|
60
|
-
let baseSettings;
|
|
61
|
-
let results;
|
|
62
|
-
const { elementReferencesToCalculate, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
63
|
-
do {
|
|
64
|
-
if (environment.isWeb ||
|
|
65
|
-
!environment.isApplitoolsLib ||
|
|
66
|
-
settings.webview ||
|
|
67
|
-
settings.screenshotMode === 'default') {
|
|
68
|
-
const screenshot = await (0, take_screenshot_1.takeScreenshot)({
|
|
72
|
+
const { elementReferencesToCalculate, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
73
|
+
if (environment.isWeb || !environment.isApplitoolsLib || settings.screenshotMode === 'default') {
|
|
74
|
+
const screenshots = await (0, take_screenshots_1.takeScreenshots)({
|
|
69
75
|
driver,
|
|
70
|
-
settings: {
|
|
76
|
+
settings: {
|
|
77
|
+
...settings,
|
|
78
|
+
renderers: uniqueRenderers,
|
|
79
|
+
regionsToCalculate: elementReferencesToCalculate,
|
|
80
|
+
calculateView: !!settings.pageId,
|
|
81
|
+
domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
|
|
82
|
+
},
|
|
71
83
|
logger,
|
|
72
84
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
isTransformed: true,
|
|
79
|
-
};
|
|
80
|
-
baseSettings = getBaseCheckSettings({ calculatedRegions: screenshot.calculatedRegions });
|
|
81
|
-
if (environment.isWeb && settings.sendDom) {
|
|
82
|
-
if (settings.fully)
|
|
83
|
-
await ((_c = screenshot.scrollingElement) === null || _c === void 0 ? void 0 : _c.setAttribute('data-applitools-scroll', 'true'));
|
|
84
|
-
else
|
|
85
|
-
await ((_d = screenshot.element) === null || _d === void 0 ? void 0 : _d.setAttribute('data-applitools-scroll', 'true'));
|
|
86
|
-
baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, settings: { proxy: eyes.test.eyesServer.proxy }, logger }).catch(() => undefined);
|
|
87
|
-
}
|
|
88
|
-
if (settings.pageId) {
|
|
89
|
-
const scrollingElement = await driver.mainContext.getScrollingElement();
|
|
90
|
-
const scrollingOffset = !scrollingElement || environment.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
|
|
91
|
-
baseTarget.locationInView = utils.geometry.offset(scrollingOffset, screenshot.region);
|
|
92
|
-
baseTarget.fullViewSize = scrollingElement
|
|
93
|
-
? await scrollingElement.getContentSize()
|
|
94
|
-
: await driver.getViewportSize();
|
|
95
|
-
}
|
|
96
|
-
await screenshot.restoreState();
|
|
85
|
+
transformedRenderers.push(...uniqueRenderers);
|
|
86
|
+
screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
|
|
87
|
+
baseTargets.push(baseTarget);
|
|
88
|
+
baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
|
|
89
|
+
});
|
|
97
90
|
}
|
|
98
91
|
else {
|
|
99
|
-
const nmlClient = await eyes.core.getNMLClient({
|
|
100
|
-
|
|
92
|
+
const nmlClient = await eyes.core.getNMLClient({
|
|
93
|
+
driver,
|
|
94
|
+
settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
|
|
95
|
+
logger,
|
|
96
|
+
});
|
|
97
|
+
const screenshots = await nmlClient.takeScreenshots({
|
|
101
98
|
settings: {
|
|
102
|
-
|
|
99
|
+
renderers: uniqueRenderers,
|
|
103
100
|
fully: settings.fully,
|
|
104
101
|
stitchMode: settings.stitchMode,
|
|
105
102
|
hideScrollbars: settings.hideScrollbars,
|
|
@@ -108,20 +105,68 @@ function makeCheck({ eyes, target: defaultTarget, spec, logger: mainLogger, }) {
|
|
|
108
105
|
waitBeforeCapture: settings.waitBeforeCapture,
|
|
109
106
|
waitBetweenStitches: settings.waitBetweenStitches,
|
|
110
107
|
lazyLoad: settings.lazyLoad,
|
|
108
|
+
name: settings.name,
|
|
111
109
|
},
|
|
112
110
|
logger,
|
|
113
111
|
});
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
screenshots.forEach(({ calculatedRegions: _calculatedRegions, renderEnvironment, ...baseTarget }) => {
|
|
113
|
+
transformedRenderers.push({ environment: renderEnvironment });
|
|
114
|
+
baseTargets.push({ ...baseTarget, isTransformed: true });
|
|
115
|
+
baseSettings.push(getBaseCheckSettings({ calculatedRegions: [] }));
|
|
116
|
+
});
|
|
116
117
|
}
|
|
117
|
-
baseSettings.ignoreMismatch = !shouldRunOnce;
|
|
118
|
-
results = (await Promise.all(baseEyes.map(baseEyes => baseEyes.check({ target: baseTarget, settings: baseSettings, logger })))).flat();
|
|
119
|
-
} while (!shouldRunOnce && !results.some(result => result.asExpected) && Date.now() < finishAt);
|
|
120
|
-
if (!shouldRunOnce && !results.some(result => result.asExpected)) {
|
|
121
|
-
baseSettings.ignoreMismatch = false;
|
|
122
|
-
results = (await Promise.all(baseEyes.map(baseEyes => baseEyes.check({ target: baseTarget, settings: baseSettings, logger })))).flat();
|
|
123
118
|
}
|
|
124
|
-
|
|
119
|
+
else {
|
|
120
|
+
transformedRenderers.push(...uniqueRenderers);
|
|
121
|
+
baseTargets.push(target);
|
|
122
|
+
baseSettings.push(settings);
|
|
123
|
+
}
|
|
124
|
+
const promises = transformedRenderers.map(async (renderer, index) => {
|
|
125
|
+
const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
|
|
126
|
+
try {
|
|
127
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
128
|
+
rendererLogger.warn('Command "check" was aborted before checking');
|
|
129
|
+
throw new abort_error_1.AbortError('Command "check" was aborted before checking');
|
|
130
|
+
}
|
|
131
|
+
const baseEyes = await eyes.getBaseEyes({ settings: { renderer }, logger: rendererLogger });
|
|
132
|
+
try {
|
|
133
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
134
|
+
rendererLogger.warn('Command "check" was aborted before checking');
|
|
135
|
+
throw new abort_error_1.AbortError('Command "check" was aborted before checking');
|
|
136
|
+
}
|
|
137
|
+
else if (!baseEyes.running) {
|
|
138
|
+
rendererLogger.warn(`Check on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
|
|
139
|
+
throw new abort_error_1.AbortError(`Check on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
|
|
140
|
+
}
|
|
141
|
+
await baseEyes.check({
|
|
142
|
+
target: baseTargets[index],
|
|
143
|
+
settings: baseSettings[index],
|
|
144
|
+
logger: rendererLogger,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
rendererLogger.error(`Check on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
|
|
149
|
+
if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
|
|
150
|
+
await baseEyes.abort({ logger: rendererLogger });
|
|
151
|
+
error.info = { eyes: baseEyes };
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
rendererLogger.error(`Check with id ${renderer.id} failed before checking started due to an error`, error);
|
|
157
|
+
error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
transformedRenderers.forEach((renderer, index) => {
|
|
162
|
+
const key = (0, extract_renderer_key_1.extractRendererKey)(renderer);
|
|
163
|
+
let item = eyes.storage.get(key);
|
|
164
|
+
if (!item) {
|
|
165
|
+
item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
|
|
166
|
+
eyes.storage.set(key, item);
|
|
167
|
+
}
|
|
168
|
+
item.jobs.push(promises[index]);
|
|
169
|
+
});
|
|
125
170
|
};
|
|
126
171
|
}
|
|
127
172
|
exports.makeCheck = makeCheck;
|
package/dist/classic/core.js
CHANGED
|
@@ -34,21 +34,21 @@ const extract_text_1 = require("../automation/extract-text");
|
|
|
34
34
|
const get_nml_client_1 = require("../automation/get-nml-client");
|
|
35
35
|
const open_eyes_1 = require("./open-eyes");
|
|
36
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
37
|
-
function makeCore({ spec, clients, base, agentId = 'core-classic', cwd = process.cwd(), logger: defaultLogger, }) {
|
|
37
|
+
function makeCore({ spec, clients, base, concurrency, agentId = 'core-classic', cwd = process.cwd(), logger: defaultLogger, }) {
|
|
38
38
|
const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core-classic' } });
|
|
39
39
|
logger.log(`Core classic is initialized ${base ? 'with' : 'without'} custom base core`);
|
|
40
|
-
base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ agentId, cwd, logger }));
|
|
40
|
+
base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ concurrency, agentId, cwd, logger }));
|
|
41
41
|
return utils.general.extend(base, core => {
|
|
42
42
|
return {
|
|
43
43
|
type: 'classic',
|
|
44
44
|
base: base,
|
|
45
45
|
getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
|
|
46
46
|
setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
|
|
47
|
-
getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
|
|
48
|
-
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, logger }),
|
|
49
47
|
locate: (0, locate_1.makeLocate)({ spec, core, logger }),
|
|
50
48
|
locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
|
|
51
49
|
extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
|
|
50
|
+
getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
|
|
51
|
+
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, logger }),
|
|
52
52
|
};
|
|
53
53
|
});
|
|
54
54
|
}
|
|
@@ -24,17 +24,40 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.makeGetBaseEyes = void 0;
|
|
27
|
+
const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
|
|
27
28
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
-
function makeGetBaseEyes({ settings, eyes,
|
|
29
|
-
const getBaseEyesWithCache = utils.general.
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
function makeGetBaseEyes({ settings: defaultSettings, eyes, logger: mainLogger, }) {
|
|
30
|
+
const getBaseEyesWithCache = utils.general.wrap(getBaseEyes, (getBaseEyes, options) => {
|
|
31
|
+
const key = (0, extract_renderer_key_1.extractRendererKey)(options.settings.renderer);
|
|
32
|
+
let item = eyes.storage.get(key);
|
|
33
|
+
if (!item) {
|
|
34
|
+
item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
|
|
35
|
+
eyes.storage.set(key, item);
|
|
36
|
+
}
|
|
37
|
+
if (!item.eyes.settled)
|
|
38
|
+
item.eyes.resolve(getBaseEyes(options));
|
|
39
|
+
return item.eyes;
|
|
40
|
+
});
|
|
32
41
|
return getBaseEyesWithCache;
|
|
33
|
-
async function getBaseEyes({ logger = mainLogger }
|
|
42
|
+
async function getBaseEyes({ settings, logger = mainLogger, }) {
|
|
34
43
|
logger = logger.extend(mainLogger);
|
|
35
44
|
logger.log(`Command "getBaseEyes" is called with settings`, settings);
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
let environment;
|
|
46
|
+
if (utils.types.has(settings.renderer, 'environment')) {
|
|
47
|
+
environment = settings.renderer.environment;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// NOTE: ios and android handled by nml-client
|
|
51
|
+
// TODO: chrome emulation, desktop
|
|
52
|
+
environment = { renderer: settings.renderer };
|
|
53
|
+
}
|
|
54
|
+
return eyes.core.base.openEyes({
|
|
55
|
+
settings: {
|
|
56
|
+
...defaultSettings,
|
|
57
|
+
environment: { ...defaultSettings.environment, ...environment, properties: settings.renderer.properties },
|
|
58
|
+
},
|
|
59
|
+
logger,
|
|
60
|
+
});
|
|
38
61
|
}
|
|
39
62
|
}
|
|
40
63
|
exports.makeGetBaseEyes = makeGetBaseEyes;
|
|
@@ -28,71 +28,57 @@ 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("
|
|
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");
|
|
35
|
+
const abort_controller_1 = require("abort-controller");
|
|
33
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
34
37
|
function makeOpenEyes({ core, spec, logger: mainLogger }) {
|
|
35
|
-
return async function openEyes({ target, settings,
|
|
38
|
+
return async function openEyes({ target, settings, storage = new Map(), logger = mainLogger, }) {
|
|
36
39
|
var _a, _b, _c;
|
|
37
|
-
var _d;
|
|
38
40
|
logger = logger.extend(mainLogger);
|
|
39
|
-
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' : '');
|
|
40
42
|
const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: settings }));
|
|
41
|
-
if (driver &&
|
|
43
|
+
if (driver && storage.size === 0) {
|
|
42
44
|
const environment = await driver.getEnvironment();
|
|
43
|
-
|
|
44
|
-
(_a = settings.environment) !== null && _a !== void 0 ? _a : (settings.environment = {});
|
|
45
|
-
if (environment.isEC) {
|
|
46
|
-
settings.environment.ecSessionId = (await driver.getSessionId());
|
|
47
|
-
}
|
|
48
|
-
if (environment.isWeb) {
|
|
49
|
-
(_b = (_d = settings.environment).userAgent) !== null && _b !== void 0 ? _b : (_d.userAgent = await driver.getUserAgentLegacy());
|
|
50
|
-
}
|
|
51
|
-
if (!settings.environment.deviceName && environment.deviceName) {
|
|
52
|
-
settings.environment.deviceName = environment.deviceName;
|
|
53
|
-
}
|
|
54
|
-
if (!settings.environment.os) {
|
|
55
|
-
if (environment.isNative && environment.platformName) {
|
|
56
|
-
settings.environment.os = environment.platformName;
|
|
57
|
-
if (!settings.keepPlatformNameAsIs) {
|
|
58
|
-
if (/^android/i.test(settings.environment.os)) {
|
|
59
|
-
settings.environment.os = `Android${settings.environment.os.slice(7)}`;
|
|
60
|
-
}
|
|
61
|
-
if (/^ios/i.test(settings.environment.os)) {
|
|
62
|
-
settings.environment.os = `iOS${settings.environment.os.slice(3)}`;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (environment.platformVersion) {
|
|
66
|
-
settings.environment.os += ` ${environment.platformVersion}`;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else if (environment.isReliable &&
|
|
70
|
-
environment.isChromium &&
|
|
71
|
-
((environment.isWindows && Number.parseInt(environment.browserVersion) >= 107) ||
|
|
72
|
-
(environment.isMac && Number.parseInt(environment.browserVersion) >= 90))) {
|
|
73
|
-
settings.environment.os = `${environment.platformName} ${(_c = environment.platformVersion) !== null && _c !== void 0 ? _c : ''}`.trim();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (!settings.environment.viewportSize || environment.isMobile) {
|
|
77
|
-
const viewport = await driver.getViewport();
|
|
78
|
-
const size = await driver.getViewportSize();
|
|
79
|
-
settings.environment.viewportSize = utils.geometry.scale(size, viewport.viewportScale);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
45
|
+
if (((_a = settings.environment) === null || _a === void 0 ? void 0 : _a.viewportSize) && !environment.isMobile) {
|
|
82
46
|
await driver.setViewportSize(settings.environment.viewportSize);
|
|
83
47
|
}
|
|
84
|
-
|
|
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
|
+
}
|
|
85
52
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
53
|
+
const renderers = await (0, extract_default_renderers_1.extractDefaultRenderers)({ driver, settings });
|
|
54
|
+
const controller = new abort_controller_1.AbortController();
|
|
55
|
+
const account = await core.getAccountInfo({ settings, logger });
|
|
56
|
+
return utils.general.extend({}, eyes => {
|
|
57
|
+
var _a;
|
|
58
|
+
return {
|
|
59
|
+
type: 'classic',
|
|
60
|
+
core,
|
|
61
|
+
test: {
|
|
62
|
+
userTestId: settings.userTestId,
|
|
63
|
+
batchId: (_a = settings.batch) === null || _a === void 0 ? void 0 : _a.id,
|
|
64
|
+
keepBatchOpen: settings.keepBatchOpen,
|
|
65
|
+
eyesServer: account.eyesServer,
|
|
66
|
+
ufgServer: account.ufgServer,
|
|
67
|
+
uploadUrl: account.uploadUrl,
|
|
68
|
+
stitchingServiceUrl: account.stitchingServiceUrl,
|
|
69
|
+
renderEnvironmentsUrl: account.renderEnvironmentsUrl,
|
|
70
|
+
account,
|
|
71
|
+
},
|
|
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, renderers, logger }),
|
|
78
|
+
abort: (0, abort_1.makeAbort)({ eyes, target: driver, renderers, spec, controller, logger }),
|
|
79
|
+
getResults: (0, get_results_1.makeGetResults)({ eyes, logger }),
|
|
80
|
+
};
|
|
81
|
+
});
|
|
96
82
|
};
|
|
97
83
|
}
|
|
98
84
|
exports.makeOpenEyes = makeOpenEyes;
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.extractDefaultRenderers = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
async function extractDefaultRenderers({ driver, settings, }) {
|
|
29
|
+
var _a, _b, _c;
|
|
30
|
+
const renderer = { environment: {} };
|
|
31
|
+
if (!driver) {
|
|
32
|
+
renderer.environment = (_a = settings === null || settings === void 0 ? void 0 : settings.environment) !== null && _a !== void 0 ? _a : {};
|
|
33
|
+
return [renderer];
|
|
34
|
+
}
|
|
35
|
+
const currentContext = driver.currentContext;
|
|
36
|
+
try {
|
|
37
|
+
const environment = await driver.getEnvironment();
|
|
38
|
+
const viewport = await driver.getViewport();
|
|
39
|
+
const size = await driver.getViewportSize();
|
|
40
|
+
renderer.environment.viewportSize = utils.geometry.scale(size, viewport.viewportScale);
|
|
41
|
+
if (environment.isEC)
|
|
42
|
+
renderer.environment.ecSessionId = (_b = (await driver.getSessionId())) !== null && _b !== void 0 ? _b : undefined;
|
|
43
|
+
if (environment.isWeb)
|
|
44
|
+
renderer.environment.userAgent = await driver.getUserAgentLegacy();
|
|
45
|
+
if (environment.deviceName)
|
|
46
|
+
renderer.environment.deviceName = environment.deviceName;
|
|
47
|
+
if (environment.isNative && environment.platformName) {
|
|
48
|
+
renderer.environment.os = environment.platformName;
|
|
49
|
+
if (environment.platformVersion)
|
|
50
|
+
renderer.environment.os += ` ${environment.platformVersion}`;
|
|
51
|
+
if (!(settings === null || settings === void 0 ? void 0 : settings.keepPlatformNameAsIs)) {
|
|
52
|
+
if (/^android/i.test(renderer.environment.os)) {
|
|
53
|
+
renderer.environment.os = `Android${renderer.environment.os.slice(7)}`;
|
|
54
|
+
}
|
|
55
|
+
if (/^ios/i.test(renderer.environment.os)) {
|
|
56
|
+
renderer.environment.os = `iOS${renderer.environment.os.slice(3)}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (environment.isReliable &&
|
|
61
|
+
environment.isChromium &&
|
|
62
|
+
((environment.isWindows && Number.parseInt(environment.browserVersion) >= 107) ||
|
|
63
|
+
(environment.isMac && Number.parseInt(environment.browserVersion) >= 90))) {
|
|
64
|
+
renderer.environment.os = `${environment.platformName} ${(_c = environment.platformVersion) !== null && _c !== void 0 ? _c : ''}`.trim();
|
|
65
|
+
}
|
|
66
|
+
return [renderer];
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await currentContext.focus();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.extractDefaultRenderers = extractDefaultRenderers;
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.takeScreenshots = void 0;
|
|
27
|
+
const take_dom_capture_1 = require("./take-dom-capture");
|
|
28
|
+
const take_screenshot_1 = require("../../automation/utils/take-screenshot");
|
|
29
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
30
|
+
async function takeScreenshots({ driver, settings, logger, }) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
const screenshot = await (0, take_screenshot_1.takeScreenshot)({ driver, settings, logger });
|
|
33
|
+
const baseTarget = {
|
|
34
|
+
name: await driver.getTitle(),
|
|
35
|
+
source: await driver.getUrl(),
|
|
36
|
+
image: await screenshot.image.toPng(),
|
|
37
|
+
locationInViewport: utils.geometry.location(screenshot.region),
|
|
38
|
+
calculatedRegions: screenshot.calculatedRegions,
|
|
39
|
+
isTransformed: true,
|
|
40
|
+
};
|
|
41
|
+
const environment = await driver.getEnvironment();
|
|
42
|
+
if (environment.isWeb && settings.domSettings) {
|
|
43
|
+
if (settings.fully)
|
|
44
|
+
await ((_a = screenshot.scrollingElement) === null || _a === void 0 ? void 0 : _a.setAttribute('data-applitools-scroll', 'true'));
|
|
45
|
+
else
|
|
46
|
+
await ((_b = screenshot.element) === null || _b === void 0 ? void 0 : _b.setAttribute('data-applitools-scroll', 'true'));
|
|
47
|
+
baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, settings: settings.domSettings, logger }).catch(() => undefined);
|
|
48
|
+
}
|
|
49
|
+
if (settings.calculateView) {
|
|
50
|
+
const scrollingElement = await driver.mainContext.getScrollingElement();
|
|
51
|
+
const scrollingOffset = !scrollingElement || environment.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
|
|
52
|
+
baseTarget.locationInView = utils.geometry.offset(scrollingOffset, screenshot.region);
|
|
53
|
+
baseTarget.fullViewSize = scrollingElement
|
|
54
|
+
? await scrollingElement.getContentSize()
|
|
55
|
+
: await driver.getViewportSize();
|
|
56
|
+
}
|
|
57
|
+
await screenshot.restoreState();
|
|
58
|
+
return new Array(settings.renderers.length).fill(baseTarget);
|
|
59
|
+
}
|
|
60
|
+
exports.takeScreenshots = takeScreenshots;
|
package/dist/close.js
CHANGED
|
@@ -25,13 +25,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.makeClose = void 0;
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
-
function makeClose({ eyes, logger: mainLogger, }) {
|
|
28
|
+
function makeClose({ eyes, renderers: defaultRenderers, logger: mainLogger, }) {
|
|
29
29
|
return async function close({ settings, config, logger = mainLogger, } = {}) {
|
|
30
|
-
var _a;
|
|
30
|
+
var _a, _b;
|
|
31
31
|
logger = logger.extend(mainLogger, { tags: [`close-${utils.general.shortid()}`] });
|
|
32
|
+
const typedEyes = await eyes.getTypedEyes({ logger });
|
|
32
33
|
settings = { ...config === null || config === void 0 ? void 0 : config.close, ...settings };
|
|
33
34
|
(_a = settings.updateBaselineIfNew) !== null && _a !== void 0 ? _a : (settings.updateBaselineIfNew = true);
|
|
34
|
-
|
|
35
|
+
if (typedEyes.type === 'classic' && !utils.types.isEmpty(defaultRenderers)) {
|
|
36
|
+
(_b = settings.renderers) !== null && _b !== void 0 ? _b : (settings.renderers = defaultRenderers);
|
|
37
|
+
}
|
|
35
38
|
await typedEyes.close({ settings, logger });
|
|
36
39
|
};
|
|
37
40
|
}
|
package/dist/core.js
CHANGED
|
@@ -40,7 +40,7 @@ const close_batch_1 = require("./close-batch");
|
|
|
40
40
|
const delete_test_1 = require("./delete-test");
|
|
41
41
|
const extract_environment_1 = require("./utils/extract-environment");
|
|
42
42
|
const utils = __importStar(require("@applitools/utils"));
|
|
43
|
-
function makeCore({ spec, concurrency, base: defaultBase, environment: defaultEnvironment, agentId = 'core', cwd = process.cwd(), logger: defaultLogger, } = {}) {
|
|
43
|
+
function makeCore({ spec, clients, concurrency, base: defaultBase, environment: defaultEnvironment, agentId = 'core', cwd = process.cwd(), logger: defaultLogger, } = {}) {
|
|
44
44
|
const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core' } });
|
|
45
45
|
const environment = (0, extract_environment_1.extractEnvironment)(defaultEnvironment);
|
|
46
46
|
logger.log(`Core is initialized ${defaultBase ? 'with' : 'without'} custom base core and environment`, environment);
|
|
@@ -50,14 +50,14 @@ function makeCore({ spec, concurrency, base: defaultBase, environment: defaultEn
|
|
|
50
50
|
base: base,
|
|
51
51
|
getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
|
|
52
52
|
setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
|
|
53
|
-
getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ logger }),
|
|
53
|
+
getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
|
|
54
54
|
getECClient: (0, get_ec_client_1.makeGetECClient)({ logger }),
|
|
55
55
|
getAccountInfo: (0, get_account_info_1.makeGetAccountInfo)({ core, logger }),
|
|
56
|
-
makeManager: (0, make_manager_1.makeMakeManager)({ spec, concurrency, core, base: defaultBase, agentId, environment, logger }),
|
|
56
|
+
makeManager: (0, make_manager_1.makeMakeManager)({ spec, clients, concurrency, core, base: defaultBase, agentId, environment, logger }),
|
|
57
57
|
locate: (0, locate_1.makeLocate)({ spec, core, logger }),
|
|
58
58
|
locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
|
|
59
59
|
extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
|
|
60
|
-
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, concurrency, environment, logger }),
|
|
60
|
+
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, clients, core, concurrency, environment, logger }),
|
|
61
61
|
closeBatch: (0, close_batch_1.makeCloseBatch)({ core, logger }),
|
|
62
62
|
deleteTest: (0, delete_test_1.makeDeleteTest)({ core, logger }),
|
|
63
63
|
};
|
package/dist/get-typed-eyes.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.makeGetTypedEyes = void 0;
|
|
4
4
|
function makeGetTypedEyes({ type: defaultType, settings: defaultSettings, target, cores, logger: mainLogger, }) {
|
|
5
5
|
let eyes;
|
|
6
|
-
return async function getTypedEyes({ type = defaultType,
|
|
6
|
+
return async function getTypedEyes({ type = defaultType, logger = mainLogger, } = {}) {
|
|
7
7
|
logger = logger.extend(mainLogger);
|
|
8
8
|
if (!eyes) {
|
|
9
9
|
eyes = await cores[type].openEyes({ target, settings: defaultSettings, logger });
|
|
@@ -13,13 +13,11 @@ function makeGetTypedEyes({ type: defaultType, settings: defaultSettings, target
|
|
|
13
13
|
return eyes;
|
|
14
14
|
}
|
|
15
15
|
else if (type === 'ufg') {
|
|
16
|
-
const
|
|
17
|
-
const typedEyes = await cores.ufg.openEyes({ target, settings: defaultSettings, base, logger });
|
|
16
|
+
const typedEyes = await cores.ufg.openEyes({ target, settings: defaultSettings, storage: eyes.storage, logger });
|
|
18
17
|
return typedEyes;
|
|
19
18
|
}
|
|
20
19
|
else {
|
|
21
|
-
const
|
|
22
|
-
const typedEyes = await cores.classic.openEyes({ target, settings: defaultSettings, base, logger });
|
|
20
|
+
const typedEyes = await cores.classic.openEyes({ target, settings: defaultSettings, storage: eyes.storage, logger });
|
|
23
21
|
return typedEyes;
|
|
24
22
|
}
|
|
25
23
|
};
|
package/dist/make-manager.js
CHANGED
|
@@ -30,7 +30,7 @@ const core_2 = require("./ufg/core");
|
|
|
30
30
|
const open_eyes_1 = require("./open-eyes");
|
|
31
31
|
const get_manager_results_1 = require("./get-manager-results");
|
|
32
32
|
const utils = __importStar(require("@applitools/utils"));
|
|
33
|
-
function makeMakeManager({ spec, concurrency: defaultConcurrency = utils.general.getEnvValue('CONCURRENCY', 'number'), core, base, agentId: defaultAgentId, environment, cwd = process.cwd(), logger: mainLogger, }) {
|
|
33
|
+
function makeMakeManager({ spec, clients, concurrency: defaultConcurrency = utils.general.getEnvValue('CONCURRENCY', 'number'), core, base, agentId: defaultAgentId, environment, cwd = process.cwd(), logger: mainLogger, }) {
|
|
34
34
|
return async function makeManager({ type = 'classic', settings, logger = mainLogger, } = {}) {
|
|
35
35
|
var _a, _b, _c, _d, _e;
|
|
36
36
|
var _f;
|
|
@@ -48,7 +48,7 @@ function makeMakeManager({ spec, concurrency: defaultConcurrency = utils.general
|
|
|
48
48
|
};
|
|
49
49
|
const storage = [];
|
|
50
50
|
return {
|
|
51
|
-
openEyes: utils.general.wrap((0, open_eyes_1.makeOpenEyes)({ type, batch: settings.batch, spec, core, cores, environment, logger }), async (openEyes, options) => {
|
|
51
|
+
openEyes: utils.general.wrap((0, open_eyes_1.makeOpenEyes)({ type, clients, batch: settings.batch, spec, core, cores, environment, logger }), async (openEyes, options) => {
|
|
52
52
|
const eyes = await openEyes(options);
|
|
53
53
|
storage.push(eyes);
|
|
54
54
|
return eyes;
|