@applitools/core 2.5.2 → 2.5.3-legacy
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/abort.js +40 -0
- package/dist/automation/abort.js +47 -0
- package/dist/automation/close.js +52 -0
- package/dist/automation/extract-text.js +3 -2
- package/dist/automation/get-nml-client.js +36 -0
- package/dist/automation/get-results.js +21 -0
- package/dist/automation/get-viewport-size.js +3 -2
- package/dist/automation/locate-text.js +3 -2
- package/dist/automation/locate.js +3 -2
- package/dist/automation/set-viewport-size.js +3 -2
- package/dist/automation/types.js +0 -15
- package/dist/automation/utils/report-kobiton.js +21 -0
- package/dist/automation/utils/take-screenshot.js +4 -2
- package/dist/automation/utils/to-base-check-settings.js +69 -7
- package/dist/automation/utils/to-environment-key.js +31 -0
- package/dist/automation/utils/uniquify-environments.js +27 -0
- package/dist/automation/utils/wait-for-lazy-load.js +9 -8
- package/dist/autonomous/core.js +25 -0
- package/dist/autonomous/create-render-results.js +49 -0
- package/dist/autonomous/create-render-target.js +19 -0
- package/dist/autonomous/get-render-results.js +55 -0
- package/dist/autonomous/open-eyes.js +13 -0
- package/dist/autonomous/start-renders.js +67 -0
- package/dist/autonomous/take-snapshots.js +16 -0
- package/dist/autonomous/types.js +17 -0
- package/dist/check-and-close.js +32 -15
- package/dist/check.js +33 -30
- package/dist/classic/check-and-close.js +189 -46
- package/dist/classic/check.js +319 -60
- package/dist/classic/core.js +6 -5
- package/dist/classic/get-base-eyes.js +27 -7
- package/dist/classic/open-eyes.js +47 -57
- package/dist/classic/utils/extract-default-environments.js +73 -0
- package/dist/classic/utils/take-dom-capture.js +2 -1
- package/dist/classic/utils/take-screenshots.js +63 -0
- package/dist/cli/cli.js +99 -3
- package/dist/close-batch.js +8 -7
- package/dist/close.js +32 -4
- package/dist/core.js +43 -9
- package/dist/delete-test.js +9 -7
- package/dist/extract-text.js +9 -5
- package/dist/get-account-info.js +36 -0
- package/dist/get-ec-client.js +3 -2
- package/dist/get-eyes-results.js +29 -3
- package/dist/get-manager-results.js +52 -18
- package/dist/get-typed-eyes.js +5 -6
- package/dist/index.js +3 -3
- package/dist/lang.js +31 -0
- package/dist/locate-text.js +7 -5
- package/dist/locate.js +7 -5
- package/dist/make-manager.js +34 -11
- package/dist/offline/merge-configs.js +42 -0
- package/dist/offline/run-offline-snapshots.js +341 -0
- package/dist/open-eyes.js +192 -48
- package/dist/run-offline-snapshots.js +336 -0
- package/dist/troubleshoot/check-network.js +5 -1
- package/dist/troubleshoot/eyes.js +3 -3
- package/dist/troubleshoot/logs.js +76 -0
- package/dist/troubleshoot/ufg.js +23 -16
- package/dist/ufg/check-and-close.js +109 -174
- package/dist/ufg/check.js +111 -178
- package/dist/ufg/core.js +10 -8
- package/dist/ufg/create-render-target-from-snapshot.js +21 -0
- package/dist/ufg/get-base-eyes.js +40 -12
- package/dist/ufg/get-ufg-client.js +13 -4
- package/dist/ufg/open-eyes.js +33 -57
- package/dist/ufg/take-snapshots.js +92 -0
- package/dist/ufg/utils/extract-default-environment.js +22 -0
- package/dist/ufg/utils/generate-safe-selectors.js +9 -32
- package/dist/ufg/utils/take-dom-snapshot.js +61 -26
- package/dist/ufg/utils/take-dom-snapshots.js +99 -68
- package/dist/ufg/utils/to-generated-selectors.js +67 -0
- package/dist/ufg/utils/to-safe-check-settings.js +69 -0
- package/dist/universal/core-server.js +53 -22
- package/dist/universal/core.js +23 -6
- package/dist/universal/history.js +9 -0
- package/dist/universal/spec-driver.js +46 -50
- package/dist/{ufg/get-nml-client.js → utils/ensure-offline-folder.js} +14 -13
- package/dist/utils/extract-branching-timestamp.js +56 -0
- package/dist/utils/extract-current-commit.js +72 -0
- package/dist/utils/extract-git-info.js +168 -0
- package/dist/utils/extract-start-info.js +100 -0
- package/dist/utils/extract-test-environment.js +70 -0
- package/dist/utils/memory-usage-logging.js +46 -0
- package/dist/utils/populate-eyes-server-settings.js +41 -0
- package/dist/utils/validate-sdk-version.js +89 -0
- package/package.json +3 -3
- package/types/abort.d.ts +13 -0
- package/types/automation/abort.d.ts +16 -0
- package/types/automation/close.d.ts +14 -0
- package/types/automation/extract-text.d.ts +1 -1
- package/types/automation/get-nml-client.d.ts +16 -0
- package/types/automation/get-results.d.ts +11 -0
- package/types/automation/get-viewport-size.d.ts +1 -1
- package/types/automation/locate-text.d.ts +1 -1
- package/types/automation/locate.d.ts +1 -1
- package/types/automation/set-viewport-size.d.ts +1 -1
- package/types/automation/types.d.ts +107 -16
- package/types/automation/utils/report-kobiton.d.ts +12 -0
- package/types/automation/utils/take-screenshot.d.ts +5 -2
- package/types/automation/utils/to-base-check-settings.d.ts +13 -3
- package/types/automation/utils/to-environment-key.d.ts +2 -0
- package/types/automation/utils/uniquify-environments.d.ts +2 -0
- package/types/automation/utils/wait-for-lazy-load.d.ts +4 -8
- package/types/autonomous/core.d.ts +19 -0
- package/types/autonomous/create-render-results.d.ts +10 -0
- package/types/autonomous/create-render-target.d.ts +12 -0
- package/types/autonomous/get-render-results.d.ts +12 -0
- package/types/autonomous/open-eyes.d.ts +13 -0
- package/types/autonomous/start-renders.d.ts +12 -0
- package/types/autonomous/take-snapshots.d.ts +15 -0
- package/types/autonomous/types.d.ts +57 -0
- package/types/check-and-close.d.ts +3 -3
- package/types/check.d.ts +3 -3
- package/types/classic/check-and-close.d.ts +12 -5
- package/types/classic/check.d.ts +6 -3
- package/types/classic/core.d.ts +8 -2
- 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 +4 -5
- package/types/classic/utils/extract-default-environments.d.ts +9 -0
- package/types/classic/utils/take-dom-capture.d.ts +8 -0
- package/types/classic/utils/take-screenshots.d.ts +18 -0
- package/types/close-batch.d.ts +1 -1
- package/types/close.d.ts +3 -2
- package/types/core.d.ts +11 -2
- package/types/delete-test.d.ts +1 -1
- package/types/extract-text.d.ts +1 -1
- package/types/get-account-info.d.ts +11 -0
- package/types/get-ec-client.d.ts +1 -1
- package/types/get-eyes-results.d.ts +1 -1
- package/types/get-manager-results.d.ts +1 -1
- package/types/get-typed-eyes.d.ts +2 -4
- package/types/index.d.ts +2 -1
- package/types/lang.d.ts +32 -0
- package/types/locate-text.d.ts +1 -1
- package/types/locate.d.ts +1 -1
- package/types/make-manager.d.ts +11 -2
- package/types/offline/merge-configs.d.ts +1 -0
- package/types/offline/run-offline-snapshots.d.ts +11 -0
- package/types/open-eyes.d.ts +11 -2
- package/types/run-offline-snapshots.d.ts +6 -0
- package/types/troubleshoot/logs.d.ts +25 -0
- package/types/types.d.ts +19 -11
- package/types/ufg/check-and-close.d.ts +18 -10
- package/types/ufg/check.d.ts +5 -4
- package/types/ufg/core.d.ts +8 -5
- package/types/ufg/create-render-target-from-snapshot.d.ts +8 -0
- package/types/ufg/get-base-eyes.d.ts +4 -9
- package/types/ufg/get-ufg-client.d.ts +6 -3
- package/types/ufg/open-eyes.d.ts +3 -4
- package/types/ufg/take-snapshots.d.ts +17 -0
- package/types/ufg/types.d.ts +39 -39
- package/types/ufg/utils/extract-default-environment.d.ts +5 -0
- package/types/ufg/utils/generate-safe-selectors.d.ts +3 -12
- package/types/ufg/utils/take-dom-snapshot.d.ts +16 -21
- package/types/ufg/utils/take-dom-snapshots.d.ts +14 -10
- package/types/ufg/utils/to-generated-selectors.d.ts +34 -0
- package/types/ufg/utils/to-safe-check-settings.d.ts +22 -0
- package/types/universal/core-server.d.ts +6 -2
- package/types/universal/core.d.ts +6 -2
- package/types/universal/spec-driver.d.ts +6 -5
- package/types/universal/types.d.ts +59 -51
- package/types/utils/ensure-offline-folder.d.ts +1 -0
- package/types/utils/extract-branching-timestamp.d.ts +16 -0
- package/types/utils/extract-current-commit.d.ts +24 -0
- package/types/utils/extract-git-info.d.ts +59 -0
- package/types/utils/extract-start-info.d.ts +29 -0
- package/types/utils/extract-test-environment.d.ts +2 -0
- package/types/utils/memory-usage-logging.d.ts +7 -0
- package/types/utils/populate-eyes-server-settings.d.ts +2 -0
- package/types/utils/validate-sdk-version.d.ts +42 -0
- package/CHANGELOG.md +0 -222
- package/dist/classic/abort.js +0 -22
- package/dist/classic/close.js +0 -22
- package/dist/ufg/abort.js +0 -32
- package/dist/ufg/close.js +0 -37
- package/dist/ufg/get-results.js +0 -27
- package/dist/ufg/utils/take-vhses.js +0 -153
- package/dist/ufg/utils/uniquify-renderers.js +0 -27
- package/dist/utils/extract-ci-provider.js +0 -31
- package/types/classic/abort.d.ts +0 -16
- package/types/classic/close.d.ts +0 -16
- package/types/ufg/abort.d.ts +0 -21
- package/types/ufg/close.d.ts +0 -19
- package/types/ufg/get-nml-client.d.ts +0 -17
- package/types/ufg/get-results.d.ts +0 -16
- package/types/ufg/utils/take-vhses.d.ts +0 -17
- package/types/ufg/utils/uniquify-renderers.d.ts +0 -2
- package/types/utils/extract-ci-provider.d.ts +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toGeneratedSelectors = void 0;
|
|
4
|
+
function toGeneratedSelectors({ elementReferences, logger, transformElementReference, }) {
|
|
5
|
+
var _a, _b, _c;
|
|
6
|
+
const elementReferencesToMark = [
|
|
7
|
+
(_a = elementReferences.target) !== null && _a !== void 0 ? _a : [],
|
|
8
|
+
(_b = elementReferences.scrolling) !== null && _b !== void 0 ? _b : [],
|
|
9
|
+
(_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : [],
|
|
10
|
+
].flat();
|
|
11
|
+
return { elementReferencesToMark, getGeneratedSelectors };
|
|
12
|
+
function getGeneratedSelectors(generatedSelectors) {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
let target = undefined;
|
|
15
|
+
let scrolling = undefined;
|
|
16
|
+
let calculate = [];
|
|
17
|
+
if (generatedSelectors) {
|
|
18
|
+
let offset = 0;
|
|
19
|
+
if (elementReferences.target) {
|
|
20
|
+
const targetOrError = (_a = generatedSelectors[offset++].safeSelector) !== null && _a !== void 0 ? _a : undefined;
|
|
21
|
+
if (!targetOrError)
|
|
22
|
+
throw new Error('Target element not found');
|
|
23
|
+
if (typeof targetOrError !== 'string' && 'error' in targetOrError)
|
|
24
|
+
throw new Error(`Target element is stale - please make sure the element is not detached from the DOM tree. ${targetOrError.error}`);
|
|
25
|
+
target = targetOrError;
|
|
26
|
+
}
|
|
27
|
+
if (elementReferences.scrolling) {
|
|
28
|
+
const scrollingOrError = (_b = generatedSelectors[offset++].safeSelector) !== null && _b !== void 0 ? _b : undefined;
|
|
29
|
+
const isError = typeof scrollingOrError === 'object' && 'error' in scrollingOrError;
|
|
30
|
+
scrolling = isError ? undefined : scrollingOrError;
|
|
31
|
+
if (isError) {
|
|
32
|
+
logger.log('Error in scrolling element:', scrollingOrError);
|
|
33
|
+
}
|
|
34
|
+
else if (!scrolling) {
|
|
35
|
+
logger.log('Scrolling element not found');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
calculate = generatedSelectors.slice(offset).map(generatedSelector => {
|
|
39
|
+
var _a;
|
|
40
|
+
const safeSelector = generatedSelector.safeSelector;
|
|
41
|
+
const isError = safeSelector && typeof safeSelector === 'object' && 'error' in safeSelector;
|
|
42
|
+
if (isError) {
|
|
43
|
+
logger.log('Error in calculate element:', safeSelector);
|
|
44
|
+
}
|
|
45
|
+
else if (!safeSelector) {
|
|
46
|
+
logger.log('Calculate element not found', (_a = generatedSelector.originalSelector) !== null && _a !== void 0 ? _a : '');
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
...generatedSelector,
|
|
50
|
+
safeSelector: isError ? null : safeSelector,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// the entire else statement should be a dead code that was used for NMG, will be removed later
|
|
56
|
+
target = elementReferences.target && transformElementReference(elementReferences.target);
|
|
57
|
+
scrolling = elementReferences.scrolling && transformElementReference(elementReferences.scrolling);
|
|
58
|
+
calculate = ((_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : []).map(elementReference => {
|
|
59
|
+
var _a;
|
|
60
|
+
const selector = (_a = transformElementReference(elementReference)) !== null && _a !== void 0 ? _a : null;
|
|
61
|
+
return { originalSelector: selector, safeSelector: selector };
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return { target: target, scrolling, calculate };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.toGeneratedSelectors = toGeneratedSelectors;
|
|
@@ -0,0 +1,69 @@
|
|
|
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.toSafeCheckSettings = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
|
|
29
|
+
function toSafeCheckSettings({ settings }) {
|
|
30
|
+
const calculate = regionTypes.flatMap(regionType => {
|
|
31
|
+
var _a;
|
|
32
|
+
return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
|
|
33
|
+
const { region } = utils.types.has(reference, 'region') ? reference : { region: reference };
|
|
34
|
+
return !isRegion(region) ? regions.concat(region) : regions;
|
|
35
|
+
}, []);
|
|
36
|
+
});
|
|
37
|
+
const target = !isRegion(settings.region) ? settings.region : undefined;
|
|
38
|
+
const scrolling = settings.scrollRootElement;
|
|
39
|
+
return { elementReferences: { target, scrolling, calculate }, getSafeCheckSettings };
|
|
40
|
+
function getSafeCheckSettings({ selectors, }) {
|
|
41
|
+
const transformedSettings = { ...settings };
|
|
42
|
+
regionTypes.forEach(regionType => {
|
|
43
|
+
var _a;
|
|
44
|
+
if (!transformedSettings[`${regionType}Regions`])
|
|
45
|
+
return;
|
|
46
|
+
transformedSettings[`${regionType}Regions`] = (_a = transformedSettings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(reference => {
|
|
47
|
+
const { region, ...options } = utils.types.has(reference, 'region') ? reference : { region: reference };
|
|
48
|
+
if (isRegion(region))
|
|
49
|
+
return reference;
|
|
50
|
+
const { originalSelector, safeSelector } = selectors.calculate.shift();
|
|
51
|
+
if (!safeSelector)
|
|
52
|
+
return [];
|
|
53
|
+
return {
|
|
54
|
+
region: safeSelector,
|
|
55
|
+
regionId: utils.types.isString(originalSelector) ? originalSelector : originalSelector === null || originalSelector === void 0 ? void 0 : originalSelector.selector,
|
|
56
|
+
...options,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
if (!isRegion(transformedSettings.region))
|
|
61
|
+
transformedSettings.region = selectors.target;
|
|
62
|
+
transformedSettings.scrollRootElement = selectors.scrolling;
|
|
63
|
+
return transformedSettings;
|
|
64
|
+
}
|
|
65
|
+
function isRegion(region) {
|
|
66
|
+
return utils.types.has(region, ['x', 'y', 'width', 'height']);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.toSafeCheckSettings = toSafeCheckSettings;
|
|
@@ -14,27 +14,30 @@ const refer_1 = require("./refer");
|
|
|
14
14
|
const history_1 = require("./history");
|
|
15
15
|
const os_1 = __importDefault(require("os"));
|
|
16
16
|
const path_1 = __importDefault(require("path"));
|
|
17
|
-
async function makeCoreServer({ debug = false, shutdownMode = 'lazy', idleTimeout = 900000, // 15min
|
|
18
|
-
printStdout = false, ...handlerOptions } = {}) {
|
|
17
|
+
async function makeCoreServer({ environment: defaultEnvironment, agentIdPrefix = `eyes-universal/${require('../../package.json').version}`, debug = false, shutdownMode = 'lazy', idleTimeout = 900000, // 15min
|
|
18
|
+
printStdout = false, isProcess = false, maskLog = false, ...handlerOptions } = {}) {
|
|
19
19
|
var _a, _b;
|
|
20
20
|
const logDirname = (_a = process.env.APPLITOOLS_LOG_DIR) !== null && _a !== void 0 ? _a : path_1.default.resolve(os_1.default.tmpdir(), `applitools-logs`);
|
|
21
21
|
const baseLogger = (0, logger_1.makeLogger)({
|
|
22
22
|
handler: { type: 'rolling file', name: 'universal', dirname: logDirname },
|
|
23
|
-
label: 'core-universal',
|
|
24
23
|
level: 'info',
|
|
25
|
-
colors: false,
|
|
24
|
+
format: { label: 'core-universal', colors: false },
|
|
25
|
+
maskLog,
|
|
26
26
|
});
|
|
27
27
|
baseLogger.log('Core universal is going to be initialized with options', {
|
|
28
28
|
debug,
|
|
29
29
|
shutdownMode,
|
|
30
30
|
idleTimeout,
|
|
31
31
|
printStdout,
|
|
32
|
+
defaultEnvironment,
|
|
32
33
|
...handlerOptions,
|
|
33
34
|
});
|
|
34
35
|
const { server, port } = await (0, ws_server_1.makeServer)({ ...handlerOptions, debug });
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
if (isProcess) {
|
|
37
|
+
// eslint-disable-next-line no-console
|
|
38
|
+
console.log(port.toString()); // NOTE: this is a part of the generic protocol
|
|
39
|
+
(_b = process.send) === null || _b === void 0 ? void 0 : _b.call(process, { name: 'port', payload: { port } }); // NOTE: this is a part of the js specific protocol
|
|
40
|
+
}
|
|
38
41
|
if (!server) {
|
|
39
42
|
baseLogger.console.log(`You are trying to spawn a duplicated server, use the server on port ${port} instead`);
|
|
40
43
|
return { port };
|
|
@@ -81,14 +84,22 @@ printStdout = false, ...handlerOptions } = {}) {
|
|
|
81
84
|
error: (message) => socket.emit('Logger.log', { level: 'error', message }),
|
|
82
85
|
fatal: (message) => socket.emit('Logger.log', { level: 'fatal', message }),
|
|
83
86
|
},
|
|
87
|
+
maskLog,
|
|
84
88
|
});
|
|
85
89
|
logger.console.log(`Logs saved in: ${logDirname}`);
|
|
86
|
-
const corePromise = socket.wait('Core.makeCore', ({ agentId,
|
|
90
|
+
const corePromise = socket.wait('Core.makeCore', ({ spec, agentId, environment, cwd }) => {
|
|
87
91
|
return (0, core_1.makeCore)({
|
|
88
|
-
agentId: `eyes-universal/${require('../../package.json').version}/${agentId}`,
|
|
89
92
|
spec: spec === 'webdriver' ? spec_driver_webdriver_1.default : (0, spec_driver_1.makeSpec)({ socket, spec }),
|
|
93
|
+
agentId: `${agentIdPrefix}/${agentId}`,
|
|
90
94
|
cwd,
|
|
95
|
+
environment: {
|
|
96
|
+
...defaultEnvironment,
|
|
97
|
+
...environment,
|
|
98
|
+
versions: { ...defaultEnvironment === null || defaultEnvironment === void 0 ? void 0 : defaultEnvironment.versions, ...environment === null || environment === void 0 ? void 0 : environment.versions },
|
|
99
|
+
universal: true,
|
|
100
|
+
},
|
|
91
101
|
logger,
|
|
102
|
+
maskLog,
|
|
92
103
|
});
|
|
93
104
|
});
|
|
94
105
|
socket.command('Core.getAccountInfo', async (options) => {
|
|
@@ -113,6 +124,10 @@ printStdout = false, ...handlerOptions } = {}) {
|
|
|
113
124
|
const core = await corePromise;
|
|
114
125
|
return core.deleteTest(options);
|
|
115
126
|
});
|
|
127
|
+
socket.command('Core.logEvent', async ({ settings }) => {
|
|
128
|
+
const core = await corePromise;
|
|
129
|
+
return core.logEvent({ settings });
|
|
130
|
+
});
|
|
116
131
|
socket.command('Core.locate', async (options) => {
|
|
117
132
|
const core = await corePromise;
|
|
118
133
|
return core.locate(options);
|
|
@@ -130,20 +145,12 @@ printStdout = false, ...handlerOptions } = {}) {
|
|
|
130
145
|
const client = await core.getECClient(options);
|
|
131
146
|
return { url: client.url };
|
|
132
147
|
});
|
|
133
|
-
// TODO remove
|
|
134
|
-
socket.command('Core.makeECClient', async (options) => {
|
|
135
|
-
const core = await corePromise;
|
|
136
|
-
const client = await core.getECClient(options);
|
|
137
|
-
return { url: client.url };
|
|
138
|
-
});
|
|
139
148
|
socket.command('Core.makeManager', async (options) => {
|
|
140
|
-
var _a
|
|
141
|
-
var _e, _f, _g;
|
|
149
|
+
var _a;
|
|
142
150
|
const core = await corePromise;
|
|
143
|
-
(_a = options.settings)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
(_d = (_g = options.settings).agentId) !== null && _d !== void 0 ? _d : (_g.agentId = options.agentId);
|
|
151
|
+
if ((_a = options.settings) === null || _a === void 0 ? void 0 : _a.agentId) {
|
|
152
|
+
options.settings.agentId = `${agentIdPrefix}/${options.settings.agentId}`;
|
|
153
|
+
}
|
|
147
154
|
return refer.ref(await core.makeManager(options));
|
|
148
155
|
});
|
|
149
156
|
socket.command('EyesManager.openEyes', async ({ manager, ...options }) => {
|
|
@@ -177,9 +184,33 @@ printStdout = false, ...handlerOptions } = {}) {
|
|
|
177
184
|
return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.getResults(options);
|
|
178
185
|
});
|
|
179
186
|
socket.command('Debug.getHistory', async () => {
|
|
180
|
-
return
|
|
187
|
+
return {
|
|
188
|
+
...getHistory(),
|
|
189
|
+
initialArgs: {
|
|
190
|
+
environment: defaultEnvironment,
|
|
191
|
+
agentIdPrefix,
|
|
192
|
+
debug,
|
|
193
|
+
shutdownMode,
|
|
194
|
+
idleTimeout,
|
|
195
|
+
printStdout,
|
|
196
|
+
isProcess,
|
|
197
|
+
maskLog,
|
|
198
|
+
...handlerOptions,
|
|
199
|
+
},
|
|
200
|
+
};
|
|
181
201
|
});
|
|
182
202
|
});
|
|
203
|
+
process.on('unhandledRejection', error => {
|
|
204
|
+
baseLogger.error('Unhandled promise rejection', error);
|
|
205
|
+
/* eslint-disable-next-line no-console */
|
|
206
|
+
console.error('Unhandled promise rejection', error);
|
|
207
|
+
});
|
|
208
|
+
process.on('uncaughtException', error => {
|
|
209
|
+
baseLogger.error('Uncaught error terminating the process', error);
|
|
210
|
+
/* eslint-disable-next-line no-console */
|
|
211
|
+
console.error('Uncaught error terminating the process', error);
|
|
212
|
+
process.exit(1);
|
|
213
|
+
});
|
|
183
214
|
return { port, close: () => server.close() };
|
|
184
215
|
}
|
|
185
216
|
exports.makeCoreServer = makeCoreServer;
|
package/dist/universal/core.js
CHANGED
|
@@ -32,6 +32,7 @@ const utils = __importStar(require("@applitools/utils"));
|
|
|
32
32
|
function makeCore(options) {
|
|
33
33
|
const socketPromise = makeClientSocket(options);
|
|
34
34
|
const core = {
|
|
35
|
+
concurrency: undefined,
|
|
35
36
|
base: null,
|
|
36
37
|
async getAccountInfo(options) {
|
|
37
38
|
const socket = await socketPromise;
|
|
@@ -45,6 +46,17 @@ function makeCore(options) {
|
|
|
45
46
|
const socket = await socketPromise;
|
|
46
47
|
return socket.request('Core.setViewportSize', options);
|
|
47
48
|
},
|
|
49
|
+
async getNMLClient(_options) {
|
|
50
|
+
// TODO
|
|
51
|
+
return null;
|
|
52
|
+
},
|
|
53
|
+
async clearNMLClientCache(_driver) {
|
|
54
|
+
return null;
|
|
55
|
+
},
|
|
56
|
+
async getECClient(options) {
|
|
57
|
+
const socket = await socketPromise;
|
|
58
|
+
return socket.request('Core.makeECClient', options);
|
|
59
|
+
},
|
|
48
60
|
async locate(options) {
|
|
49
61
|
const socket = await socketPromise;
|
|
50
62
|
return socket.request('Core.locate', options);
|
|
@@ -71,10 +83,6 @@ function makeCore(options) {
|
|
|
71
83
|
const managerRef = await socket.request('Core.makeManager', options);
|
|
72
84
|
return makeManager({ socket, core, managerRef });
|
|
73
85
|
},
|
|
74
|
-
async getECClient(options) {
|
|
75
|
-
const socket = await socketPromise;
|
|
76
|
-
return socket.request('Core.makeECClient', options);
|
|
77
|
-
},
|
|
78
86
|
async closeBatch(options) {
|
|
79
87
|
const socket = await socketPromise;
|
|
80
88
|
return socket.request('Core.closeBatch', options);
|
|
@@ -87,12 +95,18 @@ function makeCore(options) {
|
|
|
87
95
|
const socket = await socketPromise;
|
|
88
96
|
return socket.request('Core.logEvent', options);
|
|
89
97
|
},
|
|
98
|
+
async updateIfScm() {
|
|
99
|
+
// TODO
|
|
100
|
+
return null;
|
|
101
|
+
},
|
|
90
102
|
};
|
|
91
103
|
return core;
|
|
92
104
|
}
|
|
93
105
|
exports.makeCore = makeCore;
|
|
94
106
|
function makeManager({ socket, core, managerRef, }) {
|
|
95
107
|
const manager = {
|
|
108
|
+
concurrency: undefined,
|
|
109
|
+
base: null,
|
|
96
110
|
async openEyes(options) {
|
|
97
111
|
const eyesRef = await socket.request('EyesManager.openEyes', { ...options, manager: managerRef });
|
|
98
112
|
return makeEyes({ socket, core, eyesRef });
|
|
@@ -108,6 +122,7 @@ function makeEyes({ socket, core, eyesRef, }) {
|
|
|
108
122
|
const eyes = {
|
|
109
123
|
test: null,
|
|
110
124
|
running: null,
|
|
125
|
+
storage: null,
|
|
111
126
|
core,
|
|
112
127
|
getBaseEyes() {
|
|
113
128
|
return null;
|
|
@@ -134,15 +149,17 @@ function makeEyes({ socket, core, eyesRef, }) {
|
|
|
134
149
|
return eyes;
|
|
135
150
|
}
|
|
136
151
|
exports.makeEyes = makeEyes;
|
|
137
|
-
async function makeClientSocket({ agentId, spec, }) {
|
|
152
|
+
async function makeClientSocket({ agentId, environment, spec, maskLog, }) {
|
|
138
153
|
const { port } = await (0, core_server_1.makeCoreServer)();
|
|
139
154
|
const socket = (0, socket_1.makeSocket)(new ws_1.WebSocket(`ws://localhost:${port}/eyes`), {
|
|
140
155
|
transport: 'ws',
|
|
141
156
|
});
|
|
142
157
|
socket.emit('Core.makeCore', {
|
|
158
|
+
spec: utils.types.isString(spec) ? spec : Object.keys(spec),
|
|
143
159
|
agentId,
|
|
160
|
+
environment,
|
|
144
161
|
cwd: process.cwd(),
|
|
145
|
-
|
|
162
|
+
maskLog,
|
|
146
163
|
});
|
|
147
164
|
if (!utils.types.isString(spec)) {
|
|
148
165
|
Object.entries(spec).forEach(([name, command]) => {
|
|
@@ -7,6 +7,8 @@ function withHistory(socket) {
|
|
|
7
7
|
managers: new Map(),
|
|
8
8
|
eyes: new Map(),
|
|
9
9
|
startedAt: new Date().toISOString(),
|
|
10
|
+
coreArgs: [{}],
|
|
11
|
+
unknownEvents: [],
|
|
10
12
|
};
|
|
11
13
|
const originalCommand = socket.command;
|
|
12
14
|
socket.command = function command(name, fn) {
|
|
@@ -21,6 +23,7 @@ function withHistory(socket) {
|
|
|
21
23
|
throw error;
|
|
22
24
|
}
|
|
23
25
|
finally {
|
|
26
|
+
console.log('@@@', name, payload);
|
|
24
27
|
if (name === 'Core.makeManager') {
|
|
25
28
|
const managerRef = result;
|
|
26
29
|
history.managers.set(extractRefId(managerRef), { ...payload, manager: result, eyes: [] });
|
|
@@ -64,6 +67,12 @@ function withHistory(socket) {
|
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
}
|
|
70
|
+
else if (name === 'Core.makeCore') {
|
|
71
|
+
history.coreArgs.push(payload);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
history.unknownEvents.push({ name, payload });
|
|
75
|
+
}
|
|
67
76
|
}
|
|
68
77
|
});
|
|
69
78
|
};
|
|
@@ -27,7 +27,6 @@ exports.makeSpec = void 0;
|
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
28
|
function makeSpec({ socket, spec, }) {
|
|
29
29
|
const commands = {
|
|
30
|
-
// #region UTILITY
|
|
31
30
|
isDriver(driver) {
|
|
32
31
|
return utils.types.has(driver, 'applitools-ref-id');
|
|
33
32
|
},
|
|
@@ -44,32 +43,17 @@ function makeSpec({ socket, spec, }) {
|
|
|
44
43
|
utils.types.has(selector, 'selector') &&
|
|
45
44
|
(utils.types.isString(selector.selector) || utils.types.has(selector, 'applitools-ref-id'))));
|
|
46
45
|
},
|
|
47
|
-
extractContext(driver) {
|
|
48
|
-
return driver.context;
|
|
49
|
-
},
|
|
50
|
-
extractSelector(element) {
|
|
51
|
-
return element.selector;
|
|
52
|
-
},
|
|
53
|
-
extractHostName(driver) {
|
|
54
|
-
var _a;
|
|
55
|
-
return (_a = driver.hostname) !== null && _a !== void 0 ? _a : null;
|
|
56
|
-
},
|
|
57
|
-
isStaleElementError(error) {
|
|
58
|
-
return error === null || error === void 0 ? void 0 : error.isStaleElementError;
|
|
59
|
-
},
|
|
60
46
|
async isEqualElements(context, element1, element2) {
|
|
61
47
|
return socket.request('Driver.isEqualElements', { context, element1, element2 });
|
|
62
48
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
async mainContext(context) {
|
|
66
|
-
return socket.request('Driver.mainContext', { context });
|
|
49
|
+
isStaleElementError(error) {
|
|
50
|
+
return error === null || error === void 0 ? void 0 : error.isStaleElementError;
|
|
67
51
|
},
|
|
68
|
-
|
|
69
|
-
return
|
|
52
|
+
extractContext(driver) {
|
|
53
|
+
return driver.context;
|
|
70
54
|
},
|
|
71
|
-
|
|
72
|
-
return
|
|
55
|
+
extractSelector(element) {
|
|
56
|
+
return element.selector;
|
|
73
57
|
},
|
|
74
58
|
async executeScript(context, script, arg) {
|
|
75
59
|
return socket.request('Driver.executeScript', { context, script: script.toString(), arg });
|
|
@@ -89,20 +73,26 @@ function makeSpec({ socket, spec, }) {
|
|
|
89
73
|
async setElementText(context, element, text) {
|
|
90
74
|
return socket.request('Driver.setElementText', { context, element, text });
|
|
91
75
|
},
|
|
92
|
-
async
|
|
93
|
-
return socket.request('Driver.
|
|
76
|
+
async getElementRegion(context, element) {
|
|
77
|
+
return socket.request('Driver.getElementRegion', { context, element });
|
|
94
78
|
},
|
|
95
|
-
async
|
|
96
|
-
return socket.request('Driver.
|
|
79
|
+
async getElementAttribute(context, element, attr) {
|
|
80
|
+
return socket.request('Driver.getElementAttribute', { context, element, attr });
|
|
97
81
|
},
|
|
98
|
-
async
|
|
99
|
-
return socket.request('Driver.
|
|
82
|
+
async hover(context, element) {
|
|
83
|
+
return socket.request('Driver.hover', { context, element });
|
|
100
84
|
},
|
|
101
|
-
async
|
|
102
|
-
return socket.request('Driver.
|
|
85
|
+
async click(context, element) {
|
|
86
|
+
return socket.request('Driver.click', { context, element });
|
|
103
87
|
},
|
|
104
|
-
async
|
|
105
|
-
return socket.request('Driver.
|
|
88
|
+
async mainContext(context) {
|
|
89
|
+
return socket.request('Driver.mainContext', { context });
|
|
90
|
+
},
|
|
91
|
+
async parentContext(context) {
|
|
92
|
+
return socket.request('Driver.parentContext', { context });
|
|
93
|
+
},
|
|
94
|
+
async childContext(context, element) {
|
|
95
|
+
return socket.request('Driver.childContext', { context, element });
|
|
106
96
|
},
|
|
107
97
|
async getCapabilities(driver) {
|
|
108
98
|
return socket.request('Driver.getCapabilities', { driver });
|
|
@@ -110,23 +100,18 @@ function makeSpec({ socket, spec, }) {
|
|
|
110
100
|
async getDriverInfo(driver) {
|
|
111
101
|
return socket.request('Driver.getDriverInfo', { driver });
|
|
112
102
|
},
|
|
113
|
-
async
|
|
114
|
-
return socket.request('Driver.
|
|
115
|
-
},
|
|
116
|
-
async getUrl(driver) {
|
|
117
|
-
return socket.request('Driver.getUrl', { driver });
|
|
103
|
+
async getWindowSize(driver) {
|
|
104
|
+
return socket.request('Driver.getWindowSize', { driver });
|
|
118
105
|
},
|
|
119
|
-
async
|
|
120
|
-
return socket.request('Driver.
|
|
106
|
+
async setWindowSize(driver, size) {
|
|
107
|
+
return socket.request('Driver.setWindowSize', { driver, size });
|
|
121
108
|
},
|
|
122
|
-
async
|
|
123
|
-
return socket.request('Driver.
|
|
109
|
+
async getViewportSize(driver) {
|
|
110
|
+
return socket.request('Driver.getViewportSize', { driver });
|
|
124
111
|
},
|
|
125
|
-
async
|
|
126
|
-
return socket.request('Driver.
|
|
112
|
+
async setViewportSize(driver, size) {
|
|
113
|
+
return socket.request('Driver.setViewportSize', { driver, size });
|
|
127
114
|
},
|
|
128
|
-
// #endregion
|
|
129
|
-
// #region NATIVE COMMANDS
|
|
130
115
|
async getSystemBars(driver) {
|
|
131
116
|
return socket.request('Driver.getSystemBars', { driver });
|
|
132
117
|
},
|
|
@@ -136,15 +121,24 @@ function makeSpec({ socket, spec, }) {
|
|
|
136
121
|
async setOrientation(driver, orientation) {
|
|
137
122
|
return socket.request('Driver.setOrientation', { driver, orientation });
|
|
138
123
|
},
|
|
139
|
-
async
|
|
140
|
-
return socket.request('Driver.
|
|
124
|
+
async getCookies(driver, context) {
|
|
125
|
+
return socket.request('Driver.getCookies', { driver, context });
|
|
126
|
+
},
|
|
127
|
+
async getTitle(driver) {
|
|
128
|
+
return socket.request('Driver.getTitle', { driver });
|
|
129
|
+
},
|
|
130
|
+
async getUrl(driver) {
|
|
131
|
+
return socket.request('Driver.getUrl', { driver });
|
|
141
132
|
},
|
|
142
|
-
async
|
|
143
|
-
return socket.request('Driver.
|
|
133
|
+
async takeScreenshot(driver) {
|
|
134
|
+
return socket.request('Driver.takeScreenshot', { driver });
|
|
144
135
|
},
|
|
145
136
|
async performAction(driver, steps) {
|
|
146
137
|
return socket.request('Driver.performAction', { driver, steps });
|
|
147
138
|
},
|
|
139
|
+
async visit(driver, url) {
|
|
140
|
+
return socket.request('Driver.visit', { driver, url });
|
|
141
|
+
},
|
|
148
142
|
async getCurrentWorld(driver) {
|
|
149
143
|
return socket.request('Driver.getCurrentWorld', { driver });
|
|
150
144
|
},
|
|
@@ -154,7 +148,9 @@ function makeSpec({ socket, spec, }) {
|
|
|
154
148
|
async switchWorld(driver, name) {
|
|
155
149
|
return socket.request('Driver.switchWorld', { driver, name });
|
|
156
150
|
},
|
|
157
|
-
|
|
151
|
+
async reload(driver) {
|
|
152
|
+
return socket.request('Driver.reload', { driver });
|
|
153
|
+
},
|
|
158
154
|
};
|
|
159
155
|
return spec.reduce((spec, name) => {
|
|
160
156
|
return Object.assign(spec, { [name]: commands[name] });
|
|
@@ -22,20 +22,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
27
|
-
const
|
|
29
|
+
exports.ensureOfflineFolder = void 0;
|
|
30
|
+
const fs_1 = __importDefault(require("fs"));
|
|
31
|
+
const path_1 = __importDefault(require("path"));
|
|
28
32
|
const utils = __importStar(require("@applitools/utils"));
|
|
29
|
-
function
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const brokerUrl = await driver.extractBrokerUrl();
|
|
36
|
-
if (!brokerUrl)
|
|
37
|
-
return null;
|
|
38
|
-
return (0, nml_client_1.makeNMLClient)({ config: { brokerUrl, ...config }, logger });
|
|
33
|
+
function ensureOfflineFolder() {
|
|
34
|
+
const offlineLocationPath = utils.general.getEnvValue('OFFLINE_LOCATION_PATH')
|
|
35
|
+
? path_1.default.resolve(utils.general.getEnvValue('OFFLINE_LOCATION_PATH'), `execution-${Date.now()}`)
|
|
36
|
+
: undefined;
|
|
37
|
+
if (offlineLocationPath) {
|
|
38
|
+
fs_1.default.mkdirSync(offlineLocationPath, { recursive: true });
|
|
39
39
|
}
|
|
40
|
+
return offlineLocationPath;
|
|
40
41
|
}
|
|
41
|
-
exports.
|
|
42
|
+
exports.ensureOfflineFolder = ensureOfflineFolder;
|
|
@@ -0,0 +1,56 @@
|
|
|
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.extractBranchingTimestamp = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
const logger_1 = require("@applitools/logger");
|
|
29
|
+
exports.extractBranchingTimestamp = utils.general.cachify(extractGitBranchingTimestamp);
|
|
30
|
+
async function extractGitBranchingTimestamp({ branchName, parentBranchName, execOptions, logger = (0, logger_1.makeLogger)(), }) {
|
|
31
|
+
var _a;
|
|
32
|
+
logger = logger.extend({ tags: [`extract-branching-timestamp-${utils.general.shortid()}`] });
|
|
33
|
+
const command = `HASH=$(git merge-base ${branchName} ${parentBranchName}) && git show -q --format=%aI $HASH`;
|
|
34
|
+
let result = await executeWithLog(command);
|
|
35
|
+
if (result.stderr) {
|
|
36
|
+
const [, missingBranch] = (_a = result.stderr.match(/Not a valid object name ([^\s]+)/)) !== null && _a !== void 0 ? _a : [];
|
|
37
|
+
if (missingBranch) {
|
|
38
|
+
result = await executeWithLog(`git fetch origin ${missingBranch}:${missingBranch} && ${command}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (!result.stdout) {
|
|
42
|
+
result = await executeWithLog(`git fetch origin --unshallow && ${command}`);
|
|
43
|
+
}
|
|
44
|
+
const timestamp = result.stdout.replace(/\s/g, '');
|
|
45
|
+
if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}/.test(timestamp)) {
|
|
46
|
+
throw new Error(`stderr: ${result.stderr}, stdout: ${result.stdout}`);
|
|
47
|
+
}
|
|
48
|
+
return timestamp;
|
|
49
|
+
async function executeWithLog(command) {
|
|
50
|
+
logger.log(`executing command: ${command}`);
|
|
51
|
+
const result = await utils.process.execute(command, execOptions);
|
|
52
|
+
if (result.stderr && result.code)
|
|
53
|
+
logger.log(`exit code: ${result.code}, stderr: ${result.stderr}`);
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
}
|