@applitools/core 1.4.6 → 1.4.8
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/{classic → automation}/extract-text.js +14 -11
- package/dist/automation/get-viewport-size.js +2 -2
- package/dist/{classic → automation}/locate-text.js +5 -6
- package/dist/automation/locate.js +2 -2
- package/dist/automation/set-viewport-size.js +2 -2
- package/dist/automation/utils/take-screenshot.js +2 -2
- package/dist/{utils → automation/utils}/to-base-check-settings.js +3 -2
- package/dist/{utils → automation/utils}/wait-for-lazy-load.js +2 -2
- package/dist/check-and-close.js +7 -5
- package/dist/check.js +4 -5
- package/dist/classic/abort.js +15 -6
- package/dist/classic/check-and-close.js +9 -5
- package/dist/classic/check.js +12 -8
- package/dist/classic/close.js +14 -5
- package/dist/classic/core.js +9 -5
- package/dist/classic/open-eyes.js +17 -19
- package/dist/classic/utils/take-dom-capture.js +35 -54
- package/dist/close.js +1 -25
- package/dist/core.js +9 -5
- package/dist/errors/abort-error.js +5 -1
- package/dist/extract-text.js +13 -17
- package/dist/get-eyes-results.js +18 -0
- package/dist/{close-manager.js → get-manager-results.js} +11 -12
- package/dist/get-typed-eyes.js +5 -6
- package/dist/index.js +3 -3
- package/dist/locate-text.js +33 -7
- package/dist/locate.js +1 -1
- package/dist/make-ec-client.js +1 -9
- package/dist/make-manager.js +8 -33
- package/dist/open-eyes.js +3 -5
- package/dist/troubleshoot/check-network.js +41 -34
- package/dist/troubleshoot/eyes.js +2 -2
- package/dist/troubleshoot/ufg.js +3 -2
- package/dist/troubleshoot/utils.js +1 -25
- package/dist/types.js +0 -1
- package/dist/ufg/abort.js +19 -24
- package/dist/ufg/check-and-close.js +55 -55
- package/dist/ufg/check.js +33 -24
- package/dist/ufg/close.js +25 -18
- package/dist/ufg/core.js +9 -5
- package/dist/ufg/get-base-eyes.js +2 -0
- package/dist/ufg/get-results.js +27 -0
- package/dist/ufg/open-eyes.js +30 -25
- package/dist/ufg/utils/extract-broker-url.js +52 -0
- package/dist/ufg/utils/generate-safe-selectors.js +10 -5
- package/dist/ufg/utils/take-dom-snapshot.js +37 -36
- package/dist/ufg/utils/take-dom-snapshots.js +13 -17
- package/dist/ufg/utils/take-snapshots.js +3 -3
- package/dist/ufg/utils/take-vhses.js +60 -166
- package/dist/utils/format-results.js +37 -37
- package/package.json +19 -36
- package/types/automation/extract-text.d.ts +16 -0
- package/types/automation/get-viewport-size.d.ts +7 -7
- package/types/automation/locate-text.d.ts +15 -0
- package/types/automation/locate.d.ts +8 -8
- package/types/automation/set-viewport-size.d.ts +7 -7
- package/types/automation/types.d.ts +38 -42
- package/types/automation/utils/take-screenshot.d.ts +9 -9
- package/types/automation/utils/to-base-check-settings.d.ts +17 -0
- package/types/{utils → automation/utils}/wait-for-lazy-load.d.ts +3 -3
- package/types/check-and-close.d.ts +11 -13
- package/types/check.d.ts +12 -12
- package/types/classic/abort.d.ts +10 -10
- package/types/classic/check-and-close.d.ts +15 -11
- package/types/classic/check.d.ts +11 -11
- package/types/classic/close.d.ts +10 -10
- package/types/classic/core.d.ts +4 -4
- package/types/classic/get-base-eyes.d.ts +4 -4
- package/types/classic/open-eyes.d.ts +9 -9
- package/types/classic/types.d.ts +7 -7
- package/types/classic/utils/take-dom-capture.d.ts +4 -4
- package/types/close-batch.d.ts +1 -1
- package/types/close.d.ts +9 -8
- package/types/core.d.ts +4 -4
- package/types/delete-test.d.ts +1 -1
- package/types/errors/abort-error.d.ts +3 -2
- package/types/extract-text.d.ts +11 -9
- package/types/get-eyes-results.d.ts +12 -0
- package/types/get-manager-results.d.ts +14 -0
- package/types/get-typed-eyes.d.ts +9 -8
- package/types/index.d.ts +3 -3
- package/types/locate-text.d.ts +11 -9
- package/types/locate.d.ts +9 -9
- package/types/make-ec-client.d.ts +3 -3
- package/types/make-manager.d.ts +12 -12
- package/types/open-eyes.d.ts +13 -13
- package/types/troubleshoot/check-network.d.ts +3 -3
- package/types/troubleshoot/utils.d.ts +0 -2
- package/types/types.d.ts +65 -85
- package/types/ufg/abort.d.ts +14 -18
- package/types/ufg/check-and-close.d.ts +25 -13
- package/types/ufg/check.d.ts +11 -11
- package/types/ufg/close.d.ts +14 -18
- package/types/ufg/core.d.ts +4 -4
- package/types/ufg/get-base-eyes.d.ts +6 -6
- package/types/ufg/get-results.d.ts +16 -0
- package/types/ufg/open-eyes.d.ts +9 -9
- package/types/ufg/types.d.ts +15 -17
- package/types/ufg/utils/extract-broker-url.d.ts +6 -0
- package/types/ufg/utils/generate-safe-selectors.d.ts +14 -10
- package/types/ufg/utils/take-dom-snapshot.d.ts +34 -9
- package/types/ufg/utils/take-dom-snapshots.d.ts +3 -3
- package/types/ufg/utils/take-snapshots.d.ts +4 -4
- package/types/ufg/utils/take-vhses.d.ts +4 -4
- package/types/utils/format-results.d.ts +1 -1
- package/dist/utils/extract-broker-url.js +0 -24
- package/types/classic/extract-text.d.ts +0 -16
- package/types/classic/locate-text.d.ts +0 -15
- package/types/close-manager.d.ts +0 -18
- package/types/utils/extract-broker-url.d.ts +0 -2
- package/types/utils/to-base-check-settings.d.ts +0 -18
|
@@ -29,46 +29,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
30
|
exports.checkNetwork = void 0;
|
|
31
31
|
const chalk_1 = __importDefault(require("chalk"));
|
|
32
|
-
const utils_1 = require("./utils");
|
|
33
32
|
const eyes_1 = __importDefault(require("./eyes"));
|
|
34
33
|
const ufg_1 = __importDefault(require("./ufg"));
|
|
35
34
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
35
|
const TIMEOUT = 15000;
|
|
37
36
|
const config = utils.config.getConfig({ params: ['apiKey', 'serverUrl', 'proxy'] });
|
|
38
37
|
async function checkNetwork({ stream = process.stdout, eyes = eyes_1.default, ufg = ufg_1.default } = {}) {
|
|
39
|
-
const hasClearLine = stream.clearLine && stream.cursorTo;
|
|
40
|
-
async function doTest(func, name) {
|
|
41
|
-
const delimiterLength = 30 - name.length;
|
|
42
|
-
const delimiter = new Array(delimiterLength).join(' ');
|
|
43
|
-
hasClearLine && printSuccess(name, delimiter, '[ ? ]');
|
|
44
|
-
const start = Date.now();
|
|
45
|
-
const funcWithTimeout = (0, utils_1.ptimeoutWithError)(func(), TIMEOUT, new Error('request timeout!'));
|
|
46
|
-
const [err] = await (0, utils_1.presult)(funcWithTimeout);
|
|
47
|
-
const end = (Date.now() - start) / 1000;
|
|
48
|
-
clearLine();
|
|
49
|
-
if (err) {
|
|
50
|
-
printErr(name, delimiter, `[ X ] +${end}`, err.message, err.message[err.message.length - 1] !== '\n' ? '\n' : '');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
printSuccess(name, delimiter, `[ OK ] +${end}`, '\n');
|
|
54
|
-
}
|
|
55
|
-
return !!err;
|
|
56
|
-
}
|
|
57
|
-
function print(...msg) {
|
|
58
|
-
stream.write((0, chalk_1.default)(...msg));
|
|
59
|
-
}
|
|
60
|
-
function printErr(...msg) {
|
|
61
|
-
stream.write(chalk_1.default.red(...msg));
|
|
62
|
-
}
|
|
63
|
-
function printSuccess(...msg) {
|
|
64
|
-
stream.write(chalk_1.default.green(...msg));
|
|
65
|
-
}
|
|
66
|
-
function clearLine() {
|
|
67
|
-
if (hasClearLine) {
|
|
68
|
-
stream.clearLine(0);
|
|
69
|
-
stream.cursorTo(0);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
38
|
+
const hasClearLine = !!stream.clearLine && !!stream.cursorTo;
|
|
72
39
|
if (!config.apiKey) {
|
|
73
40
|
printErr('Missing "apiKey". Add APPLITOOLS_API_KEY as an env variable or add "apiKey" in applitools.config.js\n');
|
|
74
41
|
return;
|
|
@@ -102,6 +69,46 @@ async function checkNetwork({ stream = process.stdout, eyes = eyes_1.default, uf
|
|
|
102
69
|
else if (curlVgErr) {
|
|
103
70
|
printErr(proxyMsg, '\n', await ufg.getCmd());
|
|
104
71
|
}
|
|
72
|
+
async function doTest(func, name) {
|
|
73
|
+
const delimiterLength = 30 - name.length;
|
|
74
|
+
const delimiter = new Array(delimiterLength).join(' ');
|
|
75
|
+
hasClearLine && printSuccess(name, delimiter, '[ ? ]');
|
|
76
|
+
const start = Date.now();
|
|
77
|
+
const [err] = await ptimeoutWithError(func(), TIMEOUT, new Error('request timeout!'));
|
|
78
|
+
const end = (Date.now() - start) / 1000;
|
|
79
|
+
clearLine();
|
|
80
|
+
if (err) {
|
|
81
|
+
printErr(name, delimiter, `[ X ] +${end}`, err.message, err.message[err.message.length - 1] !== '\n' ? '\n' : '');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
printSuccess(name, delimiter, `[ OK ] +${end}`, '\n');
|
|
85
|
+
}
|
|
86
|
+
return !!err;
|
|
87
|
+
}
|
|
88
|
+
function print(...msg) {
|
|
89
|
+
stream.write((0, chalk_1.default)(...msg));
|
|
90
|
+
}
|
|
91
|
+
function printErr(...msg) {
|
|
92
|
+
stream.write(chalk_1.default.red(...msg));
|
|
93
|
+
}
|
|
94
|
+
function printSuccess(...msg) {
|
|
95
|
+
stream.write(chalk_1.default.green(...msg));
|
|
96
|
+
}
|
|
97
|
+
function clearLine() {
|
|
98
|
+
if (hasClearLine) {
|
|
99
|
+
stream.clearLine(0);
|
|
100
|
+
stream.cursorTo(0);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function ptimeoutWithError(promise, timeout, err) {
|
|
104
|
+
let timer;
|
|
105
|
+
return Promise.race([
|
|
106
|
+
promise.then(v => (timer && clearTimeout(timer), [undefined, v]), err => (timer && clearTimeout(timer), [err])),
|
|
107
|
+
new Promise(res => {
|
|
108
|
+
timer = setTimeout(() => res([err]), timeout);
|
|
109
|
+
}),
|
|
110
|
+
]);
|
|
111
|
+
}
|
|
105
112
|
}
|
|
106
113
|
exports.checkNetwork = checkNetwork;
|
|
107
114
|
checkNetwork();
|
|
@@ -34,12 +34,12 @@ const utils = __importStar(require("@applitools/utils"));
|
|
|
34
34
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
35
35
|
exports.RENDER_INFO_URL = `${utils_1.config.serverUrl}/api/sessions/renderinfo?apiKey=${utils_1.config.apiKey}`;
|
|
36
36
|
exports.CURL_CMD = `curl ${exports.RENDER_INFO_URL} ${(0, utils_1.getProxyCurlArg)()}`;
|
|
37
|
-
const validateRawAccountInfo = res => {
|
|
37
|
+
const validateRawAccountInfo = (res) => {
|
|
38
38
|
if (!res || !res.accessToken || !res.resultsUrl) {
|
|
39
39
|
throw new Error(`bad render info result ${JSON.stringify(res)}`);
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
-
const validateAccountInfo = res => {
|
|
42
|
+
const validateAccountInfo = (res) => {
|
|
43
43
|
if (!res || !res.ufg || !res.ufg.accessToken || !res.uploadUrl) {
|
|
44
44
|
throw new Error(`bad render info result ${JSON.stringify(res)}`);
|
|
45
45
|
}
|
package/dist/troubleshoot/ufg.js
CHANGED
|
@@ -29,9 +29,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.getCmd = void 0;
|
|
30
30
|
const https_1 = require("https");
|
|
31
31
|
const crypto_1 = require("crypto");
|
|
32
|
-
const
|
|
32
|
+
const logger_1 = require("@applitools/logger");
|
|
33
33
|
const ufg_client_1 = require("@applitools/ufg-client");
|
|
34
34
|
const utils_1 = require("./utils");
|
|
35
|
+
const eyes_1 = require("./eyes");
|
|
35
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
37
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
37
38
|
const value = Buffer.from(JSON.stringify({ resources: {}, domNodes: [] }));
|
|
@@ -91,7 +92,7 @@ exports.default = {
|
|
|
91
92
|
const url = new URL(UFG_PUT_RESOURCE_URL);
|
|
92
93
|
const requests = (0, ufg_client_1.makeUFGRequests)({
|
|
93
94
|
config: { serverUrl: url.origin, accessToken: await accessTokenPromise, uploadUrl: '', stitchingServiceUrl: '' },
|
|
94
|
-
logger:
|
|
95
|
+
logger: (0, logger_1.makeLogger)(),
|
|
95
96
|
});
|
|
96
97
|
await requests.uploadResource({ resource });
|
|
97
98
|
},
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.getProxyCurlArg = exports.config = void 0;
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
28
|
exports.config = {
|
|
29
29
|
serverUrl: 'https://eyesapi.applitools.com',
|
|
@@ -42,27 +42,3 @@ function getProxyCurlArg() {
|
|
|
42
42
|
return proxyUrl ? `-x ${proxyUrl.href}` : '';
|
|
43
43
|
}
|
|
44
44
|
exports.getProxyCurlArg = getProxyCurlArg;
|
|
45
|
-
function presult(promise) {
|
|
46
|
-
return promise.then(v => [undefined, v], err => [err]);
|
|
47
|
-
}
|
|
48
|
-
exports.presult = presult;
|
|
49
|
-
async function ptimeoutWithError(promiseOrPromiseFunc, timeout, err) {
|
|
50
|
-
let promiseResolved = false;
|
|
51
|
-
const hasAborted = () => promiseResolved;
|
|
52
|
-
const promise = promiseOrPromiseFunc.then ? promiseOrPromiseFunc : promiseOrPromiseFunc(hasAborted);
|
|
53
|
-
let cancel;
|
|
54
|
-
const v = await Promise.race([
|
|
55
|
-
promise.then(v => ((promiseResolved = true), cancel && clearTimeout(cancel), v), err => ((promiseResolved = true), cancel && clearTimeout(cancel), Promise.reject(err))),
|
|
56
|
-
new Promise(res => (cancel = setTimeout(() => {
|
|
57
|
-
if (promiseResolved)
|
|
58
|
-
res(undefined);
|
|
59
|
-
else {
|
|
60
|
-
cancel = undefined;
|
|
61
|
-
promiseResolved = true;
|
|
62
|
-
res(Promise.reject(err));
|
|
63
|
-
}
|
|
64
|
-
}, timeout))),
|
|
65
|
-
]);
|
|
66
|
-
return v;
|
|
67
|
-
}
|
|
68
|
-
exports.ptimeoutWithError = ptimeoutWithError;
|
package/dist/types.js
CHANGED
|
@@ -14,5 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("@applitools/core-base/types"), exports);
|
|
18
17
|
__exportStar(require("./automation/types"), exports);
|
package/dist/ufg/abort.js
CHANGED
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeAbort = void 0;
|
|
4
|
-
const abort_error_1 = require("../errors/abort-error");
|
|
5
4
|
const driver_1 = require("@applitools/driver");
|
|
6
5
|
function makeAbort({ storage, target, spec, controller, logger: defaultLogger, }) {
|
|
7
|
-
return async function ({ settings, logger = defaultLogger, } = {}) {
|
|
6
|
+
return async function abort({ settings, logger = defaultLogger, } = {}) {
|
|
7
|
+
logger.log('Command "abort" is called with settings', settings);
|
|
8
8
|
controller.abort();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return tests.set(key, promise);
|
|
12
|
-
}, new Map());
|
|
13
|
-
return Promise.all(Array.from(tests.values(), async (promise) => {
|
|
14
|
-
let eyes, renderer;
|
|
9
|
+
settings !== null && settings !== void 0 ? settings : (settings = {});
|
|
10
|
+
if (!settings.testMetadata) {
|
|
15
11
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
renderer = value.renderer;
|
|
12
|
+
const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
|
|
13
|
+
settings.testMetadata = await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata());
|
|
19
14
|
}
|
|
20
15
|
catch (error) {
|
|
21
|
-
|
|
22
|
-
renderer = error.info.renderer;
|
|
23
|
-
if (!eyes) {
|
|
24
|
-
if (error instanceof abort_error_1.AbortError)
|
|
25
|
-
return error.info;
|
|
26
|
-
else
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
16
|
+
logger.warn('Command "abort" received an error during extracting driver metadata', error);
|
|
29
17
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
}
|
|
19
|
+
storage.forEach(async (promises) => {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
try {
|
|
22
|
+
const { eyes } = await Promise.race(promises);
|
|
23
|
+
await eyes.abort({ settings, logger });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger.warn('Command "abort" received an error during waiting for eyes instances in background', error);
|
|
27
|
+
await ((_b = (_a = error === null || error === void 0 ? void 0 : error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ settings, logger }));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
35
30
|
};
|
|
36
31
|
}
|
|
37
32
|
exports.makeAbort = makeAbort;
|
|
@@ -29,22 +29,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.makeCheckAndClose = void 0;
|
|
30
30
|
const driver_1 = require("@applitools/driver");
|
|
31
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");
|
|
32
|
+
const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
|
|
33
|
+
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
34
34
|
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
35
|
const uniquify_renderers_1 = require("./utils/uniquify-renderers");
|
|
36
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
37
37
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
39
|
function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget, logger: defaultLogger, }) {
|
|
40
|
-
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger,
|
|
40
|
+
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
|
|
41
41
|
var _a, _b, _c;
|
|
42
42
|
logger.log('Command "checkAndClose" is called with settings', settings);
|
|
43
|
-
if (signal.aborted) {
|
|
43
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
44
44
|
logger.warn('Command "checkAndClose" was called after test was already aborted');
|
|
45
45
|
throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
|
|
46
46
|
}
|
|
47
|
-
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
47
|
+
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
48
|
+
settings,
|
|
49
|
+
});
|
|
50
|
+
let snapshots;
|
|
48
51
|
let snapshotUrl;
|
|
49
52
|
let snapshotTitle;
|
|
50
53
|
let userAgent;
|
|
@@ -67,13 +70,16 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
67
70
|
userAgent = driver.userAgent;
|
|
68
71
|
const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
69
72
|
context: driver.currentContext,
|
|
70
|
-
elementReferences: [
|
|
73
|
+
elementReferences: [
|
|
74
|
+
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
75
|
+
...elementReferencesToCalculate,
|
|
76
|
+
],
|
|
71
77
|
});
|
|
72
78
|
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
73
79
|
if (elementReferenceToTarget) {
|
|
74
|
-
|
|
75
|
-
if (!regionToTarget)
|
|
80
|
+
if (!((_b = generated.selectors[0]) === null || _b === void 0 ? void 0 : _b.safeSelector))
|
|
76
81
|
throw new Error('Target element not found');
|
|
82
|
+
regionToTarget = generated.selectors[0].safeSelector;
|
|
77
83
|
selectorsToCalculate = generated.selectors.slice(1);
|
|
78
84
|
}
|
|
79
85
|
else {
|
|
@@ -81,42 +87,40 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
89
|
const currentContext = driver.currentContext;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
},
|
|
90
|
+
snapshots = await (0, take_snapshots_1.takeSnapshots)({
|
|
91
|
+
driver,
|
|
92
|
+
settings: {
|
|
93
|
+
...eyes.test.server,
|
|
94
|
+
waitBeforeCapture: settings.waitBeforeCapture,
|
|
95
|
+
disableBrowserFetching: settings.disableBrowserFetching,
|
|
96
|
+
layoutBreakpoints: settings.layoutBreakpoints,
|
|
97
|
+
renderers: uniqueRenderers,
|
|
98
|
+
skipResources: client.getCachedResourceUrls(),
|
|
99
|
+
},
|
|
100
|
+
hooks: {
|
|
101
|
+
async beforeSnapshots() {
|
|
102
|
+
if (settings.lazyLoad && driver.isWeb) {
|
|
103
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
104
|
+
context: driver.currentContext,
|
|
105
|
+
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
106
|
+
logger,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
105
109
|
},
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
110
|
+
},
|
|
111
|
+
provides: {
|
|
112
|
+
getChromeEmulationDevices: client.getChromeEmulationDevices,
|
|
113
|
+
getIOSDevices: client.getIOSDevices,
|
|
114
|
+
},
|
|
115
|
+
logger,
|
|
116
|
+
});
|
|
113
117
|
await currentContext.focus();
|
|
114
118
|
snapshotUrl = await driver.getUrl();
|
|
115
119
|
snapshotTitle = await driver.getTitle();
|
|
116
120
|
await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
|
|
117
121
|
}
|
|
118
122
|
else {
|
|
119
|
-
snapshots = !utils.types.isArray(target) ? Array(
|
|
123
|
+
snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
|
|
120
124
|
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
121
125
|
}
|
|
122
126
|
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_c = elementReferenceToTarget) !== null && _c !== void 0 ? _c : settings.region);
|
|
@@ -124,13 +128,13 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
124
128
|
originalSelector: selector,
|
|
125
129
|
safeSelector: selector,
|
|
126
130
|
})));
|
|
127
|
-
const promises =
|
|
131
|
+
const promises = uniqueRenderers.map(async (renderer, index) => {
|
|
128
132
|
if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
|
|
129
133
|
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.`);
|
|
130
134
|
logger.console.log(message);
|
|
131
135
|
}
|
|
132
136
|
try {
|
|
133
|
-
if (signal.aborted) {
|
|
137
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
134
138
|
logger.warn('Command "check" was aborted before rendering');
|
|
135
139
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
136
140
|
}
|
|
@@ -149,20 +153,20 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
149
153
|
});
|
|
150
154
|
const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
|
|
151
155
|
try {
|
|
152
|
-
if (signal.aborted) {
|
|
156
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
153
157
|
logger.warn('Command "check" was aborted before rendering');
|
|
154
158
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
155
159
|
}
|
|
156
|
-
else if (baseEyes.
|
|
160
|
+
else if (!baseEyes.running) {
|
|
157
161
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
158
162
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
159
163
|
}
|
|
160
164
|
const renderTarget = await renderTargetPromise;
|
|
161
|
-
if (signal.aborted) {
|
|
165
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
162
166
|
logger.warn('Command "check" was aborted before rendering');
|
|
163
167
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
164
168
|
}
|
|
165
|
-
else if (baseEyes.
|
|
169
|
+
else if (!baseEyes.running) {
|
|
166
170
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
167
171
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
168
172
|
}
|
|
@@ -170,30 +174,30 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
170
174
|
target: renderTarget,
|
|
171
175
|
settings: {
|
|
172
176
|
...settings,
|
|
173
|
-
rendererId: baseEyes.test.rendererId,
|
|
174
177
|
region: regionToTarget,
|
|
175
|
-
type: utils.types.has(snapshot, 'cdt') ? 'web' : 'native',
|
|
176
|
-
renderer,
|
|
177
178
|
selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
178
179
|
includeFullPageSize: Boolean(settings.pageId),
|
|
180
|
+
type: snapshotType,
|
|
181
|
+
renderer,
|
|
182
|
+
rendererId: baseEyes.test.rendererId,
|
|
179
183
|
},
|
|
180
184
|
signal,
|
|
181
185
|
});
|
|
182
186
|
let offset = 0;
|
|
183
187
|
const baseSettings = getBaseCheckSettings({
|
|
184
188
|
calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
|
|
185
|
-
selector: originalSelector,
|
|
189
|
+
selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
|
|
186
190
|
regions: safeSelector ? selectorRegions[offset++] : [],
|
|
187
191
|
})),
|
|
188
192
|
});
|
|
189
193
|
baseSettings.renderId = renderId;
|
|
190
194
|
baseTarget.source = snapshotUrl;
|
|
191
195
|
baseTarget.name = snapshotTitle;
|
|
192
|
-
if (signal.aborted) {
|
|
196
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
193
197
|
logger.warn('Command "check" was aborted after rendering');
|
|
194
198
|
throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
|
|
195
199
|
}
|
|
196
|
-
else if (baseEyes.
|
|
200
|
+
else if (!baseEyes.running) {
|
|
197
201
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
198
202
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
199
203
|
}
|
|
@@ -202,11 +206,7 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
202
206
|
settings: baseSettings,
|
|
203
207
|
logger,
|
|
204
208
|
});
|
|
205
|
-
|
|
206
|
-
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
207
|
-
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
208
|
-
}
|
|
209
|
-
return { ...result, eyes, renderer };
|
|
209
|
+
return { ...result, eyes: baseEyes, renderer };
|
|
210
210
|
}
|
|
211
211
|
catch (error) {
|
|
212
212
|
await baseEyes.abort();
|
|
@@ -223,7 +223,7 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
|
|
|
223
223
|
var _a, _b;
|
|
224
224
|
try {
|
|
225
225
|
const result = await promise;
|
|
226
|
-
return { ...result, userTestId: eyes.test.userTestId
|
|
226
|
+
return { ...result, userTestId: eyes.test.userTestId };
|
|
227
227
|
}
|
|
228
228
|
catch (error) {
|
|
229
229
|
await ((_b = (_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ logger }));
|
package/dist/ufg/check.js
CHANGED
|
@@ -29,8 +29,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.makeCheck = void 0;
|
|
30
30
|
const driver_1 = require("@applitools/driver");
|
|
31
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");
|
|
32
|
+
const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
|
|
33
|
+
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
34
34
|
const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
|
|
35
35
|
const uniquify_renderers_1 = require("./utils/uniquify-renderers");
|
|
36
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
@@ -38,13 +38,15 @@ const utils = __importStar(require("@applitools/utils"));
|
|
|
38
38
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
39
|
function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
|
|
40
40
|
return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
|
|
41
|
-
var _a, _b, _c, _d;
|
|
41
|
+
var _a, _b, _c, _d, _e;
|
|
42
42
|
logger.log('Command "check" is called with settings', settings);
|
|
43
|
-
if (signal.aborted) {
|
|
43
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
44
44
|
logger.warn('Command "check" was called after test was already aborted');
|
|
45
45
|
throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
|
|
46
46
|
}
|
|
47
|
-
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
47
|
+
const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
|
|
48
|
+
settings,
|
|
49
|
+
});
|
|
48
50
|
let snapshots;
|
|
49
51
|
let snapshotUrl;
|
|
50
52
|
let snapshotTitle;
|
|
@@ -52,8 +54,8 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
52
54
|
let regionToTarget;
|
|
53
55
|
let selectorsToCalculate;
|
|
54
56
|
const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
const driver = spec && (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
|
|
58
|
+
if (driver) {
|
|
57
59
|
await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
58
60
|
if (uniqueRenderers.length === 0) {
|
|
59
61
|
if (driver.isWeb) {
|
|
@@ -69,13 +71,16 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
69
71
|
userAgent = driver.userAgent;
|
|
70
72
|
const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
71
73
|
context: driver.currentContext,
|
|
72
|
-
elementReferences: [
|
|
74
|
+
elementReferences: [
|
|
75
|
+
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
76
|
+
...elementReferencesToCalculate,
|
|
77
|
+
],
|
|
73
78
|
});
|
|
74
79
|
cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
|
|
75
80
|
if (elementReferenceToTarget) {
|
|
76
|
-
|
|
77
|
-
if (!regionToTarget)
|
|
81
|
+
if (!((_c = generated.selectors[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
|
|
78
82
|
throw new Error('Target element not found');
|
|
83
|
+
regionToTarget = (_d = generated.selectors[0]) === null || _d === void 0 ? void 0 : _d.safeSelector;
|
|
79
84
|
selectorsToCalculate = generated.selectors.slice(1);
|
|
80
85
|
}
|
|
81
86
|
else {
|
|
@@ -119,7 +124,7 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
119
124
|
snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
|
|
120
125
|
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
121
126
|
}
|
|
122
|
-
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (
|
|
127
|
+
regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_e = elementReferenceToTarget) !== null && _e !== void 0 ? _e : settings.region);
|
|
123
128
|
selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
|
|
124
129
|
originalSelector: selector,
|
|
125
130
|
safeSelector: selector,
|
|
@@ -130,7 +135,7 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
130
135
|
logger.console.log(message);
|
|
131
136
|
}
|
|
132
137
|
try {
|
|
133
|
-
if (signal.aborted) {
|
|
138
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
134
139
|
logger.warn('Command "check" was aborted before rendering');
|
|
135
140
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
136
141
|
}
|
|
@@ -149,20 +154,20 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
149
154
|
});
|
|
150
155
|
const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
|
|
151
156
|
try {
|
|
152
|
-
if (signal.aborted) {
|
|
157
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
153
158
|
logger.warn('Command "check" was aborted before rendering');
|
|
154
159
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
155
160
|
}
|
|
156
|
-
else if (baseEyes.
|
|
161
|
+
else if (!baseEyes.running) {
|
|
157
162
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
158
163
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
159
164
|
}
|
|
160
165
|
const renderTarget = await renderTargetPromise;
|
|
161
|
-
if (signal.aborted) {
|
|
166
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
162
167
|
logger.warn('Command "check" was aborted before rendering');
|
|
163
168
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
164
169
|
}
|
|
165
|
-
else if (baseEyes.
|
|
170
|
+
else if (!baseEyes.running) {
|
|
166
171
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
167
172
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
168
173
|
}
|
|
@@ -182,32 +187,36 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
|
|
|
182
187
|
let offset = 0;
|
|
183
188
|
const baseSettings = getBaseCheckSettings({
|
|
184
189
|
calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
|
|
185
|
-
selector: originalSelector,
|
|
190
|
+
selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
|
|
186
191
|
regions: safeSelector ? selectorRegions[offset++] : [],
|
|
187
192
|
})),
|
|
188
193
|
});
|
|
189
194
|
baseSettings.renderId = renderId;
|
|
190
195
|
baseTarget.source = snapshotUrl;
|
|
191
196
|
baseTarget.name = snapshotTitle;
|
|
192
|
-
if (signal.aborted) {
|
|
197
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
193
198
|
logger.warn('Command "check" was aborted after rendering');
|
|
194
199
|
throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
|
|
195
200
|
}
|
|
196
|
-
else if (baseEyes.
|
|
201
|
+
else if (!baseEyes.running) {
|
|
197
202
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
198
203
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
199
204
|
}
|
|
200
|
-
const [result] = await baseEyes.check({
|
|
201
|
-
|
|
205
|
+
const [result] = await baseEyes.check({
|
|
206
|
+
target: { ...baseTarget, isTransformed: true },
|
|
207
|
+
settings: baseSettings,
|
|
208
|
+
logger,
|
|
209
|
+
});
|
|
210
|
+
if (!baseEyes.running) {
|
|
202
211
|
logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
|
|
203
212
|
throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
|
|
204
213
|
}
|
|
205
214
|
return { ...result, eyes: baseEyes, renderer };
|
|
206
215
|
}
|
|
207
216
|
catch (error) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
217
|
+
if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted)) {
|
|
218
|
+
await baseEyes.abort({ settings: { testMetadata: await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata()) } });
|
|
219
|
+
}
|
|
211
220
|
error.info = { eyes: baseEyes };
|
|
212
221
|
throw error;
|
|
213
222
|
}
|