@applitools/core 4.2.0 → 4.4.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/CHANGELOG.md +95 -0
- package/dist/automation/utils/to-base-check-settings.js +5 -4
- package/dist/automation/utils/wait-for-lazy-load.js +6 -6
- package/dist/classic/check-and-close.js +2 -2
- package/dist/classic/check.js +2 -2
- package/dist/classic/open-eyes.js +1 -1
- package/dist/core.js +2 -0
- package/dist/ufg/check-and-close.js +23 -40
- package/dist/ufg/check.js +23 -40
- package/dist/ufg/utils/take-dom-snapshots.js +79 -89
- package/dist/ufg/utils/to-generated-selectors.js +41 -0
- package/dist/utils/memory-usage-logging.js +46 -0
- package/package.json +21 -15
- package/types/automation/utils/to-base-check-settings.d.ts +5 -2
- package/types/automation/utils/wait-for-lazy-load.d.ts +1 -2
- package/types/ufg/check.d.ts +1 -1
- package/types/ufg/types.d.ts +11 -12
- package/types/ufg/utils/take-dom-snapshot.d.ts +1 -1
- package/types/ufg/utils/take-dom-snapshots.d.ts +8 -9
- package/types/ufg/utils/to-generated-selectors.d.ts +29 -0
- package/types/utils/memory-usage-logging.d.ts +7 -0
- package/dist/ufg/utils/calculate-regions.js +0 -31
- package/types/ufg/utils/calculate-regions.d.ts +0 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,100 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [4.4.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.3.0...js/core@4.4.0) (2023-12-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* sign windows binaries ([87fd29c](https://github.com/applitools/eyes.sdk.javascript1/commit/87fd29c8953fc512489c3bb00841ca91c5b2f030))
|
|
9
|
+
* support updated applitools lib protocol ([#2086](https://github.com/applitools/eyes.sdk.javascript1/issues/2086)) ([31b49fc](https://github.com/applitools/eyes.sdk.javascript1/commit/31b49fc411c452d0b3da341fd701309714484485))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* layout breakpoints reload and lazy load ([#2073](https://github.com/applitools/eyes.sdk.javascript1/issues/2073)) ([ab2c49e](https://github.com/applitools/eyes.sdk.javascript1/commit/ab2c49ea1ecff3fef337637a83aa5bef755a7b01))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Code Refactoring
|
|
18
|
+
|
|
19
|
+
* fix safe selector generation ([#2072](https://github.com/applitools/eyes.sdk.javascript1/issues/2072)) ([373f11b](https://github.com/applitools/eyes.sdk.javascript1/commit/373f11b0dfea6eab417eb7077e0cfec79877dc1b))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Dependencies
|
|
23
|
+
|
|
24
|
+
* @applitools/spec-driver-webdriver bumped to 1.0.52
|
|
25
|
+
|
|
26
|
+
* @applitools/spec-driver-selenium bumped to 1.5.66
|
|
27
|
+
|
|
28
|
+
* @applitools/spec-driver-puppeteer bumped to 1.3.2
|
|
29
|
+
|
|
30
|
+
* @applitools/driver bumped to 1.15.3
|
|
31
|
+
#### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* layout breakpoints reload and lazy load ([#2073](https://github.com/applitools/eyes.sdk.javascript1/issues/2073)) ([ab2c49e](https://github.com/applitools/eyes.sdk.javascript1/commit/ab2c49ea1ecff3fef337637a83aa5bef755a7b01))
|
|
34
|
+
* @applitools/screenshoter bumped to 3.8.18
|
|
35
|
+
|
|
36
|
+
* @applitools/nml-client bumped to 1.6.0
|
|
37
|
+
#### Features
|
|
38
|
+
|
|
39
|
+
* support updated applitools lib protocol ([#2086](https://github.com/applitools/eyes.sdk.javascript1/issues/2086)) ([31b49fc](https://github.com/applitools/eyes.sdk.javascript1/commit/31b49fc411c452d0b3da341fd701309714484485))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
* @applitools/tunnel-client bumped to 1.4.0
|
|
44
|
+
#### Features
|
|
45
|
+
|
|
46
|
+
* sign windows binaries ([87fd29c](https://github.com/applitools/eyes.sdk.javascript1/commit/87fd29c8953fc512489c3bb00841ca91c5b2f030))
|
|
47
|
+
* @applitools/ec-client bumped to 1.7.18
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## [4.3.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.2.0...js/core@4.3.0) (2023-12-05)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
* add Eyes.getResults method ([#2046](https://github.com/applitools/eyes.sdk.javascript1/issues/2046)) ([#2069](https://github.com/applitools/eyes.sdk.javascript1/issues/2069)) ([4d263e1](https://github.com/applitools/eyes.sdk.javascript1/commit/4d263e19cb5e5708790a1a7ef90ff8f3eee50d91))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
### Dependencies
|
|
59
|
+
|
|
60
|
+
* @applitools/utils bumped to 1.7.0
|
|
61
|
+
#### Features
|
|
62
|
+
|
|
63
|
+
* add Eyes.getResults method ([#2046](https://github.com/applitools/eyes.sdk.javascript1/issues/2046)) ([#2069](https://github.com/applitools/eyes.sdk.javascript1/issues/2069)) ([4d263e1](https://github.com/applitools/eyes.sdk.javascript1/commit/4d263e19cb5e5708790a1a7ef90ff8f3eee50d91))
|
|
64
|
+
* @applitools/logger bumped to 2.0.14
|
|
65
|
+
|
|
66
|
+
* @applitools/socket bumped to 1.1.14
|
|
67
|
+
|
|
68
|
+
* @applitools/req bumped to 1.6.4
|
|
69
|
+
|
|
70
|
+
* @applitools/image bumped to 1.1.9
|
|
71
|
+
|
|
72
|
+
* @applitools/spec-driver-webdriver bumped to 1.0.51
|
|
73
|
+
|
|
74
|
+
* @applitools/spec-driver-selenium bumped to 1.5.65
|
|
75
|
+
|
|
76
|
+
* @applitools/spec-driver-puppeteer bumped to 1.3.1
|
|
77
|
+
|
|
78
|
+
* @applitools/driver bumped to 1.15.2
|
|
79
|
+
|
|
80
|
+
* @applitools/screenshoter bumped to 3.8.17
|
|
81
|
+
|
|
82
|
+
* @applitools/nml-client bumped to 1.5.17
|
|
83
|
+
|
|
84
|
+
* @applitools/tunnel-client bumped to 1.3.2
|
|
85
|
+
|
|
86
|
+
* @applitools/ufg-client bumped to 1.9.9
|
|
87
|
+
|
|
88
|
+
* @applitools/ec-client bumped to 1.7.17
|
|
89
|
+
|
|
90
|
+
* @applitools/core-base bumped to 1.7.4
|
|
91
|
+
#### Bug Fixes
|
|
92
|
+
|
|
93
|
+
* do not block concurrency when server response is 503 ([#2049](https://github.com/applitools/eyes.sdk.javascript1/issues/2049)) ([f285009](https://github.com/applitools/eyes.sdk.javascript1/commit/f2850098f7522776c0d0a98bb1d958303628b149))
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
3
98
|
## [4.2.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@4.1.0...js/core@4.2.0) (2023-11-21)
|
|
4
99
|
|
|
5
100
|
|
|
@@ -27,22 +27,23 @@ exports.toBaseCheckSettings = void 0;
|
|
|
27
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
28
|
function toBaseCheckSettings({ settings }) {
|
|
29
29
|
const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
|
|
30
|
-
const
|
|
30
|
+
const calculate = regionTypes.flatMap(regionType => {
|
|
31
31
|
var _a;
|
|
32
32
|
return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
|
|
33
33
|
const { region } = utils.types.has(reference, 'region') ? reference : { region: reference };
|
|
34
34
|
return !isRegion(region) ? regions.concat(region) : regions;
|
|
35
35
|
}, []);
|
|
36
36
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
37
|
+
const target = !isRegion(settings.region) ? settings.region : undefined;
|
|
38
|
+
const scrolling = settings.scrollRootElement;
|
|
39
|
+
return { elementReferences: { target, scrolling, calculate }, getBaseCheckSettings };
|
|
39
40
|
function getBaseCheckSettings({ calculatedRegions, preserveTransformation, }) {
|
|
40
41
|
const transformedSettings = { ...settings };
|
|
41
42
|
if (!preserveTransformation) {
|
|
42
43
|
delete transformedSettings.region;
|
|
43
44
|
delete transformedSettings.normalization;
|
|
44
45
|
}
|
|
45
|
-
else if (
|
|
46
|
+
else if (target) {
|
|
46
47
|
delete transformedSettings.region;
|
|
47
48
|
}
|
|
48
49
|
regionTypes.forEach(regionType => {
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.waitForLazyLoad = void 0;
|
|
4
4
|
const { lazyLoad } = require('@applitools/snippets');
|
|
5
|
-
async function waitForLazyLoad({ context, settings, logger, }) {
|
|
6
|
-
var _a
|
|
7
|
-
logger.log('
|
|
8
|
-
const { scrollLength = 300, waitingTime = 2000, maxAmountToScroll = 15000
|
|
5
|
+
async function waitForLazyLoad({ context, settings = {}, logger, }) {
|
|
6
|
+
var _a;
|
|
7
|
+
logger.log('Running scrolling sequence to lazy load a view content');
|
|
8
|
+
const { scrollLength = 300, waitingTime = 2000, maxAmountToScroll = 15000 } = settings;
|
|
9
9
|
await context.executePoll(lazyLoad, {
|
|
10
10
|
main: [
|
|
11
11
|
await context.getScrollingElement(),
|
|
@@ -16,8 +16,8 @@ async function waitForLazyLoad({ context, settings, logger, }) {
|
|
|
16
16
|
},
|
|
17
17
|
],
|
|
18
18
|
poll: [],
|
|
19
|
-
executionTimeout:
|
|
20
|
-
pollTimeout: (
|
|
19
|
+
executionTimeout: 300000 /* 5min */,
|
|
20
|
+
pollTimeout: (_a = settings.pollTimeout) !== null && _a !== void 0 ? _a : waitingTime,
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
exports.waitForLazyLoad = waitForLazyLoad;
|
|
@@ -74,7 +74,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
74
74
|
logger,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
const {
|
|
77
|
+
const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
78
78
|
if (driverEnvironment.isWeb ||
|
|
79
79
|
!((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) ||
|
|
80
80
|
settings.screenshotMode === 'default') {
|
|
@@ -83,7 +83,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
83
83
|
settings: {
|
|
84
84
|
...settings,
|
|
85
85
|
environments: uniqueEnvironments,
|
|
86
|
-
regionsToCalculate:
|
|
86
|
+
regionsToCalculate: elementReferences.calculate,
|
|
87
87
|
calculateView: !!settings.pageId,
|
|
88
88
|
domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
|
|
89
89
|
},
|
package/dist/classic/check.js
CHANGED
|
@@ -74,7 +74,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
74
74
|
logger,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
const {
|
|
77
|
+
const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
78
78
|
if (driverEnvironment.isWeb ||
|
|
79
79
|
!((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) ||
|
|
80
80
|
settings.screenshotMode === 'default') {
|
|
@@ -83,7 +83,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
83
83
|
settings: {
|
|
84
84
|
...settings,
|
|
85
85
|
environments: uniqueEnvironments,
|
|
86
|
-
regionsToCalculate:
|
|
86
|
+
regionsToCalculate: elementReferences.calculate,
|
|
87
87
|
calculateView: !!settings.pageId,
|
|
88
88
|
domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
|
|
89
89
|
},
|
|
@@ -74,7 +74,7 @@ function makeOpenEyes({ core, spec, logger: mainLogger }) {
|
|
|
74
74
|
getBaseEyes: (0, get_base_eyes_1.makeGetBaseEyes)({ settings, eyes, logger }),
|
|
75
75
|
check: (0, check_1.makeCheck)({ eyes, target: driver, environments, spec, signal: controller.signal, logger }),
|
|
76
76
|
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, target: driver, environments, spec, signal: controller.signal, logger }),
|
|
77
|
-
close: (0, close_1.makeClose)({ eyes, target: driver, environments, logger }),
|
|
77
|
+
close: (0, close_1.makeClose)({ eyes, target: driver, environments, spec, logger }),
|
|
78
78
|
abort: (0, abort_1.makeAbort)({ eyes, target: driver, environments, spec, controller, logger }),
|
|
79
79
|
getResults: (0, get_results_1.makeGetResults)({ eyes, logger }),
|
|
80
80
|
};
|
package/dist/core.js
CHANGED
|
@@ -40,9 +40,11 @@ const close_batch_1 = require("./close-batch");
|
|
|
40
40
|
const delete_test_1 = require("./delete-test");
|
|
41
41
|
const extract_test_environment_1 = require("./utils/extract-test-environment");
|
|
42
42
|
const validate_sdk_version_1 = require("./utils/validate-sdk-version");
|
|
43
|
+
const memory_usage_logging_1 = require("./utils/memory-usage-logging");
|
|
43
44
|
const utils = __importStar(require("@applitools/utils"));
|
|
44
45
|
function makeCore({ spec, clients, concurrency, base: defaultBase, environment: defaultEnvironment, agentId = 'core', cwd = process.cwd(), logger: defaultLogger, asyncCache, } = {}) {
|
|
45
46
|
const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core' } });
|
|
47
|
+
(0, memory_usage_logging_1.startMemoryUsageLogging)({ logger });
|
|
46
48
|
const environment = (0, extract_test_environment_1.extractTestEnvironment)(defaultEnvironment);
|
|
47
49
|
logger.log(`Core is initialized ${defaultBase ? 'with' : 'without'} custom base core and environment`, environment);
|
|
48
50
|
if (environment.sdk)
|
|
@@ -30,6 +30,7 @@ exports.makeCheckAndClose = void 0;
|
|
|
30
30
|
const driver_1 = require("@applitools/driver");
|
|
31
31
|
const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
|
|
32
32
|
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
33
|
+
const to_generated_selectors_1 = require("./utils/to-generated-selectors");
|
|
33
34
|
const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
|
|
34
35
|
const to_environment_key_1 = require("../automation/utils/to-environment-key");
|
|
35
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
@@ -38,15 +39,17 @@ const lang = __importStar(require("../lang"));
|
|
|
38
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
40
|
function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
|
|
40
41
|
return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
|
-
var _a, _b
|
|
42
|
+
var _a, _b;
|
|
42
43
|
logger = logger.extend(mainLogger);
|
|
43
44
|
logger.log('Command "checkAndClose" is called with settings', settings);
|
|
44
45
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
45
46
|
logger.warn('Command "checkAndClose" was called after test was already aborted');
|
|
46
47
|
throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
|
|
47
48
|
}
|
|
48
|
-
const {
|
|
49
|
-
|
|
49
|
+
const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
50
|
+
const { elementReferencesToMark, getGeneratedSelectors } = (0, to_generated_selectors_1.toGeneratedSelectors)({
|
|
51
|
+
elementReferences,
|
|
52
|
+
transformElementReference: elementReference => { var _a; return ((0, driver_1.isSelector)(elementReference) && ((_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, elementReference))) || undefined; },
|
|
50
53
|
});
|
|
51
54
|
const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
|
|
52
55
|
const ufgClient = await eyes.core.getUFGClient({
|
|
@@ -57,7 +60,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
57
60
|
},
|
|
58
61
|
logger,
|
|
59
62
|
});
|
|
60
|
-
let
|
|
63
|
+
let snapshots;
|
|
61
64
|
let snapshotUrl;
|
|
62
65
|
let snapshotTitle;
|
|
63
66
|
let userAgent;
|
|
@@ -70,7 +73,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
70
73
|
await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
71
74
|
if (environment.isWeb) {
|
|
72
75
|
userAgent = await driver.getUserAgentLegacy();
|
|
73
|
-
|
|
76
|
+
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
74
77
|
driver,
|
|
75
78
|
settings: {
|
|
76
79
|
...eyes.test.eyesServer,
|
|
@@ -80,11 +83,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
80
83
|
environments: uniqueEnvironments,
|
|
81
84
|
skipResources: ufgClient.getCachedResourceUrls(),
|
|
82
85
|
lazyLoad: settings.lazyLoad,
|
|
83
|
-
|
|
84
|
-
elementReferencesToCalculate,
|
|
85
|
-
elementReferenceToTarget,
|
|
86
|
-
scrollRootElement: settings.scrollRootElement,
|
|
87
|
-
},
|
|
86
|
+
elementReferences: elementReferencesToMark,
|
|
88
87
|
},
|
|
89
88
|
provides: {
|
|
90
89
|
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
@@ -99,7 +98,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
99
98
|
settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
|
|
100
99
|
logger,
|
|
101
100
|
});
|
|
102
|
-
|
|
101
|
+
snapshots = (await nmlClient.takeSnapshots({
|
|
103
102
|
settings: {
|
|
104
103
|
...eyes.test.eyesServer,
|
|
105
104
|
waitBeforeCapture: settings.waitBeforeCapture,
|
|
@@ -107,27 +106,16 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
107
106
|
},
|
|
108
107
|
logger,
|
|
109
108
|
}));
|
|
110
|
-
snapshotResults = snapshots.map(snapshot => {
|
|
111
|
-
var _a, _b, _c, _d;
|
|
112
|
-
return ({
|
|
113
|
-
snapshot,
|
|
114
|
-
regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
115
|
-
? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
|
|
116
|
-
: undefined,
|
|
117
|
-
scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
118
|
-
? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
|
|
119
|
-
: undefined,
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
109
|
}
|
|
123
110
|
await currentContext.focus();
|
|
124
111
|
snapshotUrl = await driver.getUrl();
|
|
125
112
|
snapshotTitle = await driver.getTitle();
|
|
126
113
|
}
|
|
127
114
|
else {
|
|
128
|
-
|
|
129
|
-
snapshotUrl = utils.types.has(
|
|
115
|
+
snapshots = !utils.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
|
|
116
|
+
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
130
117
|
}
|
|
118
|
+
const generatedSelectors = snapshots.map(snapshot => getGeneratedSelectors(utils.types.has(snapshot, 'generatedSelectors') ? snapshot.generatedSelectors : undefined));
|
|
131
119
|
const promises = uniqueEnvironments.map(async (environment, index) => {
|
|
132
120
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
133
121
|
const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
|
|
@@ -140,13 +128,8 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
140
128
|
environmentLogger.warn('Command "check" was aborted before rendering');
|
|
141
129
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
142
130
|
}
|
|
143
|
-
const {
|
|
144
|
-
const
|
|
145
|
-
const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
|
|
146
|
-
const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
|
|
147
|
-
originalSelector: selector,
|
|
148
|
-
safeSelector: selector,
|
|
149
|
-
}));
|
|
131
|
+
const { cookies, ...snapshot } = snapshots[index];
|
|
132
|
+
const selectors = generatedSelectors[index];
|
|
150
133
|
if (utils.types.has(ufgEnvironment, 'iosDeviceInfo') || utils.types.has(ufgEnvironment, 'androidDeviceInfo')) {
|
|
151
134
|
ufgEnvironment.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
152
135
|
}
|
|
@@ -172,8 +155,8 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
172
155
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
173
156
|
}
|
|
174
157
|
else if (!baseEyes.running) {
|
|
175
|
-
environmentLogger.warn(`Render on environment with id "${(
|
|
176
|
-
throw new abort_error_1.AbortError(`Render on environment with id "${(
|
|
158
|
+
environmentLogger.warn(`Render on environment with id "${(_a = baseEyes.test.environment) === null || _a === void 0 ? void 0 : _a.environmentId}" was aborted during one of the previous steps`);
|
|
159
|
+
throw new abort_error_1.AbortError(`Render on environment with id "${(_b = baseEyes.test.environment) === null || _b === void 0 ? void 0 : _b.environmentId}" was aborted during one of the previous steps`);
|
|
177
160
|
}
|
|
178
161
|
const renderTarget = await renderTargetPromise;
|
|
179
162
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
@@ -181,16 +164,16 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
181
164
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
182
165
|
}
|
|
183
166
|
else if (!baseEyes.running) {
|
|
184
|
-
environmentLogger.warn(`Render on environment with id "${(
|
|
185
|
-
throw new abort_error_1.AbortError(`Render on environment with id "${(
|
|
167
|
+
environmentLogger.warn(`Render on environment with id "${(_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId}" was aborted during one of the previous steps`);
|
|
168
|
+
throw new abort_error_1.AbortError(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
|
|
186
169
|
}
|
|
187
170
|
const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
|
|
188
171
|
target: renderTarget,
|
|
189
172
|
settings: {
|
|
190
173
|
...settings,
|
|
191
|
-
region,
|
|
192
|
-
scrollRootElement:
|
|
193
|
-
selectorsToCalculate:
|
|
174
|
+
region: (_e = selectors.target) !== null && _e !== void 0 ? _e : settings.region,
|
|
175
|
+
scrollRootElement: selectors.scrolling,
|
|
176
|
+
selectorsToCalculate: selectors.calculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
194
177
|
includeFullPageSize: !!settings.pageId,
|
|
195
178
|
environment: ufgEnvironment,
|
|
196
179
|
environmentId: baseEyes.test.environment.environmentId,
|
|
@@ -202,7 +185,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
|
|
|
202
185
|
});
|
|
203
186
|
let offset = 0;
|
|
204
187
|
const baseSettings = getBaseCheckSettings({
|
|
205
|
-
calculatedRegions:
|
|
188
|
+
calculatedRegions: selectors.calculate.map(({ originalSelector, safeSelector }) => ({
|
|
206
189
|
selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
|
|
207
190
|
regions: safeSelector ? selectorRegions[offset++] : [],
|
|
208
191
|
})),
|
package/dist/ufg/check.js
CHANGED
|
@@ -30,6 +30,7 @@ exports.makeCheck = void 0;
|
|
|
30
30
|
const driver_1 = require("@applitools/driver");
|
|
31
31
|
const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
|
|
32
32
|
const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
|
|
33
|
+
const to_generated_selectors_1 = require("./utils/to-generated-selectors");
|
|
33
34
|
const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
|
|
34
35
|
const to_environment_key_1 = require("../automation/utils/to-environment-key");
|
|
35
36
|
const abort_error_1 = require("../errors/abort-error");
|
|
@@ -38,15 +39,17 @@ const lang = __importStar(require("../lang"));
|
|
|
38
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
39
40
|
function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
|
|
40
41
|
return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
|
|
41
|
-
var _a, _b
|
|
42
|
+
var _a, _b;
|
|
42
43
|
logger = logger.extend(mainLogger);
|
|
43
44
|
logger.log('Command "check" is called with settings', settings);
|
|
44
45
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
45
46
|
logger.warn('Command "check" was called after test was already aborted');
|
|
46
47
|
throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
|
|
47
48
|
}
|
|
48
|
-
const {
|
|
49
|
-
|
|
49
|
+
const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
|
|
50
|
+
const { elementReferencesToMark, getGeneratedSelectors } = (0, to_generated_selectors_1.toGeneratedSelectors)({
|
|
51
|
+
elementReferences,
|
|
52
|
+
transformElementReference: elementReference => { var _a; return ((0, driver_1.isSelector)(elementReference) && ((_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, elementReference))) || undefined; },
|
|
50
53
|
});
|
|
51
54
|
const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
|
|
52
55
|
const ufgClient = await eyes.core.getUFGClient({
|
|
@@ -57,7 +60,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
57
60
|
},
|
|
58
61
|
logger,
|
|
59
62
|
});
|
|
60
|
-
let
|
|
63
|
+
let snapshots;
|
|
61
64
|
let snapshotUrl;
|
|
62
65
|
let snapshotTitle;
|
|
63
66
|
let userAgent;
|
|
@@ -70,7 +73,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
70
73
|
await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
|
|
71
74
|
if (environment.isWeb) {
|
|
72
75
|
userAgent = await driver.getUserAgentLegacy();
|
|
73
|
-
|
|
76
|
+
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
|
|
74
77
|
driver,
|
|
75
78
|
settings: {
|
|
76
79
|
...eyes.test.eyesServer,
|
|
@@ -80,11 +83,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
80
83
|
environments: uniqueEnvironments,
|
|
81
84
|
skipResources: ufgClient.getCachedResourceUrls(),
|
|
82
85
|
lazyLoad: settings.lazyLoad,
|
|
83
|
-
|
|
84
|
-
elementReferencesToCalculate,
|
|
85
|
-
elementReferenceToTarget,
|
|
86
|
-
scrollRootElement: settings.scrollRootElement,
|
|
87
|
-
},
|
|
86
|
+
elementReferences: elementReferencesToMark,
|
|
88
87
|
},
|
|
89
88
|
provides: {
|
|
90
89
|
getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
|
|
@@ -99,7 +98,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
99
98
|
settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
|
|
100
99
|
logger,
|
|
101
100
|
});
|
|
102
|
-
|
|
101
|
+
snapshots = (await nmlClient.takeSnapshots({
|
|
103
102
|
settings: {
|
|
104
103
|
...eyes.test.eyesServer,
|
|
105
104
|
waitBeforeCapture: settings.waitBeforeCapture,
|
|
@@ -107,27 +106,16 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
107
106
|
},
|
|
108
107
|
logger,
|
|
109
108
|
}));
|
|
110
|
-
snapshotResults = snapshots.map(snapshot => {
|
|
111
|
-
var _a, _b, _c, _d;
|
|
112
|
-
return ({
|
|
113
|
-
snapshot,
|
|
114
|
-
regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
|
|
115
|
-
? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
|
|
116
|
-
: undefined,
|
|
117
|
-
scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
|
|
118
|
-
? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
|
|
119
|
-
: undefined,
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
109
|
}
|
|
123
110
|
await currentContext.focus();
|
|
124
111
|
snapshotUrl = await driver.getUrl();
|
|
125
112
|
snapshotTitle = await driver.getTitle();
|
|
126
113
|
}
|
|
127
114
|
else {
|
|
128
|
-
|
|
129
|
-
snapshotUrl = utils.types.has(
|
|
115
|
+
snapshots = !utils.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
|
|
116
|
+
snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
|
|
130
117
|
}
|
|
118
|
+
const generatedSelectors = snapshots.map(snapshot => getGeneratedSelectors(utils.types.has(snapshot, 'generatedSelectors') ? snapshot.generatedSelectors : undefined));
|
|
131
119
|
const promises = uniqueEnvironments.map(async (environment, index) => {
|
|
132
120
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
133
121
|
const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
|
|
@@ -140,13 +128,8 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
140
128
|
environmentLogger.warn('Command "check" was aborted before rendering');
|
|
141
129
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
142
130
|
}
|
|
143
|
-
const {
|
|
144
|
-
const
|
|
145
|
-
const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
|
|
146
|
-
const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
|
|
147
|
-
originalSelector: selector,
|
|
148
|
-
safeSelector: selector,
|
|
149
|
-
}));
|
|
131
|
+
const { cookies, ...snapshot } = snapshots[index];
|
|
132
|
+
const selectors = generatedSelectors[index];
|
|
150
133
|
if (utils.types.has(ufgEnvironment, 'iosDeviceInfo') || utils.types.has(ufgEnvironment, 'androidDeviceInfo')) {
|
|
151
134
|
ufgEnvironment.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
|
|
152
135
|
}
|
|
@@ -172,8 +155,8 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
172
155
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
173
156
|
}
|
|
174
157
|
else if (!baseEyes.running) {
|
|
175
|
-
environmentLogger.warn(`Render on environment with id "${(
|
|
176
|
-
throw new abort_error_1.AbortError(`Render on environment with id "${(
|
|
158
|
+
environmentLogger.warn(`Render on environment with id "${(_a = baseEyes.test.environment) === null || _a === void 0 ? void 0 : _a.environmentId}" was aborted during one of the previous steps`);
|
|
159
|
+
throw new abort_error_1.AbortError(`Render on environment with id "${(_b = baseEyes.test.environment) === null || _b === void 0 ? void 0 : _b.environmentId}" was aborted during one of the previous steps`);
|
|
177
160
|
}
|
|
178
161
|
const renderTarget = await renderTargetPromise;
|
|
179
162
|
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
@@ -181,16 +164,16 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
181
164
|
throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
|
|
182
165
|
}
|
|
183
166
|
else if (!baseEyes.running) {
|
|
184
|
-
environmentLogger.warn(`Render on environment with id "${(
|
|
185
|
-
throw new abort_error_1.AbortError(`Render on environment with id "${(
|
|
167
|
+
environmentLogger.warn(`Render on environment with id "${(_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId}" was aborted during one of the previous steps`);
|
|
168
|
+
throw new abort_error_1.AbortError(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
|
|
186
169
|
}
|
|
187
170
|
const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
|
|
188
171
|
target: renderTarget,
|
|
189
172
|
settings: {
|
|
190
173
|
...settings,
|
|
191
|
-
region,
|
|
192
|
-
scrollRootElement:
|
|
193
|
-
selectorsToCalculate:
|
|
174
|
+
region: (_e = selectors.target) !== null && _e !== void 0 ? _e : settings.region,
|
|
175
|
+
scrollRootElement: selectors.scrolling,
|
|
176
|
+
selectorsToCalculate: selectors.calculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
|
|
194
177
|
includeFullPageSize: Boolean(settings.pageId),
|
|
195
178
|
environment: ufgEnvironment,
|
|
196
179
|
environmentId: baseEyes.test.environment.environmentId,
|
|
@@ -202,7 +185,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
|
|
|
202
185
|
});
|
|
203
186
|
let offset = 0;
|
|
204
187
|
const baseSettings = getBaseCheckSettings({
|
|
205
|
-
calculatedRegions:
|
|
188
|
+
calculatedRegions: selectors.calculate.map(({ originalSelector, safeSelector }) => ({
|
|
206
189
|
selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
|
|
207
190
|
regions: safeSelector ? selectorRegions[offset++] : [],
|
|
208
191
|
})),
|
|
@@ -31,50 +31,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.takeDomSnapshots = void 0;
|
|
33
33
|
const take_dom_snapshot_1 = require("./take-dom-snapshot");
|
|
34
|
-
const
|
|
34
|
+
const generate_safe_selectors_1 = require("./generate-safe-selectors");
|
|
35
35
|
const wait_for_lazy_load_1 = require("../../automation/utils/wait-for-lazy-load");
|
|
36
36
|
const chalk_1 = __importDefault(require("chalk"));
|
|
37
37
|
const utils = __importStar(require("@applitools/utils"));
|
|
38
38
|
const lang = __importStar(require("../../lang"));
|
|
39
39
|
__exportStar(require("./take-dom-snapshot"), exports);
|
|
40
40
|
async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
|
|
41
|
-
var _a, _b, _c
|
|
41
|
+
var _a, _b, _c;
|
|
42
42
|
// calculating cookies here once so that we (a) don't do it for each dom snapshot, and (b) do it before generating safe selectors
|
|
43
43
|
const features = await driver.getFeatures();
|
|
44
44
|
settings.cookies = features.allCookies ? await driver.getCookies().catch(() => []) : [];
|
|
45
|
+
settings.lazyLoad = settings.lazyLoad !== true ? settings.lazyLoad : {};
|
|
45
46
|
const currentContext = driver.currentContext;
|
|
46
|
-
let calculateRegionsResults = {};
|
|
47
|
-
const waitBeforeCapture = async () => {
|
|
48
|
-
if (utils.types.isFunction(settings.waitBeforeCapture)) {
|
|
49
|
-
await settings.waitBeforeCapture();
|
|
50
|
-
}
|
|
51
|
-
else if (settings.waitBeforeCapture) {
|
|
52
|
-
await utils.general.sleep(settings.waitBeforeCapture);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
if (settings.lazyLoad) {
|
|
56
|
-
await (0, wait_for_lazy_load_1.waitForLazyLoad)({
|
|
57
|
-
context: driver.currentContext,
|
|
58
|
-
settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
|
|
59
|
-
logger,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
47
|
if (!((_a = settings.layoutBreakpoints) === null || _a === void 0 ? void 0 : _a.breakpoints)) {
|
|
48
|
+
if (settings.lazyLoad) {
|
|
49
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({ context: currentContext, settings: settings.lazyLoad, logger });
|
|
50
|
+
}
|
|
63
51
|
logger.log(`taking single dom snapshot`);
|
|
64
|
-
await
|
|
65
|
-
await waitBeforeCapture();
|
|
52
|
+
await beforeEachSnapshot();
|
|
66
53
|
// it's important that we calculate safe selectors as close as possible to taking the dom snapshot
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
54
|
+
let safeSelectorResult;
|
|
55
|
+
if (settings.elementReferences) {
|
|
56
|
+
safeSelectorResult = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
57
|
+
context: currentContext,
|
|
58
|
+
elementReferences: settings.elementReferences,
|
|
71
59
|
});
|
|
72
60
|
}
|
|
73
61
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
74
|
-
await ((
|
|
75
|
-
return Array(settings.environments.length).fill({ snapshot,
|
|
62
|
+
await ((_b = safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.cleanupGeneratedSelectors) === null || _b === void 0 ? void 0 : _b.call(safeSelectorResult));
|
|
63
|
+
return Array(settings.environments.length).fill({ ...snapshot, generatedSelectors: safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.selectors });
|
|
76
64
|
}
|
|
77
|
-
const isStrictBreakpoints = utils.types.isArray((
|
|
65
|
+
const isStrictBreakpoints = utils.types.isArray((_c = settings.layoutBreakpoints) === null || _c === void 0 ? void 0 : _c.breakpoints);
|
|
78
66
|
const requiredWidths = await settings.environments.reduce(async (prev, environment, index) => {
|
|
79
67
|
const { name, width } = (await extractEnvironmentInfo(environment));
|
|
80
68
|
const requiredWidths = await prev;
|
|
@@ -95,81 +83,83 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
95
83
|
});
|
|
96
84
|
logger.console.log(chalk_1.default.yellow(message));
|
|
97
85
|
}
|
|
98
|
-
logger.log(`
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
103
|
-
logger.log(`
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// it's important that we calculate safe selectors as close as possible to taking the dom snapshot
|
|
107
|
-
if (settings.calculateRegionsOptions) {
|
|
108
|
-
calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
|
|
109
|
-
...settings.calculateRegionsOptions,
|
|
110
|
-
driver,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
114
|
-
requiredWidths.get(viewportSize.width).forEach(({ index }) => {
|
|
115
|
-
snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
|
|
116
|
-
});
|
|
86
|
+
logger.log(`Taking multiple dom snapshots for the breakpoints`, settings.layoutBreakpoints);
|
|
87
|
+
const initialViewportSize = await driver.getViewportSize();
|
|
88
|
+
const entries = [];
|
|
89
|
+
const initialsBrowsers = requiredWidths.get(initialViewportSize.width);
|
|
90
|
+
if (initialsBrowsers) {
|
|
91
|
+
logger.log(`The first dom snapshot is going to be taking for initial viewport size`, initialViewportSize);
|
|
92
|
+
requiredWidths.delete(initialViewportSize.width);
|
|
93
|
+
entries.push({ browsers: initialsBrowsers });
|
|
117
94
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const message = lang.breakpointOutOfDriverBoundsWarning({
|
|
128
|
-
requiredWidth,
|
|
129
|
-
actualWidth: actualViewportSize.width,
|
|
130
|
-
browsers: browsersInfo,
|
|
131
|
-
});
|
|
132
|
-
logger.console.log(chalk_1.default.yellow(message));
|
|
133
|
-
logger.log(message);
|
|
95
|
+
requiredWidths.forEach((browsers, requiredWidth) => entries.push({ viewportSize: { width: requiredWidth, height: initialViewportSize.height }, browsers }));
|
|
96
|
+
logger.log(`All entries to take dom snapshots for`, entries);
|
|
97
|
+
let safeSelectorResult;
|
|
98
|
+
const snapshots = Array(settings.environments.length);
|
|
99
|
+
for (const [index, { viewportSize, browsers }] of entries.entries()) {
|
|
100
|
+
logger.log(`Taking dom snapshot for viewport size ${viewportSize}`);
|
|
101
|
+
if (viewportSize) {
|
|
102
|
+
try {
|
|
103
|
+
await driver.setViewportSize(viewportSize);
|
|
134
104
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
105
|
+
catch (error) {
|
|
106
|
+
logger.error(`Failed to set viewport size to ${viewportSize} due to the error`, error);
|
|
107
|
+
const actualViewportSize = await driver.getViewportSize();
|
|
108
|
+
if (isStrictBreakpoints) {
|
|
109
|
+
const message = lang.breakpointOutOfDriverBoundsWarning({
|
|
110
|
+
requiredWidth: viewportSize.width,
|
|
111
|
+
actualWidth: actualViewportSize.width,
|
|
112
|
+
browsers,
|
|
113
|
+
});
|
|
114
|
+
logger.console.log(chalk_1.default.yellow(message));
|
|
115
|
+
logger.log(message);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const message = lang.requestedEnvironmentOutOfDriverBoundsWarning({
|
|
119
|
+
requiredWidth: viewportSize.width,
|
|
120
|
+
actualWidth: actualViewportSize.width,
|
|
121
|
+
browsers,
|
|
122
|
+
});
|
|
123
|
+
logger.console.log(chalk_1.default.yellow(message));
|
|
124
|
+
logger.log(message);
|
|
125
|
+
}
|
|
143
126
|
}
|
|
127
|
+
if (settings.layoutBreakpoints.reload)
|
|
128
|
+
await driver.reloadPage();
|
|
144
129
|
}
|
|
145
|
-
if (settings.layoutBreakpoints.reload) {
|
|
146
|
-
await
|
|
130
|
+
if (settings.lazyLoad && (index === 0 || settings.layoutBreakpoints.reload)) {
|
|
131
|
+
await (0, wait_for_lazy_load_1.waitForLazyLoad)({ context: currentContext, settings: settings.lazyLoad, logger });
|
|
147
132
|
}
|
|
148
|
-
await
|
|
149
|
-
|
|
150
|
-
if (settings.layoutBreakpoints.reload) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
driver,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
133
|
+
await beforeEachSnapshot();
|
|
134
|
+
// it's important that we calculate safe selectors as close as possible to taking the dom snapshot
|
|
135
|
+
if (settings.elementReferences && (index === 0 || settings.layoutBreakpoints.reload)) {
|
|
136
|
+
safeSelectorResult = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
137
|
+
context: currentContext,
|
|
138
|
+
elementReferences: settings.elementReferences,
|
|
139
|
+
});
|
|
158
140
|
}
|
|
159
141
|
const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
|
|
160
|
-
|
|
161
|
-
snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
|
|
162
|
-
});
|
|
142
|
+
browsers.forEach(({ index }) => (snapshots[index] = { ...snapshot, generatedSelectors: safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.selectors }));
|
|
163
143
|
}
|
|
164
|
-
await driver.setViewportSize(
|
|
144
|
+
await driver.setViewportSize(initialViewportSize);
|
|
165
145
|
if (settings.layoutBreakpoints.reload) {
|
|
166
146
|
await driver.reloadPage();
|
|
167
|
-
await
|
|
147
|
+
await beforeEachSnapshot();
|
|
168
148
|
}
|
|
169
149
|
else {
|
|
170
|
-
(
|
|
150
|
+
await (safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.cleanupGeneratedSelectors());
|
|
151
|
+
}
|
|
152
|
+
return snapshots;
|
|
153
|
+
async function beforeEachSnapshot() {
|
|
154
|
+
var _a, _b;
|
|
155
|
+
await ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _a === void 0 ? void 0 : _a.call(hooks));
|
|
156
|
+
if (utils.types.isNumber(settings.waitBeforeCapture)) {
|
|
157
|
+
await utils.general.sleep(settings.waitBeforeCapture);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
await ((_b = settings.waitBeforeCapture) === null || _b === void 0 ? void 0 : _b.call(settings));
|
|
161
|
+
}
|
|
171
162
|
}
|
|
172
|
-
return snapshotsResults;
|
|
173
163
|
function calculateBreakpoint({ breakpoints, value }) {
|
|
174
164
|
const nextBreakpointIndex = breakpoints
|
|
175
165
|
.sort((item1, item2) => (item1 > item2 ? 1 : -1))
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toGeneratedSelectors = void 0;
|
|
4
|
+
function toGeneratedSelectors({ elementReferences, 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
|
+
target = (_a = generatedSelectors[offset++].safeSelector) !== null && _a !== void 0 ? _a : undefined;
|
|
21
|
+
if (!target)
|
|
22
|
+
throw new Error('Target element not found');
|
|
23
|
+
}
|
|
24
|
+
if (elementReferences.scrolling) {
|
|
25
|
+
scrolling = (_b = generatedSelectors[offset++].safeSelector) !== null && _b !== void 0 ? _b : undefined;
|
|
26
|
+
}
|
|
27
|
+
calculate = generatedSelectors.slice(offset);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
target = elementReferences.target && transformElementReference(elementReferences.target);
|
|
31
|
+
scrolling = elementReferences.scrolling && transformElementReference(elementReferences.scrolling);
|
|
32
|
+
calculate = ((_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : []).map(elementReference => {
|
|
33
|
+
var _a;
|
|
34
|
+
const selector = (_a = transformElementReference(elementReference)) !== null && _a !== void 0 ? _a : null;
|
|
35
|
+
return { originalSelector: selector, safeSelector: selector };
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return { target, scrolling, calculate };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.toGeneratedSelectors = toGeneratedSelectors;
|
|
@@ -0,0 +1,46 @@
|
|
|
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.startMemoryUsageLogging = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
function startMemoryUsageLogging({ timeout = 30000, logger }) {
|
|
29
|
+
var _a;
|
|
30
|
+
logger = logger.extend({ tags: [`mem-usage-${utils.general.shortid()}`] });
|
|
31
|
+
const interval = setInterval(() => logger.log(formatMemoryUsage(process.memoryUsage())), (_a = utils.general.getEnvValue('MEMORY_LOG_TIMEOUT', 'number')) !== null && _a !== void 0 ? _a : timeout);
|
|
32
|
+
interval.unref();
|
|
33
|
+
return { stop };
|
|
34
|
+
function stop() {
|
|
35
|
+
clearInterval(interval);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.startMemoryUsageLogging = startMemoryUsageLogging;
|
|
39
|
+
function formatMemoryUsage(usage) {
|
|
40
|
+
return `Memory usage: ${Object.entries(usage)
|
|
41
|
+
.map(([key, value]) => `${key}: ${toMB(value)}MB`)
|
|
42
|
+
.join(', ')}`;
|
|
43
|
+
}
|
|
44
|
+
function toMB(size) {
|
|
45
|
+
return Math.round((size / 1024 / 1024) * 100) / 100;
|
|
46
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"homepage": "https://applitools.com",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
|
|
@@ -59,6 +59,12 @@
|
|
|
59
59
|
},
|
|
60
60
|
"sea": {
|
|
61
61
|
"bin": "eyes",
|
|
62
|
+
"certs": {
|
|
63
|
+
"win": {
|
|
64
|
+
"cert": "env.CODE_SIGNING_CERT_WIN",
|
|
65
|
+
"pass": "env.CODE_SIGNING_PASS_WIN"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
62
68
|
"targets": {
|
|
63
69
|
"node20-linux-x64-glibc-217": "./bin/core-linux",
|
|
64
70
|
"node20-linux-x64-musl": "./bin/core-alpine",
|
|
@@ -68,20 +74,20 @@
|
|
|
68
74
|
}
|
|
69
75
|
},
|
|
70
76
|
"dependencies": {
|
|
71
|
-
"@applitools/core-base": "1.7.
|
|
77
|
+
"@applitools/core-base": "1.7.4",
|
|
72
78
|
"@applitools/dom-capture": "11.2.4",
|
|
73
79
|
"@applitools/dom-snapshot": "4.7.14",
|
|
74
|
-
"@applitools/driver": "1.15.
|
|
75
|
-
"@applitools/ec-client": "1.7.
|
|
76
|
-
"@applitools/logger": "2.0.
|
|
77
|
-
"@applitools/nml-client": "1.
|
|
78
|
-
"@applitools/req": "1.6.
|
|
79
|
-
"@applitools/screenshoter": "3.8.
|
|
80
|
+
"@applitools/driver": "1.15.3",
|
|
81
|
+
"@applitools/ec-client": "1.7.18",
|
|
82
|
+
"@applitools/logger": "2.0.14",
|
|
83
|
+
"@applitools/nml-client": "1.6.0",
|
|
84
|
+
"@applitools/req": "1.6.4",
|
|
85
|
+
"@applitools/screenshoter": "3.8.18",
|
|
80
86
|
"@applitools/snippets": "2.4.24",
|
|
81
|
-
"@applitools/socket": "1.1.
|
|
82
|
-
"@applitools/spec-driver-webdriver": "1.0.
|
|
83
|
-
"@applitools/ufg-client": "1.9.
|
|
84
|
-
"@applitools/utils": "1.
|
|
87
|
+
"@applitools/socket": "1.1.14",
|
|
88
|
+
"@applitools/spec-driver-webdriver": "1.0.52",
|
|
89
|
+
"@applitools/ufg-client": "1.9.9",
|
|
90
|
+
"@applitools/utils": "1.7.0",
|
|
85
91
|
"@types/ws": "8.5.5",
|
|
86
92
|
"abort-controller": "3.0.0",
|
|
87
93
|
"chalk": "4.1.2",
|
|
@@ -94,11 +100,11 @@
|
|
|
94
100
|
"devDependencies": {
|
|
95
101
|
"@applitools/bongo": "^5.7.6",
|
|
96
102
|
"@applitools/sea": "^1.0.0",
|
|
97
|
-
"@applitools/spec-driver-puppeteer": "^1.3.
|
|
98
|
-
"@applitools/spec-driver-selenium": "^1.5.
|
|
103
|
+
"@applitools/spec-driver-puppeteer": "^1.3.2",
|
|
104
|
+
"@applitools/spec-driver-selenium": "^1.5.66",
|
|
99
105
|
"@applitools/test-server": "^1.2.2",
|
|
100
106
|
"@applitools/test-utils": "^1.5.17",
|
|
101
|
-
"@applitools/tunnel-client": "^1.
|
|
107
|
+
"@applitools/tunnel-client": "^1.4.0",
|
|
102
108
|
"@types/node": "^12.20.55",
|
|
103
109
|
"@types/selenium-webdriver": "^4.1.2",
|
|
104
110
|
"@types/semver": "^7.5.4",
|
|
@@ -5,8 +5,11 @@ import { type SpecType, type ElementReference, type Selector } from '@applitools
|
|
|
5
5
|
export declare function toBaseCheckSettings<TSpec extends SpecType>({ settings }: {
|
|
6
6
|
settings: CheckSettings<TSpec>;
|
|
7
7
|
}): {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
elementReferences: {
|
|
9
|
+
target: ElementReference<TSpec> | undefined;
|
|
10
|
+
scrolling: ElementReference<TSpec> | undefined;
|
|
11
|
+
calculate: ElementReference<TSpec>[];
|
|
12
|
+
};
|
|
10
13
|
getBaseCheckSettings: ({ calculatedRegions, preserveTransformation, }: {
|
|
11
14
|
calculatedRegions: {
|
|
12
15
|
selector?: Selector;
|
|
@@ -3,9 +3,8 @@ import { type SpecType, type Context } from '@applitools/driver';
|
|
|
3
3
|
import { type LazyLoadOptions } from '../types';
|
|
4
4
|
export declare function waitForLazyLoad<TSpec extends SpecType>({ context, settings, logger, }: {
|
|
5
5
|
context: Context<TSpec>;
|
|
6
|
-
settings
|
|
6
|
+
settings?: LazyLoadOptions & {
|
|
7
7
|
pollTimeout?: number;
|
|
8
|
-
waitingTime?: number;
|
|
9
8
|
};
|
|
10
9
|
logger: Logger;
|
|
11
10
|
}): Promise<void>;
|
package/types/ufg/check.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ type Options<TSpec extends SpecType> = {
|
|
|
11
11
|
logger: Logger;
|
|
12
12
|
};
|
|
13
13
|
export declare function makeCheck<TSpec extends SpecType>({ eyes, target: defaultTarget, environments: defaultEnvironments, spec, signal, logger: mainLogger, }: Options<TSpec>): ({ target, settings, logger, }?: {
|
|
14
|
-
settings?: CheckSettings<TSpec> | undefined;
|
|
15
14
|
target?: Target<TSpec> | undefined;
|
|
15
|
+
settings?: CheckSettings<TSpec> | undefined;
|
|
16
16
|
logger?: Logger | undefined;
|
|
17
17
|
}) => Promise<void>;
|
|
18
18
|
export {};
|
package/types/ufg/types.d.ts
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import type { MaybeArray
|
|
1
|
+
import type { MaybeArray } from '@applitools/utils';
|
|
2
2
|
import type * as AutomationCore from '../automation/types';
|
|
3
|
-
import { type
|
|
3
|
+
import { type SpecType, type CommonSelector } from '@applitools/driver';
|
|
4
4
|
import { type Logger } from '@applitools/logger';
|
|
5
5
|
import { type Proxy } from '@applitools/req';
|
|
6
|
-
import { type UFGClient, type UFGClientSettings, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
|
|
6
|
+
import { type UFGClient, type UFGClientSettings, type DomSnapshot as UFGDomSnapshot, type AndroidSnapshot as UFGAndroidSnapshot, type IOSSnapshot as UFGIOSSnapshot } from '@applitools/ufg-client';
|
|
7
7
|
export * from '../automation/types';
|
|
8
|
-
export type
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
selectorsToCalculate?: {
|
|
13
|
-
originalSelector: Selector | null;
|
|
14
|
-
safeSelector: Selector | null;
|
|
8
|
+
export type DomSnapshot = UFGDomSnapshot & {
|
|
9
|
+
generatedSelectors?: {
|
|
10
|
+
originalSelector: CommonSelector | null;
|
|
11
|
+
safeSelector: CommonSelector | null;
|
|
15
12
|
}[];
|
|
16
|
-
regionToTarget?: Selector | Region;
|
|
17
|
-
scrollRootSelector?: Selector;
|
|
18
13
|
};
|
|
14
|
+
export type AndroidSnapshot = UFGAndroidSnapshot;
|
|
15
|
+
export type IOSSnapshot = UFGIOSSnapshot;
|
|
16
|
+
export type SnapshotTarget = MaybeArray<DomSnapshot> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
|
|
17
|
+
export type Target<TSpec extends SpecType> = SnapshotTarget | AutomationCore.Target<TSpec>;
|
|
19
18
|
export interface Core<TSpec extends SpecType> extends AutomationCore.Core<TSpec> {
|
|
20
19
|
readonly type: 'ufg';
|
|
21
20
|
getUFGClient(options?: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { type DomSnapshot } from '../types';
|
|
1
2
|
import { type Logger } from '@applitools/logger';
|
|
2
3
|
import { type SpecType, type Context, type Cookie } from '@applitools/driver';
|
|
3
|
-
import { type DomSnapshot } from '@applitools/ufg-client';
|
|
4
4
|
export type RawDomSnapshot = {
|
|
5
5
|
url: string;
|
|
6
6
|
selector: string;
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DomSnapshot, LazyLoadOptions } from '../types';
|
|
2
2
|
import { type Size } from '@applitools/utils';
|
|
3
3
|
import { type Logger } from '@applitools/logger';
|
|
4
|
-
import { type SpecType, type Driver } from '@applitools/driver';
|
|
5
|
-
import { type
|
|
4
|
+
import { type SpecType, type Driver, type ElementReference } from '@applitools/driver';
|
|
5
|
+
import { type Environment } from '@applitools/ufg-client';
|
|
6
6
|
import { type DomSnapshotSettings } from './take-dom-snapshot';
|
|
7
|
-
import { type CalculateRegionsOptions } from './calculate-regions';
|
|
8
7
|
export * from './take-dom-snapshot';
|
|
9
|
-
export type DomSnapshotsSettings = DomSnapshotSettings & {
|
|
8
|
+
export type DomSnapshotsSettings<TSpec extends SpecType> = DomSnapshotSettings & {
|
|
10
9
|
environments: Environment[];
|
|
11
|
-
waitBeforeCapture?: number | (() => void);
|
|
10
|
+
waitBeforeCapture?: number | (() => Promise<void>);
|
|
12
11
|
layoutBreakpoints?: {
|
|
13
12
|
breakpoints: number[] | boolean;
|
|
14
13
|
reload?: boolean;
|
|
15
14
|
};
|
|
16
|
-
calculateRegionsOptions?: CalculateRegionsOptions;
|
|
17
15
|
lazyLoad?: boolean | LazyLoadOptions;
|
|
16
|
+
elementReferences?: ElementReference<TSpec>[];
|
|
18
17
|
};
|
|
19
18
|
export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, settings, hooks, provides, logger, }: {
|
|
20
19
|
driver: Driver<TSpec>;
|
|
21
|
-
settings: DomSnapshotsSettings
|
|
20
|
+
settings: DomSnapshotsSettings<TSpec>;
|
|
22
21
|
hooks?: {
|
|
23
22
|
beforeEachSnapshot?(): void | Promise<void>;
|
|
24
23
|
};
|
|
@@ -27,4 +26,4 @@ export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, setti
|
|
|
27
26
|
getIOSDevices(): Promise<Record<string, Record<string, Size>>>;
|
|
28
27
|
};
|
|
29
28
|
logger: Logger;
|
|
30
|
-
}): Promise<
|
|
29
|
+
}): Promise<DomSnapshot[]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type SpecType, type ElementReference, type CommonSelector } from '@applitools/driver';
|
|
2
|
+
export declare function toGeneratedSelectors<TSpec extends SpecType>({ elementReferences, transformElementReference, }: {
|
|
3
|
+
elementReferences: {
|
|
4
|
+
target?: ElementReference<TSpec>;
|
|
5
|
+
scrolling?: ElementReference<TSpec>;
|
|
6
|
+
calculate?: ElementReference<TSpec>[];
|
|
7
|
+
};
|
|
8
|
+
transformElementReference: (elementReference: ElementReference<TSpec>) => CommonSelector | undefined;
|
|
9
|
+
}): {
|
|
10
|
+
elementReferencesToMark: (string | TSpec["element"] | TSpec["secondary"]["element"] | TSpec["selector"] | TSpec["secondary"]["selector"] | {
|
|
11
|
+
selector: string | TSpec["selector"] | TSpec["secondary"]["selector"];
|
|
12
|
+
type?: string | undefined;
|
|
13
|
+
child?: TSpec["selector"] | TSpec["secondary"]["selector"] | CommonSelector<TSpec["selector"] | TSpec["secondary"]["selector"]> | undefined;
|
|
14
|
+
shadow?: TSpec["selector"] | TSpec["secondary"]["selector"] | CommonSelector<TSpec["selector"] | TSpec["secondary"]["selector"]> | undefined;
|
|
15
|
+
frame?: TSpec["selector"] | TSpec["secondary"]["selector"] | CommonSelector<TSpec["selector"] | TSpec["secondary"]["selector"]> | undefined;
|
|
16
|
+
fallback?: TSpec["selector"] | TSpec["secondary"]["selector"] | CommonSelector<TSpec["selector"] | TSpec["secondary"]["selector"]> | undefined;
|
|
17
|
+
} | (NonNullable<TSpec["element"]> extends infer T ? T extends NonNullable<TSpec["element"]> ? T extends readonly (infer InnerArr)[] ? InnerArr : T : never : never) | (NonNullable<TSpec["secondary"]["element"]> extends infer T_1 ? T_1 extends NonNullable<TSpec["secondary"]["element"]> ? T_1 extends readonly (infer InnerArr)[] ? InnerArr : T_1 : never : never) | (NonNullable<TSpec["selector"]> extends infer T_2 ? T_2 extends NonNullable<TSpec["selector"]> ? T_2 extends readonly (infer InnerArr)[] ? InnerArr : T_2 : never : never) | (NonNullable<TSpec["secondary"]["selector"]> extends infer T_3 ? T_3 extends NonNullable<TSpec["secondary"]["selector"]> ? T_3 extends readonly (infer InnerArr)[] ? InnerArr : T_3 : never : never))[];
|
|
18
|
+
getGeneratedSelectors: (generatedSelectors?: {
|
|
19
|
+
originalSelector: CommonSelector | null;
|
|
20
|
+
safeSelector: CommonSelector | null;
|
|
21
|
+
}[]) => {
|
|
22
|
+
target: CommonSelector | undefined;
|
|
23
|
+
scrolling: CommonSelector | undefined;
|
|
24
|
+
calculate: {
|
|
25
|
+
originalSelector: CommonSelector | null;
|
|
26
|
+
safeSelector: CommonSelector | null;
|
|
27
|
+
}[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateRegions = void 0;
|
|
4
|
-
const generate_safe_selectors_1 = require("../utils/generate-safe-selectors");
|
|
5
|
-
async function calculateRegions({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }) {
|
|
6
|
-
var _a, _b;
|
|
7
|
-
const elementReferences = [
|
|
8
|
-
...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
|
|
9
|
-
...(scrollRootElement ? [scrollRootElement] : []),
|
|
10
|
-
...elementReferencesToCalculate,
|
|
11
|
-
];
|
|
12
|
-
const { cleanupGeneratedSelectors, selectors } = await (0, generate_safe_selectors_1.generateSafeSelectors)({
|
|
13
|
-
context: driver.currentContext,
|
|
14
|
-
elementReferences,
|
|
15
|
-
});
|
|
16
|
-
let selectorsToCalculate = selectors;
|
|
17
|
-
let regionToTarget;
|
|
18
|
-
let scrollRootSelector;
|
|
19
|
-
if (elementReferenceToTarget) {
|
|
20
|
-
if (!((_a = selectorsToCalculate[0]) === null || _a === void 0 ? void 0 : _a.safeSelector))
|
|
21
|
-
throw new Error('Target element not found');
|
|
22
|
-
regionToTarget = selectorsToCalculate[0].safeSelector;
|
|
23
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
24
|
-
}
|
|
25
|
-
if (scrollRootElement) {
|
|
26
|
-
scrollRootSelector = (_b = selectorsToCalculate[0].safeSelector) !== null && _b !== void 0 ? _b : undefined;
|
|
27
|
-
selectorsToCalculate = selectorsToCalculate.slice(1);
|
|
28
|
-
}
|
|
29
|
-
return { cleanupGeneratedSelectors, selectorsToCalculate, regionToTarget, scrollRootSelector };
|
|
30
|
-
}
|
|
31
|
-
exports.calculateRegions = calculateRegions;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { SpecType, Driver, ElementReference } from '@applitools/driver';
|
|
2
|
-
export type CalculateRegionsOptions = {
|
|
3
|
-
elementReferencesToCalculate: ElementReference<SpecType>[];
|
|
4
|
-
elementReferenceToTarget?: ElementReference<SpecType>;
|
|
5
|
-
scrollRootElement?: ElementReference<SpecType>;
|
|
6
|
-
};
|
|
7
|
-
export declare function calculateRegions<TSpec extends SpecType>({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }: {
|
|
8
|
-
driver: Driver<TSpec>;
|
|
9
|
-
} & CalculateRegionsOptions): Promise<{
|
|
10
|
-
cleanupGeneratedSelectors: () => Promise<void>;
|
|
11
|
-
selectorsToCalculate: ({
|
|
12
|
-
safeSelector: null;
|
|
13
|
-
originalSelector: null;
|
|
14
|
-
elementReference: ElementReference<TSpec>;
|
|
15
|
-
} | {
|
|
16
|
-
safeSelector: import("@applitools/driver").CommonSelector;
|
|
17
|
-
originalSelector: import("@applitools/driver").CommonSelector | null;
|
|
18
|
-
elementReference: ElementReference<TSpec>;
|
|
19
|
-
})[];
|
|
20
|
-
regionToTarget: import("@applitools/driver").CommonSelector | undefined;
|
|
21
|
-
scrollRootSelector: import("@applitools/driver").CommonSelector | undefined;
|
|
22
|
-
}>;
|