@applitools/core 1.0.0
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/LICENSE +26 -0
- package/dist/automation/get-viewport-size.js +12 -0
- package/dist/automation/locate.js +22 -0
- package/dist/automation/set-viewport-size.js +12 -0
- package/dist/automation/utils/take-screenshot.js +55 -0
- package/dist/check-and-close.js +11 -0
- package/dist/check.js +55 -0
- package/dist/classic/check-and-close.js +67 -0
- package/dist/classic/check.js +78 -0
- package/dist/classic/core.js +50 -0
- package/dist/classic/extract-text.js +71 -0
- package/dist/classic/locate-text.js +53 -0
- package/dist/classic/open-eyes.js +78 -0
- package/dist/classic/utils/take-dom-capture.js +135 -0
- package/dist/classic/utils/transform-check-settings.js +68 -0
- package/dist/close-manager.js +62 -0
- package/dist/close.js +20 -0
- package/dist/core.js +51 -0
- package/dist/errors/test-error.js +29 -0
- package/dist/extract-text.js +37 -0
- package/dist/index.js +32 -0
- package/dist/locate-text.js +11 -0
- package/dist/locate.js +11 -0
- package/dist/make-manager.js +65 -0
- package/dist/open-eyes.js +84 -0
- package/dist/troubleshoot/check-network.js +106 -0
- package/dist/troubleshoot/eyes.js +85 -0
- package/dist/troubleshoot/ufg.js +130 -0
- package/dist/troubleshoot/utils.js +68 -0
- package/dist/ufg/abort.js +18 -0
- package/dist/ufg/check-and-close.js +7 -0
- package/dist/ufg/check.js +192 -0
- package/dist/ufg/close.js +31 -0
- package/dist/ufg/core.js +78 -0
- package/dist/ufg/open-eyes.js +123 -0
- package/dist/ufg/utils/generate-safe-selectors.js +60 -0
- package/dist/ufg/utils/take-dom-snapshot.js +132 -0
- package/dist/ufg/utils/take-dom-snapshots.js +141 -0
- package/dist/ufg/utils/take-snapshots.js +38 -0
- package/dist/ufg/utils/take-vhses.js +258 -0
- package/dist/utils/execute-poll-script.js +75 -0
- package/dist/utils/extract-broker-url.js +19 -0
- package/dist/utils/format-results.js +185 -0
- package/dist/utils/to-base-check-settings.js +69 -0
- package/dist/utils/wait-for-lazy-load.js +25 -0
- package/package.json +105 -0
- package/types/automation/get-viewport-size.d.ts +11 -0
- package/types/automation/locate.d.ts +16 -0
- package/types/automation/set-viewport-size.d.ts +12 -0
- package/types/automation/utils/take-screenshot.d.ts +15 -0
- package/types/check-and-close.d.ts +15 -0
- package/types/check.d.ts +15 -0
- package/types/classic/check-and-close.d.ts +16 -0
- package/types/classic/check.d.ts +16 -0
- package/types/classic/core.d.ts +13 -0
- package/types/classic/extract-text.d.ts +16 -0
- package/types/classic/locate-text.d.ts +16 -0
- package/types/classic/open-eyes.d.ts +15 -0
- package/types/classic/utils/take-dom-capture.d.ts +13 -0
- package/types/classic/utils/transform-check-settings.d.ts +11 -0
- package/types/close-manager.d.ts +18 -0
- package/types/close.d.ts +14 -0
- package/types/core.d.ts +14 -0
- package/types/errors/test-error.d.ts +5 -0
- package/types/extract-text.d.ts +15 -0
- package/types/index.d.ts +3 -0
- package/types/locate-text.d.ts +15 -0
- package/types/locate.d.ts +15 -0
- package/types/make-manager.d.ts +19 -0
- package/types/open-eyes.d.ts +19 -0
- package/types/troubleshoot/check-network.d.ts +20 -0
- package/types/troubleshoot/eyes.d.ts +11 -0
- package/types/troubleshoot/ufg.d.ts +10 -0
- package/types/troubleshoot/utils.d.ts +4 -0
- package/types/ufg/abort.d.ts +17 -0
- package/types/ufg/check-and-close.d.ts +17 -0
- package/types/ufg/check.d.ts +27 -0
- package/types/ufg/close.d.ts +16 -0
- package/types/ufg/core.d.ts +16 -0
- package/types/ufg/open-eyes.d.ts +18 -0
- package/types/ufg/utils/generate-safe-selectors.d.ts +12 -0
- package/types/ufg/utils/take-dom-snapshot.d.ts +23 -0
- package/types/ufg/utils/take-dom-snapshots.d.ts +24 -0
- package/types/ufg/utils/take-snapshots.d.ts +21 -0
- package/types/ufg/utils/take-vhses.d.ts +17 -0
- package/types/utils/execute-poll-script.d.ts +20 -0
- package/types/utils/extract-broker-url.d.ts +2 -0
- package/types/utils/format-results.d.ts +16 -0
- package/types/utils/to-base-check-settings.d.ts +17 -0
- package/types/utils/wait-for-lazy-load.d.ts +13 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.takeDomCapture = void 0;
|
|
7
|
+
const dom_capture_1 = require("@applitools/dom-capture");
|
|
8
|
+
const execute_poll_script_1 = require("../../utils/execute-poll-script");
|
|
9
|
+
const req_1 = __importDefault(require("@applitools/req"));
|
|
10
|
+
async function takeDomCapture({ driver, settings, logger, }) {
|
|
11
|
+
var _a;
|
|
12
|
+
const isLegacyBrowser = driver.isIE || driver.isEdgeLegacy;
|
|
13
|
+
const arg = {
|
|
14
|
+
chunkByteLength: (_a = settings === null || settings === void 0 ? void 0 : settings.chunkByteLength) !== null && _a !== void 0 ? _a : (Number(process.env.APPLITOOLS_SCRIPT_RESULT_MAX_BYTE_LENGTH) || (driver.isIOS ? 100000 : 250 * 1024 * 1024)),
|
|
15
|
+
};
|
|
16
|
+
const scripts = {
|
|
17
|
+
main: {
|
|
18
|
+
script: `return (${isLegacyBrowser ? await (0, dom_capture_1.getCaptureDomPollForIE)() : await (0, dom_capture_1.getCaptureDomPoll)()}).apply(null, arguments);`,
|
|
19
|
+
args: [arg],
|
|
20
|
+
},
|
|
21
|
+
poll: {
|
|
22
|
+
script: `return (${isLegacyBrowser ? await (0, dom_capture_1.getPollResultForIE)() : await (0, dom_capture_1.getPollResult)()}).apply(null, arguments);`,
|
|
23
|
+
args: [arg],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const url = await driver.getUrl();
|
|
27
|
+
const dom = await captureContextDom(driver.mainContext);
|
|
28
|
+
// TODO save debug DOM like we have for debug screenshots
|
|
29
|
+
return dom;
|
|
30
|
+
async function captureContextDom(context) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
const capture = await (0, execute_poll_script_1.executePollScript)({
|
|
33
|
+
context,
|
|
34
|
+
scripts,
|
|
35
|
+
settings: { executionTimeout: (_a = settings === null || settings === void 0 ? void 0 : settings.executionTimeout) !== null && _a !== void 0 ? _a : 5 * 60 * 1000, pollTimeout: (_b = settings === null || settings === void 0 ? void 0 : settings.pollTimeout) !== null && _b !== void 0 ? _b : 200 },
|
|
36
|
+
logger,
|
|
37
|
+
});
|
|
38
|
+
if (!capture)
|
|
39
|
+
return {};
|
|
40
|
+
const raws = capture.split('\n');
|
|
41
|
+
const tokens = JSON.parse(raws[0]);
|
|
42
|
+
const cssEndIndex = raws.indexOf(tokens.separator);
|
|
43
|
+
const frameEndIndex = raws.indexOf(tokens.separator, cssEndIndex + 1);
|
|
44
|
+
let dom = raws[frameEndIndex + 1];
|
|
45
|
+
const cssResources = await Promise.all(raws.slice(1, cssEndIndex).reduce((cssResources, href) => {
|
|
46
|
+
return href ? cssResources.concat(fetchCss(new URL(href, url).href)) : cssResources;
|
|
47
|
+
}, []));
|
|
48
|
+
for (const { href, css } of cssResources) {
|
|
49
|
+
dom = dom.replace(`${tokens.cssStartToken}${href}${tokens.cssEndToken}`, css);
|
|
50
|
+
}
|
|
51
|
+
const framePaths = raws.slice(cssEndIndex + 1, frameEndIndex);
|
|
52
|
+
for (const xpaths of framePaths) {
|
|
53
|
+
if (!xpaths)
|
|
54
|
+
continue;
|
|
55
|
+
const references = xpaths.split(',').reduce((parent, selector) => {
|
|
56
|
+
return { reference: { type: 'xpath', selector }, parent };
|
|
57
|
+
}, null);
|
|
58
|
+
let contextDom;
|
|
59
|
+
try {
|
|
60
|
+
const frame = await context.context(references);
|
|
61
|
+
contextDom = await captureContextDom(frame);
|
|
62
|
+
}
|
|
63
|
+
catch (ignored) {
|
|
64
|
+
logger.log('Switching to frame failed');
|
|
65
|
+
contextDom = {};
|
|
66
|
+
}
|
|
67
|
+
dom = dom.replace(`${tokens.iframeStartToken}${xpaths}${tokens.iframeEndToken}`, contextDom);
|
|
68
|
+
}
|
|
69
|
+
return dom;
|
|
70
|
+
}
|
|
71
|
+
async function fetchCss(href) {
|
|
72
|
+
try {
|
|
73
|
+
logger.log(`Given URL to download: ${href}`);
|
|
74
|
+
const response = await (0, req_1.default)(href, {
|
|
75
|
+
retry: {
|
|
76
|
+
limit: 1,
|
|
77
|
+
validate: ({ response, error }) => Boolean(error) || response.status >= 400,
|
|
78
|
+
},
|
|
79
|
+
fetch: settings.fetch,
|
|
80
|
+
});
|
|
81
|
+
if (response.status < 400) {
|
|
82
|
+
const css = await response.text();
|
|
83
|
+
logger.log(`downloading CSS in length of ${css.length} chars took`);
|
|
84
|
+
return { href, css: cleanStringForJSON(css) };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
return { href, css: '' };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function cleanStringForJSON(str) {
|
|
92
|
+
if (str == null || str.length === 0) {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
let sb = '';
|
|
96
|
+
let char = '\0';
|
|
97
|
+
let tmp;
|
|
98
|
+
for (let i = 0, l = str.length; i < l; i += 1) {
|
|
99
|
+
char = str[i];
|
|
100
|
+
switch (char) {
|
|
101
|
+
case '\\':
|
|
102
|
+
case '"':
|
|
103
|
+
case '/':
|
|
104
|
+
sb += '\\' + char; // eslint-disable-line
|
|
105
|
+
break;
|
|
106
|
+
case '\b':
|
|
107
|
+
sb += '\\b';
|
|
108
|
+
break;
|
|
109
|
+
case '\t':
|
|
110
|
+
sb += '\\t';
|
|
111
|
+
break;
|
|
112
|
+
case '\n':
|
|
113
|
+
sb += '\\n';
|
|
114
|
+
break;
|
|
115
|
+
case '\f':
|
|
116
|
+
sb += '\\f';
|
|
117
|
+
break;
|
|
118
|
+
case '\r':
|
|
119
|
+
sb += '\\r';
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
if (char < ' ') {
|
|
123
|
+
tmp = '000' + char.charCodeAt(0).toString(16); // eslint-disable-line
|
|
124
|
+
sb += '\\u' + tmp.substring(tmp.length - 4); // eslint-disable-line
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
sb += char;
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return sb;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.takeDomCapture = takeDomCapture;
|
|
@@ -0,0 +1,68 @@
|
|
|
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.transformCheckSettings = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
async function transformCheckSettings({ driver, settings, screenshot, logger: _logger, }) {
|
|
29
|
+
return {
|
|
30
|
+
...settings,
|
|
31
|
+
region: undefined,
|
|
32
|
+
normalization: undefined,
|
|
33
|
+
ignoreRegions: await transformRegions({ regions: settings.ignoreRegions }),
|
|
34
|
+
layoutRegions: await transformRegions({ regions: settings.layoutRegions }),
|
|
35
|
+
contentRegions: await transformRegions({ regions: settings.contentRegions }),
|
|
36
|
+
strictRegions: await transformRegions({ regions: settings.strictRegions }),
|
|
37
|
+
floatingRegions: await transformRegions({ regions: settings.floatingRegions }),
|
|
38
|
+
accessibilityRegions: await transformRegions({ regions: settings.accessibilityRegions }),
|
|
39
|
+
};
|
|
40
|
+
async function transformRegions({ regions = [], }) {
|
|
41
|
+
var _a;
|
|
42
|
+
const transformedRegions = [];
|
|
43
|
+
for (const region of regions) {
|
|
44
|
+
const { region: reference, ...options } = utils.types.has(region, 'region') ? region : { region };
|
|
45
|
+
if (utils.types.has(reference, ['x', 'y', 'width', 'height'])) {
|
|
46
|
+
transformedRegions.push(region);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const elements = await driver.currentContext.elements(reference);
|
|
50
|
+
if (elements.length === 0)
|
|
51
|
+
continue;
|
|
52
|
+
const contextLocationInViewport = await elements[0].context.getLocationInViewport();
|
|
53
|
+
for (const element of elements) {
|
|
54
|
+
const elementRegionInViewport = utils.geometry.offset(await element.getRegion(), contextLocationInViewport);
|
|
55
|
+
const elementRegionInTarget = utils.geometry.offsetNegative(elementRegionInViewport, utils.geometry.location(screenshot.region));
|
|
56
|
+
const elementRegionIScaled = utils.geometry.scale(elementRegionInTarget, driver.viewportScale);
|
|
57
|
+
transformedRegions.push({
|
|
58
|
+
region: elementRegionIScaled,
|
|
59
|
+
regionId: utils.types.isString(element.commonSelector) ? element.commonSelector : (_a = element.commonSelector) === null || _a === void 0 ? void 0 : _a.selector,
|
|
60
|
+
...options,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return transformedRegions;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.transformCheckSettings = transformCheckSettings;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeCloseManager = void 0;
|
|
4
|
+
const test_error_1 = require("./errors/test-error");
|
|
5
|
+
function makeCloseManager({ core, storage, logger: defaultLogger, }) {
|
|
6
|
+
return async function closeManager({ settings, logger = defaultLogger, } = {}) {
|
|
7
|
+
const containers = await Promise.all(storage.map(async ({ eyes, promise }) => {
|
|
8
|
+
try {
|
|
9
|
+
const results = await (promise !== null && promise !== void 0 ? promise : eyes.abort({ logger }));
|
|
10
|
+
return results.map(result => {
|
|
11
|
+
return {
|
|
12
|
+
result,
|
|
13
|
+
error: result.status !== 'Passed' ? new test_error_1.TestError(result) : undefined,
|
|
14
|
+
userTestId: result.userTestId,
|
|
15
|
+
renderer: result.renderer,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return [{ error, userTestId: error.userTestId, renderer: error.renderer }];
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
const batches = storage.reduce((batches, { eyes }) => {
|
|
24
|
+
if (!eyes.test.keepBatchOpen) {
|
|
25
|
+
const settings = { ...eyes.test.server, batchId: eyes.test.batchId };
|
|
26
|
+
batches[`${settings.serverUrl}:${settings.apiKey}:${settings.batchId}`] = settings;
|
|
27
|
+
}
|
|
28
|
+
return batches;
|
|
29
|
+
}, {});
|
|
30
|
+
await core.closeBatch({ settings: Object.values(batches), logger }).catch(() => null);
|
|
31
|
+
const summary = {
|
|
32
|
+
results: containers.flat(),
|
|
33
|
+
passed: 0,
|
|
34
|
+
unresolved: 0,
|
|
35
|
+
failed: 0,
|
|
36
|
+
exceptions: 0,
|
|
37
|
+
mismatches: 0,
|
|
38
|
+
missing: 0,
|
|
39
|
+
matches: 0,
|
|
40
|
+
};
|
|
41
|
+
for (const container of summary.results) {
|
|
42
|
+
if (container.error) {
|
|
43
|
+
if (settings === null || settings === void 0 ? void 0 : settings.throwErr)
|
|
44
|
+
throw container.error;
|
|
45
|
+
summary.exceptions += 1;
|
|
46
|
+
}
|
|
47
|
+
if (container.result) {
|
|
48
|
+
if (container.result.status === 'Failed')
|
|
49
|
+
summary.failed += 1;
|
|
50
|
+
else if (container.result.status === 'Passed')
|
|
51
|
+
summary.passed += 1;
|
|
52
|
+
else if (container.result.status === 'Unresolved')
|
|
53
|
+
summary.unresolved += 1;
|
|
54
|
+
summary.matches += container.result.matches;
|
|
55
|
+
summary.missing += container.result.missing;
|
|
56
|
+
summary.mismatches += container.result.mismatches;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return summary;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
exports.makeCloseManager = makeCloseManager;
|
package/dist/close.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeClose = void 0;
|
|
4
|
+
const test_error_1 = require("./errors/test-error");
|
|
5
|
+
function makeClose({ eyes, logger: defaultLogger, }) {
|
|
6
|
+
return async function close({ settings, config, logger = defaultLogger, } = {}) {
|
|
7
|
+
var _a;
|
|
8
|
+
settings = { ...config === null || config === void 0 ? void 0 : config.close, ...settings };
|
|
9
|
+
(_a = settings.updateBaselineIfNew) !== null && _a !== void 0 ? _a : (settings.updateBaselineIfNew = true);
|
|
10
|
+
const results = await eyes.close({ settings, logger });
|
|
11
|
+
if (settings.throwErr) {
|
|
12
|
+
results.forEach(result => {
|
|
13
|
+
if (result.status !== 'Passed')
|
|
14
|
+
throw new test_error_1.TestError(result);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return results;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
exports.makeClose = makeClose;
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
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.makeCore = void 0;
|
|
27
|
+
const logger_1 = require("@applitools/logger");
|
|
28
|
+
const core_base_1 = require("@applitools/core-base");
|
|
29
|
+
const get_viewport_size_1 = require("./automation/get-viewport-size");
|
|
30
|
+
const set_viewport_size_1 = require("./automation/set-viewport-size");
|
|
31
|
+
const locate_1 = require("./automation/locate");
|
|
32
|
+
const open_eyes_1 = require("./open-eyes");
|
|
33
|
+
const make_manager_1 = require("./make-manager");
|
|
34
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
35
|
+
function makeCore({ spec, concurrency, core, agentId = 'core', cwd = process.cwd(), logger, }) {
|
|
36
|
+
var _a;
|
|
37
|
+
logger = (_a = logger === null || logger === void 0 ? void 0 : logger.extend({ label: 'core' })) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ label: 'core' });
|
|
38
|
+
logger.log(`Core is initialized ${core ? 'with' : 'without'} custom base core`);
|
|
39
|
+
core !== null && core !== void 0 ? core : (core = (0, core_base_1.makeCore)({ agentId, cwd, logger }));
|
|
40
|
+
return utils.general.extend(core, {
|
|
41
|
+
isDriver: spec.isDriver,
|
|
42
|
+
isElement: spec.isElement,
|
|
43
|
+
isSelector: spec.isSelector,
|
|
44
|
+
getViewportSize: (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
|
|
45
|
+
setViewportSize: (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
|
|
46
|
+
locate: (0, locate_1.makeLocate)({ spec, core, logger }),
|
|
47
|
+
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, concurrency, logger }),
|
|
48
|
+
makeManager: (0, make_manager_1.makeMakeManager)({ spec, concurrency, agentId, logger }),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.makeCore = makeCore;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestError = void 0;
|
|
4
|
+
const core_base_1 = require("@applitools/core-base");
|
|
5
|
+
class TestError extends core_base_1.CoreError {
|
|
6
|
+
constructor(result) {
|
|
7
|
+
if (result.status === 'Failed') {
|
|
8
|
+
super(`Test '${result.name}' of '${result.appName}' is failed! See details at ${result.url}`, {
|
|
9
|
+
reason: 'test failed',
|
|
10
|
+
result,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
else if (result.status === 'Unresolved') {
|
|
14
|
+
if (result.isNew) {
|
|
15
|
+
super(`Test '${result.name}' of '${result.appName}' is new! Please approve the new baseline at ${result.url}`, {
|
|
16
|
+
reason: 'test new',
|
|
17
|
+
result,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
super(`Test '${result.name}' of '${result.appName}' detected differences! See details at: ${result.url}`, {
|
|
22
|
+
reason: 'test different',
|
|
23
|
+
result,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.TestError = TestError;
|
|
@@ -0,0 +1,37 @@
|
|
|
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.makeExtractText = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
function makeExtractText({ eyes, logger: defaultLogger, }) {
|
|
29
|
+
return async function extractText({ target, settings, config, logger = defaultLogger, }) {
|
|
30
|
+
settings = utils.types.isArray(settings)
|
|
31
|
+
? settings.map(settings => ({ ...config === null || config === void 0 ? void 0 : config.screenshot, ...settings }))
|
|
32
|
+
: { ...config === null || config === void 0 ? void 0 : config.screenshot, ...settings };
|
|
33
|
+
const results = await eyes.extractText({ target: target, settings, logger });
|
|
34
|
+
return results;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.makeExtractText = makeExtractText;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.formatters = void 0;
|
|
30
|
+
__exportStar(require("./core"), exports);
|
|
31
|
+
exports.formatters = __importStar(require("./utils/format-results"));
|
|
32
|
+
__exportStar(require("@applitools/driver/dist/debug"), exports);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeLocateText = void 0;
|
|
4
|
+
function makeLocateText({ eyes, logger: defaultLogger, }) {
|
|
5
|
+
return async function locateText({ target, settings, config, logger = defaultLogger, }) {
|
|
6
|
+
settings = { ...config === null || config === void 0 ? void 0 : config.screenshot, ...settings };
|
|
7
|
+
const results = await eyes.locateText({ target: target, settings, logger });
|
|
8
|
+
return results;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
exports.makeLocateText = makeLocateText;
|
package/dist/locate.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeLocate = void 0;
|
|
4
|
+
function makeLocate({ core, logger: defaultLogger, }) {
|
|
5
|
+
return async function locate({ target, settings, config, logger = defaultLogger, }) {
|
|
6
|
+
settings = { ...config === null || config === void 0 ? void 0 : config.open, ...config === null || config === void 0 ? void 0 : config.screenshot, ...settings };
|
|
7
|
+
const results = await core.locate({ target: target, settings, logger });
|
|
8
|
+
return results;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
exports.makeLocate = makeLocate;
|
|
@@ -0,0 +1,65 @@
|
|
|
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.makeMakeManager = void 0;
|
|
27
|
+
const core_base_1 = require("@applitools/core-base");
|
|
28
|
+
const core_1 = require("./classic/core");
|
|
29
|
+
const core_2 = require("./ufg/core");
|
|
30
|
+
const open_eyes_1 = require("./open-eyes");
|
|
31
|
+
const close_manager_1 = require("./close-manager");
|
|
32
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
33
|
+
function makeMakeManager({ spec, core, concurrency: defaultConcurrency, agentId: defaultAgentId, cwd = process.cwd(), logger: defaultLogger, }) {
|
|
34
|
+
return async function makeManager({ type, concurrency = defaultConcurrency, legacyConcurrency, agentId = type === 'ufg' ? defaultAgentId === null || defaultAgentId === void 0 ? void 0 : defaultAgentId.replace(/(\/\d)/, '.visualgrid$1') : defaultAgentId, logger = defaultLogger, } = {}) {
|
|
35
|
+
core !== null && core !== void 0 ? core : (core = (0, core_base_1.makeCore)({ agentId, cwd, logger }));
|
|
36
|
+
concurrency !== null && concurrency !== void 0 ? concurrency : (concurrency = utils.types.isInteger(legacyConcurrency) ? legacyConcurrency * 5 : 5);
|
|
37
|
+
const typedCore = type === 'ufg' ? (0, core_2.makeCore)({ spec, core, concurrency, logger }) : (0, core_1.makeCore)({ spec, core, logger });
|
|
38
|
+
const storage = [];
|
|
39
|
+
// open eyes with result storage
|
|
40
|
+
const openEyes = utils.general.wrap((0, open_eyes_1.makeOpenEyes)({ spec, core: typedCore, logger }), async (openEyes, options) => {
|
|
41
|
+
const eyes = await openEyes(options);
|
|
42
|
+
const item = { eyes };
|
|
43
|
+
storage.push(item);
|
|
44
|
+
return utils.general.extend(eyes, {
|
|
45
|
+
close(options) {
|
|
46
|
+
var _a;
|
|
47
|
+
const promise = eyes.close(options);
|
|
48
|
+
(_a = item.promise) !== null && _a !== void 0 ? _a : (item.promise = promise);
|
|
49
|
+
return promise;
|
|
50
|
+
},
|
|
51
|
+
abort(options) {
|
|
52
|
+
var _a;
|
|
53
|
+
const promise = eyes.abort(options);
|
|
54
|
+
(_a = item.promise) !== null && _a !== void 0 ? _a : (item.promise = promise);
|
|
55
|
+
return promise;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
openEyes,
|
|
61
|
+
closeManager: (0, close_manager_1.makeCloseManager)({ core: typedCore, storage, logger }),
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
exports.makeMakeManager = makeMakeManager;
|
|
@@ -0,0 +1,84 @@
|
|
|
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.makeOpenEyes = void 0;
|
|
27
|
+
const core_1 = require("./classic/core");
|
|
28
|
+
const core_2 = require("./ufg/core");
|
|
29
|
+
const check_1 = require("./check");
|
|
30
|
+
const check_and_close_1 = require("./check-and-close");
|
|
31
|
+
const locate_text_1 = require("./locate-text");
|
|
32
|
+
const extract_text_1 = require("./extract-text");
|
|
33
|
+
const close_1 = require("./close");
|
|
34
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
35
|
+
function makeOpenEyes({ spec, core, concurrency, logger: defaultLogger, }) {
|
|
36
|
+
return async function openEyes({ type, target, settings, config, logger = defaultLogger, }) {
|
|
37
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
38
|
+
var _u, _v, _w, _x, _y;
|
|
39
|
+
settings = { ...config === null || config === void 0 ? void 0 : config.open, ...settings };
|
|
40
|
+
settings.userTestId = `${settings.testName}--${utils.general.guid()}`;
|
|
41
|
+
(_a = settings.serverUrl) !== null && _a !== void 0 ? _a : (settings.serverUrl = (_b = utils.general.getEnvValue('SERVER_URL')) !== null && _b !== void 0 ? _b : 'https://eyesapi.applitools.com');
|
|
42
|
+
(_c = settings.apiKey) !== null && _c !== void 0 ? _c : (settings.apiKey = utils.general.getEnvValue('API_KEY'));
|
|
43
|
+
(_d = settings.batch) !== null && _d !== void 0 ? _d : (settings.batch = {});
|
|
44
|
+
(_e = (_u = settings.batch).id) !== null && _e !== void 0 ? _e : (_u.id = (_f = utils.general.getEnvValue('BATCH_ID')) !== null && _f !== void 0 ? _f : utils.general.guid());
|
|
45
|
+
(_g = (_v = settings.batch).name) !== null && _g !== void 0 ? _g : (_v.name = utils.general.getEnvValue('BATCH_NAME'));
|
|
46
|
+
(_h = (_w = settings.batch).sequenceName) !== null && _h !== void 0 ? _h : (_w.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
|
|
47
|
+
(_j = (_x = settings.batch).notifyOnCompletion) !== null && _j !== void 0 ? _j : (_x.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
|
|
48
|
+
(_k = settings.keepBatchOpen) !== null && _k !== void 0 ? _k : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean'));
|
|
49
|
+
(_l = settings.branchName) !== null && _l !== void 0 ? _l : (settings.branchName = utils.general.getEnvValue('BRANCH'));
|
|
50
|
+
(_m = settings.parentBranchName) !== null && _m !== void 0 ? _m : (settings.parentBranchName = utils.general.getEnvValue('PARENT_BRANCH'));
|
|
51
|
+
(_o = settings.baselineBranchName) !== null && _o !== void 0 ? _o : (settings.baselineBranchName = utils.general.getEnvValue('BASELINE_BRANCH'));
|
|
52
|
+
(_p = settings.ignoreBaseline) !== null && _p !== void 0 ? _p : (settings.ignoreBaseline = false);
|
|
53
|
+
(_q = settings.compareWithParentBranch) !== null && _q !== void 0 ? _q : (settings.compareWithParentBranch = false);
|
|
54
|
+
(_r = (_y = settings).renderConcurrency) !== null && _r !== void 0 ? _r : (_y.renderConcurrency = (_t = (_s = config === null || config === void 0 ? void 0 : config.check) === null || _s === void 0 ? void 0 : _s.renderers) === null || _t === void 0 ? void 0 : _t.length);
|
|
55
|
+
if (!utils.types.has(core, 'type')) {
|
|
56
|
+
core = type === 'ufg' ? (0, core_2.makeCore)({ spec, core, concurrency, logger }) : (0, core_1.makeCore)({ spec, core, logger });
|
|
57
|
+
}
|
|
58
|
+
core.logEvent({
|
|
59
|
+
settings: {
|
|
60
|
+
serverUrl: settings.serverUrl,
|
|
61
|
+
apiKey: settings.apiKey,
|
|
62
|
+
proxy: settings.proxy,
|
|
63
|
+
agentId: settings.agentId,
|
|
64
|
+
level: 'Notice',
|
|
65
|
+
event: {
|
|
66
|
+
type: 'runnerStarted',
|
|
67
|
+
testConcurrency: concurrency,
|
|
68
|
+
concurrentRendersPerTest: settings.renderConcurrency,
|
|
69
|
+
node: { version: process.version, platform: process.platform, arch: process.arch },
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
logger,
|
|
73
|
+
});
|
|
74
|
+
const eyes = await core.openEyes({ target, settings: settings, logger });
|
|
75
|
+
return utils.general.extend(eyes, {
|
|
76
|
+
check: (0, check_1.makeCheck)({ eyes, logger }),
|
|
77
|
+
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, logger }),
|
|
78
|
+
locateText: (0, locate_text_1.makeLocateText)({ eyes, logger }),
|
|
79
|
+
extractText: (0, extract_text_1.makeExtractText)({ eyes, logger }),
|
|
80
|
+
close: (0, close_1.makeClose)({ eyes, logger }),
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
exports.makeOpenEyes = makeOpenEyes;
|