@applitools/core 1.4.6 → 1.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{classic → automation}/extract-text.js +14 -11
- package/dist/automation/get-viewport-size.js +2 -2
- package/dist/{classic → automation}/locate-text.js +5 -6
- package/dist/automation/locate.js +2 -2
- package/dist/automation/set-viewport-size.js +2 -2
- package/dist/automation/utils/take-screenshot.js +2 -2
- package/dist/{utils → automation/utils}/to-base-check-settings.js +3 -2
- package/dist/{utils → automation/utils}/wait-for-lazy-load.js +2 -2
- package/dist/check-and-close.js +7 -5
- package/dist/check.js +4 -5
- package/dist/classic/abort.js +15 -6
- package/dist/classic/check-and-close.js +9 -5
- package/dist/classic/check.js +12 -8
- package/dist/classic/close.js +14 -5
- package/dist/classic/core.js +9 -5
- package/dist/classic/open-eyes.js +17 -19
- package/dist/classic/utils/take-dom-capture.js +35 -54
- package/dist/close.js +1 -25
- package/dist/core.js +9 -5
- package/dist/errors/abort-error.js +5 -1
- package/dist/extract-text.js +13 -17
- package/dist/get-eyes-results.js +18 -0
- package/dist/{close-manager.js → get-manager-results.js} +11 -12
- package/dist/get-typed-eyes.js +5 -6
- package/dist/index.js +3 -3
- package/dist/locate-text.js +33 -7
- package/dist/locate.js +1 -1
- package/dist/make-ec-client.js +1 -9
- package/dist/make-manager.js +8 -33
- package/dist/open-eyes.js +3 -5
- package/dist/troubleshoot/check-network.js +41 -34
- package/dist/troubleshoot/eyes.js +2 -2
- package/dist/troubleshoot/ufg.js +3 -2
- package/dist/troubleshoot/utils.js +1 -25
- package/dist/types.js +0 -1
- package/dist/ufg/abort.js +19 -24
- package/dist/ufg/check-and-close.js +55 -55
- package/dist/ufg/check.js +33 -24
- package/dist/ufg/close.js +25 -18
- package/dist/ufg/core.js +9 -5
- package/dist/ufg/get-base-eyes.js +2 -0
- package/dist/ufg/get-results.js +27 -0
- package/dist/ufg/open-eyes.js +30 -25
- package/dist/ufg/utils/extract-broker-url.js +52 -0
- package/dist/ufg/utils/generate-safe-selectors.js +10 -5
- package/dist/ufg/utils/take-dom-snapshot.js +37 -36
- package/dist/ufg/utils/take-dom-snapshots.js +13 -17
- package/dist/ufg/utils/take-snapshots.js +3 -3
- package/dist/ufg/utils/take-vhses.js +60 -166
- package/dist/utils/format-results.js +37 -37
- package/package.json +19 -36
- package/types/automation/extract-text.d.ts +16 -0
- package/types/automation/get-viewport-size.d.ts +7 -7
- package/types/automation/locate-text.d.ts +15 -0
- package/types/automation/locate.d.ts +8 -8
- package/types/automation/set-viewport-size.d.ts +7 -7
- package/types/automation/types.d.ts +38 -42
- package/types/automation/utils/take-screenshot.d.ts +9 -9
- package/types/automation/utils/to-base-check-settings.d.ts +17 -0
- package/types/{utils → automation/utils}/wait-for-lazy-load.d.ts +3 -3
- package/types/check-and-close.d.ts +11 -13
- package/types/check.d.ts +12 -12
- package/types/classic/abort.d.ts +10 -10
- package/types/classic/check-and-close.d.ts +15 -11
- package/types/classic/check.d.ts +11 -11
- package/types/classic/close.d.ts +10 -10
- package/types/classic/core.d.ts +4 -4
- package/types/classic/get-base-eyes.d.ts +4 -4
- package/types/classic/open-eyes.d.ts +9 -9
- package/types/classic/types.d.ts +7 -7
- package/types/classic/utils/take-dom-capture.d.ts +4 -4
- package/types/close-batch.d.ts +1 -1
- package/types/close.d.ts +9 -8
- package/types/core.d.ts +4 -4
- package/types/delete-test.d.ts +1 -1
- package/types/errors/abort-error.d.ts +3 -2
- package/types/extract-text.d.ts +11 -9
- package/types/get-eyes-results.d.ts +12 -0
- package/types/get-manager-results.d.ts +14 -0
- package/types/get-typed-eyes.d.ts +9 -8
- package/types/index.d.ts +3 -3
- package/types/locate-text.d.ts +11 -9
- package/types/locate.d.ts +9 -9
- package/types/make-ec-client.d.ts +3 -3
- package/types/make-manager.d.ts +12 -12
- package/types/open-eyes.d.ts +13 -13
- package/types/troubleshoot/check-network.d.ts +3 -3
- package/types/troubleshoot/utils.d.ts +0 -2
- package/types/types.d.ts +65 -85
- package/types/ufg/abort.d.ts +14 -18
- package/types/ufg/check-and-close.d.ts +25 -13
- package/types/ufg/check.d.ts +11 -11
- package/types/ufg/close.d.ts +14 -18
- package/types/ufg/core.d.ts +4 -4
- package/types/ufg/get-base-eyes.d.ts +6 -6
- package/types/ufg/get-results.d.ts +16 -0
- package/types/ufg/open-eyes.d.ts +9 -9
- package/types/ufg/types.d.ts +15 -17
- package/types/ufg/utils/extract-broker-url.d.ts +6 -0
- package/types/ufg/utils/generate-safe-selectors.d.ts +14 -10
- package/types/ufg/utils/take-dom-snapshot.d.ts +34 -9
- package/types/ufg/utils/take-dom-snapshots.d.ts +3 -3
- package/types/ufg/utils/take-snapshots.d.ts +4 -4
- package/types/ufg/utils/take-vhses.d.ts +4 -4
- package/types/utils/format-results.d.ts +1 -1
- package/dist/utils/extract-broker-url.js +0 -24
- package/types/classic/extract-text.d.ts +0 -16
- package/types/classic/locate-text.d.ts +0 -15
- package/types/close-manager.d.ts +0 -18
- package/types/utils/extract-broker-url.d.ts +0 -2
- package/types/utils/to-base-check-settings.d.ts +0 -18
package/dist/ufg/close.js
CHANGED
|
@@ -2,29 +2,36 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeClose = void 0;
|
|
4
4
|
const driver_1 = require("@applitools/driver");
|
|
5
|
-
function makeClose({ storage, target, spec, logger: defaultLogger
|
|
6
|
-
return async function ({ settings, logger = defaultLogger, } = {}) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const promises = (_a = tests.get(key)) !== null && _a !== void 0 ? _a : [];
|
|
11
|
-
promises.push(promise);
|
|
12
|
-
return tests.set(key, promises);
|
|
13
|
-
}, new Map());
|
|
14
|
-
return Promise.all(Array.from(tests.values(), async (promises) => {
|
|
15
|
-
var _a, _b;
|
|
5
|
+
function makeClose({ storage, target, spec, logger: defaultLogger }) {
|
|
6
|
+
return async function close({ settings, logger = defaultLogger, } = {}) {
|
|
7
|
+
logger.log('Command "close" is called with settings', settings);
|
|
8
|
+
settings !== null && settings !== void 0 ? settings : (settings = {});
|
|
9
|
+
if (!settings.testMetadata) {
|
|
16
10
|
try {
|
|
17
|
-
const [{ eyes, renderer }] = await Promise.all(promises);
|
|
18
11
|
const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
settings.testMetadata = await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata());
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
logger.warn('Command "close" received an error during extracting driver metadata', error);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
storage.forEach(async (promises) => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
try {
|
|
21
|
+
const [{ eyes }] = await Promise.all(promises);
|
|
22
|
+
try {
|
|
23
|
+
await eyes.close({ settings, logger });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger.warn('Command "close" received an error during performing, trying to perform abort instead', error);
|
|
27
|
+
await eyes.abort({ settings, logger });
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
catch (error) {
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
logger.warn('Command "close" received an error during waiting for eyes instances in background', error);
|
|
32
|
+
await ((_b = (_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ settings, logger }));
|
|
26
33
|
}
|
|
27
|
-
})
|
|
34
|
+
});
|
|
28
35
|
};
|
|
29
36
|
}
|
|
30
37
|
exports.makeClose = makeClose;
|
package/dist/ufg/core.js
CHANGED
|
@@ -32,6 +32,8 @@ const core_base_1 = require("@applitools/core-base");
|
|
|
32
32
|
const get_viewport_size_1 = require("../automation/get-viewport-size");
|
|
33
33
|
const set_viewport_size_1 = require("../automation/set-viewport-size");
|
|
34
34
|
const locate_1 = require("../automation/locate");
|
|
35
|
+
const locate_text_1 = require("../automation/locate-text");
|
|
36
|
+
const extract_text_1 = require("../automation/extract-text");
|
|
35
37
|
const open_eyes_1 = require("./open-eyes");
|
|
36
38
|
const utils = __importStar(require("@applitools/utils"));
|
|
37
39
|
const throat_1 = __importDefault(require("throat"));
|
|
@@ -68,12 +70,14 @@ function makeCore({ concurrency, spec, client, core, agentId = 'core-ufg', cwd =
|
|
|
68
70
|
});
|
|
69
71
|
return utils.general.extend(core, {
|
|
70
72
|
type: 'ufg',
|
|
71
|
-
isDriver: spec
|
|
72
|
-
isElement: spec
|
|
73
|
-
isSelector: spec
|
|
74
|
-
getViewportSize: (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
|
|
75
|
-
setViewportSize: (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
|
|
73
|
+
isDriver: spec && spec.isDriver,
|
|
74
|
+
isElement: spec && spec.isElement,
|
|
75
|
+
isSelector: spec && spec.isSelector,
|
|
76
|
+
getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
|
|
77
|
+
setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
|
|
76
78
|
locate: (0, locate_1.makeLocate)({ spec, core, logger }),
|
|
79
|
+
locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
|
|
80
|
+
extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
|
|
77
81
|
openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, client, core, logger }),
|
|
78
82
|
});
|
|
79
83
|
}
|
|
@@ -32,6 +32,8 @@ function makeGetBaseEyes({ settings: defaultSettings, core, client, eyes, logger
|
|
|
32
32
|
return getBaseEyesWithCache;
|
|
33
33
|
async function getBaseEyes({ settings, logger = defaultLogger, } = {}) {
|
|
34
34
|
logger.log(`Command "getBaseEyes" is called with settings`, settings);
|
|
35
|
+
if (!settings)
|
|
36
|
+
throw new Error('');
|
|
35
37
|
const environment = await client.bookRenderer({ settings });
|
|
36
38
|
const eyes = await core.openEyes({
|
|
37
39
|
settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeGetResults = void 0;
|
|
4
|
+
const abort_error_1 = require("../errors/abort-error");
|
|
5
|
+
function makeGetResults({ storage, logger: defaultLogger }) {
|
|
6
|
+
return async function getResults({ settings, logger = defaultLogger, } = {}) {
|
|
7
|
+
logger.log('Command "getResults" is called with settings', settings);
|
|
8
|
+
return Promise.all(Array.from(storage.values(), async (promises) => {
|
|
9
|
+
var _a;
|
|
10
|
+
try {
|
|
11
|
+
const [{ eyes, renderer }] = await Promise.all(promises);
|
|
12
|
+
const [result] = await eyes.getResults({ settings, logger });
|
|
13
|
+
return { ...result, renderer };
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (error instanceof abort_error_1.AbortError && ((_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes)) {
|
|
17
|
+
logger.warn('Command "getResults" received an abort error during performing', settings);
|
|
18
|
+
const [result] = await error.info.eyes.getResults({ settings, logger });
|
|
19
|
+
return { ...result, renderer: error.info.renderer };
|
|
20
|
+
}
|
|
21
|
+
logger.fatal('Command "getResults" received an error during performing', settings);
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}));
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
exports.makeGetResults = makeGetResults;
|
package/dist/ufg/open-eyes.js
CHANGED
|
@@ -31,9 +31,10 @@ const check_1 = require("./check");
|
|
|
31
31
|
const check_and_close_1 = require("./check-and-close");
|
|
32
32
|
const close_1 = require("./close");
|
|
33
33
|
const abort_1 = require("./abort");
|
|
34
|
+
const get_results_1 = require("./get-results");
|
|
34
35
|
const abort_controller_1 = require("abort-controller");
|
|
35
36
|
const utils = __importStar(require("@applitools/utils"));
|
|
36
|
-
function makeOpenEyes({ core, client, spec, logger: defaultLogger
|
|
37
|
+
function makeOpenEyes({ core, client, spec, logger: defaultLogger }) {
|
|
37
38
|
return async function openEyes({ target, settings, eyes, logger = defaultLogger, }) {
|
|
38
39
|
var _a, _b;
|
|
39
40
|
logger.log(`Command "openEyes" is called with ${target ? 'default driver and' : ''}`, ...(settings ? ['settings', settings] : []), eyes ? 'predefined eyes' : '');
|
|
@@ -59,9 +60,8 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
59
60
|
const getBaseEyes = (0, get_base_eyes_1.makeGetBaseEyes)({ settings, eyes, core, client, logger });
|
|
60
61
|
return utils.general.extend({}, eyes => {
|
|
61
62
|
var _a;
|
|
62
|
-
const storage =
|
|
63
|
-
let
|
|
64
|
-
let aborted = false;
|
|
63
|
+
const storage = new Map();
|
|
64
|
+
let running = true;
|
|
65
65
|
return {
|
|
66
66
|
type: 'ufg',
|
|
67
67
|
test: {
|
|
@@ -72,39 +72,44 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger, }) {
|
|
|
72
72
|
account,
|
|
73
73
|
},
|
|
74
74
|
get running() {
|
|
75
|
-
return
|
|
76
|
-
},
|
|
77
|
-
get closed() {
|
|
78
|
-
return closed;
|
|
79
|
-
},
|
|
80
|
-
get aborted() {
|
|
81
|
-
return aborted;
|
|
75
|
+
return running;
|
|
82
76
|
},
|
|
83
77
|
getBaseEyes,
|
|
84
78
|
// check with indexing and storage
|
|
85
|
-
check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
|
|
79
|
+
check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client: client, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
|
|
86
80
|
const results = await check(options);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
results.forEach(result => {
|
|
82
|
+
var _a;
|
|
83
|
+
const key = JSON.stringify(result.renderer);
|
|
84
|
+
storage.set(key, [...((_a = storage.get(key)) !== null && _a !== void 0 ? _a : []), result.promise]);
|
|
85
|
+
});
|
|
86
|
+
return results;
|
|
87
|
+
}),
|
|
88
|
+
checkAndClose: utils.general.wrap((0, check_and_close_1.makeCheckAndClose)({
|
|
89
|
+
eyes,
|
|
90
|
+
client: client,
|
|
91
|
+
target: driver,
|
|
92
|
+
spec,
|
|
93
|
+
signal: controller.signal,
|
|
94
|
+
logger,
|
|
95
|
+
}), async (checkAndClose, options = {}) => {
|
|
96
|
+
const results = await checkAndClose(options);
|
|
97
|
+
results.forEach(result => {
|
|
98
|
+
var _a;
|
|
99
|
+
const key = JSON.stringify(result.renderer);
|
|
100
|
+
storage.set(key, [...((_a = storage.get(key)) !== null && _a !== void 0 ? _a : []), { eyes: result.eyes, renderer: result.renderer }]);
|
|
101
|
+
});
|
|
91
102
|
return results;
|
|
92
103
|
}),
|
|
93
|
-
checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, client, target: driver, spec, signal: controller.signal, logger }),
|
|
94
|
-
// close only once
|
|
95
104
|
close: utils.general.wrap((0, close_1.makeClose)({ storage, target: driver, logger }), async (close, options) => {
|
|
96
|
-
|
|
97
|
-
return [];
|
|
98
|
-
closed = true;
|
|
105
|
+
running = false;
|
|
99
106
|
return close(options);
|
|
100
107
|
}),
|
|
101
|
-
// abort only once
|
|
102
108
|
abort: utils.general.wrap((0, abort_1.makeAbort)({ storage, target: driver, spec, controller, logger }), async (abort, options) => {
|
|
103
|
-
|
|
104
|
-
return [];
|
|
105
|
-
aborted = true;
|
|
109
|
+
running = false;
|
|
106
110
|
return abort(options);
|
|
107
111
|
}),
|
|
112
|
+
getResults: (0, get_results_1.makeGetResults)({ storage, logger }),
|
|
108
113
|
};
|
|
109
114
|
});
|
|
110
115
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
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.extractBrokerUrl = void 0;
|
|
27
|
+
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
async function extractBrokerUrl({ driver, logger, }) {
|
|
29
|
+
if (!driver.isNative)
|
|
30
|
+
return null;
|
|
31
|
+
logger.log('Broker url extraction is started');
|
|
32
|
+
const element = await driver.element({ type: 'accessibility id', selector: 'Applitools_View' });
|
|
33
|
+
if (!element)
|
|
34
|
+
return null;
|
|
35
|
+
try {
|
|
36
|
+
let result;
|
|
37
|
+
do {
|
|
38
|
+
result = JSON.parse(await element.getText());
|
|
39
|
+
if (result.nextPath) {
|
|
40
|
+
logger.log('Broker url was extraction finished successfully with value', result.nextPath);
|
|
41
|
+
return result.nextPath;
|
|
42
|
+
}
|
|
43
|
+
await utils.general.sleep(1000);
|
|
44
|
+
} while (!result.error);
|
|
45
|
+
logger.error('Broker url extraction has failed with error', result.error);
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.extractBrokerUrl = extractBrokerUrl;
|
|
@@ -24,8 +24,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.generateSafeSelectors = void 0;
|
|
27
|
-
const snippets = __importStar(require("@applitools/snippets"));
|
|
28
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
const { addElementIds, cleanupElementIds } = require('@applitools/snippets');
|
|
29
29
|
async function generateSafeSelectors({ context, elementReferences, }) {
|
|
30
30
|
const mapping = {
|
|
31
31
|
elements: [],
|
|
@@ -36,14 +36,19 @@ async function generateSafeSelectors({ context, elementReferences, }) {
|
|
|
36
36
|
mapping.elements.push(elements);
|
|
37
37
|
mapping.ids.push(Array(elements.length).fill(utils.general.guid()));
|
|
38
38
|
}
|
|
39
|
-
const generatedSelectors = await context.execute(
|
|
39
|
+
const generatedSelectors = await context.execute(addElementIds, [
|
|
40
|
+
mapping.elements.flat(),
|
|
41
|
+
mapping.ids.flat(),
|
|
42
|
+
]);
|
|
40
43
|
let offset = 0;
|
|
41
44
|
const selectors = mapping.elements.map((elements, index) => {
|
|
42
45
|
if (elements.length === 0)
|
|
43
46
|
return { safeSelector: null, originalSelector: null, elementReference: elementReferences[index] };
|
|
44
47
|
const safeSelector = generatedSelectors[offset].reduce((selector, value) => {
|
|
45
|
-
return selector
|
|
46
|
-
|
|
48
|
+
return utils.types.isObject(selector)
|
|
49
|
+
? { ...selector, shadow: { type: 'css', selector: value } }
|
|
50
|
+
: { type: 'css', selector: value };
|
|
51
|
+
}, undefined);
|
|
47
52
|
offset += elements.length;
|
|
48
53
|
return { safeSelector, originalSelector: elements[0].commonSelector, elementReference: elementReferences[index] };
|
|
49
54
|
});
|
|
@@ -54,7 +59,7 @@ async function generateSafeSelectors({ context, elementReferences, }) {
|
|
|
54
59
|
async function cleanupGeneratedSelectors() {
|
|
55
60
|
if (!mapping.elements.length)
|
|
56
61
|
return;
|
|
57
|
-
await context.execute(
|
|
62
|
+
await context.execute(cleanupElementIds, [mapping.elements.flat()]);
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
exports.generateSafeSelectors = generateSafeSelectors;
|
|
@@ -24,45 +24,44 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.extractCrossFrames = exports.deserializeDomSnapshot = exports.takeDomSnapshot = void 0;
|
|
27
|
-
const dom_snapshot_1 = require("@applitools/dom-snapshot");
|
|
28
27
|
const utils = __importStar(require("@applitools/utils"));
|
|
28
|
+
const { getProcessPagePoll, getPollResult, getProcessPagePollForIE, getPollResultForIE, } = require('@applitools/dom-snapshot');
|
|
29
29
|
async function takeDomSnapshot({ context, settings, logger, }) {
|
|
30
30
|
var _a;
|
|
31
31
|
const driver = context.driver;
|
|
32
|
-
const
|
|
33
|
-
const {
|
|
34
|
-
const arg = {
|
|
35
|
-
dontFetchResources: settings === null || settings === void 0 ? void 0 : settings.disableBrowserFetching,
|
|
36
|
-
skipResources: settings === null || settings === void 0 ? void 0 : settings.skipResources,
|
|
37
|
-
removeReverseProxyURLPrefixes: Boolean(process.env.APPLITOOLS_SCRIPT_REMOVE_REVERSE_PROXY_URL_PREFIXES),
|
|
38
|
-
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)),
|
|
39
|
-
serializeResources: true,
|
|
40
|
-
compressResources: false,
|
|
41
|
-
showLogs: settings === null || settings === void 0 ? void 0 : settings.showLogs,
|
|
42
|
-
};
|
|
43
|
-
const scripts = {
|
|
44
|
-
main: canExecuteOnlyFunctionScripts
|
|
45
|
-
? require('@applitools/dom-snapshot').processPagePoll
|
|
46
|
-
: `return (${isLegacyBrowser ? await (0, dom_snapshot_1.getProcessPagePollForIE)() : await (0, dom_snapshot_1.getProcessPagePoll)()}).apply(null, arguments);`,
|
|
47
|
-
poll: canExecuteOnlyFunctionScripts
|
|
48
|
-
? require('@applitools/dom-snapshot').pollResult
|
|
49
|
-
: `return (${isLegacyBrowser ? await (0, dom_snapshot_1.getPollResultForIE)() : await (0, dom_snapshot_1.getPollResult)()}).apply(null, arguments);`,
|
|
50
|
-
};
|
|
51
|
-
const cookies = driver.features.allCookies ? await driver.getCookies().catch(() => []) : [];
|
|
52
|
-
const snapshot = await takeContextDomSnapshot({ context });
|
|
32
|
+
const cookies = ((_a = driver.features) === null || _a === void 0 ? void 0 : _a.allCookies) ? await driver.getCookies().catch(() => []) : [];
|
|
33
|
+
const snapshot = deserializeDomSnapshot({ snapshot: await takeContextDomSnapshot({ context }) });
|
|
53
34
|
snapshot.cookies = cookies;
|
|
54
|
-
return
|
|
35
|
+
return snapshot;
|
|
55
36
|
async function takeContextDomSnapshot({ context }) {
|
|
56
37
|
// logger.log(`taking dom snapshot. ${context._reference ? `context referece: ${JSON.stringify(context._reference)}` : ''}`)
|
|
57
|
-
var _a, _b;
|
|
58
|
-
if (!driver.features.allCookies) {
|
|
38
|
+
var _a, _b, _c, _d, _e, _f;
|
|
39
|
+
if (!((_a = driver.features) === null || _a === void 0 ? void 0 : _a.allCookies)) {
|
|
59
40
|
cookies.push(...(await context.getCookies()));
|
|
60
41
|
}
|
|
42
|
+
const isLegacyBrowser = driver.isIE || driver.isEdgeLegacy;
|
|
43
|
+
const arg = {
|
|
44
|
+
dontFetchResources: settings === null || settings === void 0 ? void 0 : settings.disableBrowserFetching,
|
|
45
|
+
skipResources: settings === null || settings === void 0 ? void 0 : settings.skipResources,
|
|
46
|
+
removeReverseProxyURLPrefixes: Boolean(process.env.APPLITOOLS_SCRIPT_REMOVE_REVERSE_PROXY_URL_PREFIXES),
|
|
47
|
+
chunkByteLength: (_b = settings === null || settings === void 0 ? void 0 : settings.chunkByteLength) !== null && _b !== void 0 ? _b : (Number(process.env.APPLITOOLS_SCRIPT_RESULT_MAX_BYTE_LENGTH) || (driver.isIOS ? 100000 : 250 * 1024 * 1024)),
|
|
48
|
+
serializeResources: true,
|
|
49
|
+
compressResources: false,
|
|
50
|
+
showLogs: settings === null || settings === void 0 ? void 0 : settings.showLogs,
|
|
51
|
+
};
|
|
52
|
+
const scripts = {
|
|
53
|
+
main: ((_c = driver.features) === null || _c === void 0 ? void 0 : _c.canExecuteOnlyFunctionScripts)
|
|
54
|
+
? require('@applitools/dom-snapshot').processPagePoll
|
|
55
|
+
: `return (${isLegacyBrowser ? await getProcessPagePollForIE() : await getProcessPagePoll()}).apply(null, arguments);`,
|
|
56
|
+
poll: ((_d = driver.features) === null || _d === void 0 ? void 0 : _d.canExecuteOnlyFunctionScripts)
|
|
57
|
+
? require('@applitools/dom-snapshot').pollResult
|
|
58
|
+
: `return (${isLegacyBrowser ? await getPollResultForIE() : await getPollResult()}).apply(null, arguments);`,
|
|
59
|
+
};
|
|
61
60
|
const snapshot = await context.executePoll(scripts, {
|
|
62
61
|
main: arg,
|
|
63
62
|
poll: arg,
|
|
64
|
-
executionTimeout: (
|
|
65
|
-
pollTimeout: (
|
|
63
|
+
executionTimeout: (_e = settings === null || settings === void 0 ? void 0 : settings.executionTimeout) !== null && _e !== void 0 ? _e : 5 * 60 * 1000,
|
|
64
|
+
pollTimeout: (_f = settings === null || settings === void 0 ? void 0 : settings.pollTimeout) !== null && _f !== void 0 ? _f : 200,
|
|
66
65
|
});
|
|
67
66
|
const crossFrames = extractCrossFrames({ snapshot, logger });
|
|
68
67
|
for (const { reference, parentSnapshot, cdtNode } of crossFrames) {
|
|
@@ -88,16 +87,17 @@ async function takeDomSnapshot({ context, settings, logger, }) {
|
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
logger.log(`dom snapshot cdt length: ${snapshot.cdt.length}`);
|
|
91
|
-
logger.log(`blobs urls (${snapshot.blobs.length}):`, JSON.stringify(snapshot.blobs.map(({ url }) => url)));
|
|
92
|
-
logger.log(`resource urls (${snapshot.resourceUrls.length}):`, JSON.stringify(snapshot.resourceUrls));
|
|
90
|
+
logger.log(`blobs urls (${snapshot.blobs.length}):`, JSON.stringify(snapshot.blobs.map(({ url }) => url)));
|
|
91
|
+
logger.log(`resource urls (${snapshot.resourceUrls.length}):`, JSON.stringify(snapshot.resourceUrls));
|
|
93
92
|
return snapshot;
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
exports.takeDomSnapshot = takeDomSnapshot;
|
|
97
96
|
function deserializeDomSnapshot({ snapshot }) {
|
|
97
|
+
const { blobs, selector: _, crossFrames: __, ...rest } = snapshot;
|
|
98
98
|
const deserializedSnapshot = {
|
|
99
|
-
...
|
|
100
|
-
resourceContents:
|
|
99
|
+
...rest,
|
|
100
|
+
resourceContents: blobs.reduce((resourceContents, blob) => {
|
|
101
101
|
if (blob.value === undefined)
|
|
102
102
|
return { ...resourceContents, [blob.url]: blob };
|
|
103
103
|
else
|
|
@@ -105,13 +105,10 @@ function deserializeDomSnapshot({ snapshot }) {
|
|
|
105
105
|
}, {}),
|
|
106
106
|
frames: snapshot.frames.map(frameSnapshot => deserializeDomSnapshot({ snapshot: frameSnapshot })),
|
|
107
107
|
};
|
|
108
|
-
delete deserializedSnapshot.blobs;
|
|
109
|
-
delete deserializedSnapshot.selector;
|
|
110
|
-
delete deserializedSnapshot.crossFrames;
|
|
111
108
|
return deserializedSnapshot;
|
|
112
109
|
}
|
|
113
110
|
exports.deserializeDomSnapshot = deserializeDomSnapshot;
|
|
114
|
-
function extractCrossFrames({ snapshot, parent = null, logger }) {
|
|
111
|
+
function extractCrossFrames({ snapshot, parent = null, logger, }) {
|
|
115
112
|
var _a;
|
|
116
113
|
const crossFrames = [snapshot, ...((_a = snapshot.frames) !== null && _a !== void 0 ? _a : [])].flatMap((snapshot, index) => {
|
|
117
114
|
var _a;
|
|
@@ -123,7 +120,11 @@ function extractCrossFrames({ snapshot, parent = null, logger }) {
|
|
|
123
120
|
return [
|
|
124
121
|
...crossFrames,
|
|
125
122
|
...(index > 0
|
|
126
|
-
? extractCrossFrames({
|
|
123
|
+
? extractCrossFrames({
|
|
124
|
+
snapshot,
|
|
125
|
+
parent: { reference: { type: 'css', selector: snapshot.selector }, parent },
|
|
126
|
+
logger,
|
|
127
|
+
})
|
|
127
128
|
: []),
|
|
128
129
|
];
|
|
129
130
|
});
|
|
@@ -38,10 +38,10 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
38
38
|
var _a, _b, _c, _d;
|
|
39
39
|
const currentContext = driver.currentContext;
|
|
40
40
|
const waitBeforeCapture = async () => {
|
|
41
|
-
if (
|
|
41
|
+
if (utils.types.isFunction(settings.waitBeforeCapture)) {
|
|
42
42
|
await settings.waitBeforeCapture();
|
|
43
43
|
}
|
|
44
|
-
else {
|
|
44
|
+
else if (settings.waitBeforeCapture) {
|
|
45
45
|
await utils.general.sleep(settings.waitBeforeCapture);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
@@ -55,7 +55,7 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
55
55
|
}
|
|
56
56
|
const isStrictBreakpoints = utils.types.isArray(settings.layoutBreakpoints);
|
|
57
57
|
const requiredWidths = await settings.renderers.reduce(async (prev, renderer, index) => {
|
|
58
|
-
const { name, width } = await extractRendererInfo({ renderer });
|
|
58
|
+
const { name, width } = (await extractRendererInfo({ renderer }));
|
|
59
59
|
const requiredWidths = await prev;
|
|
60
60
|
const requiredWidth = isStrictBreakpoints
|
|
61
61
|
? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints, value: width })
|
|
@@ -128,21 +128,17 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
|
|
|
128
128
|
async function extractRendererInfo({ renderer }) {
|
|
129
129
|
if (utils.types.has(renderer, ['width', 'height'])) {
|
|
130
130
|
const { name, width, height } = renderer;
|
|
131
|
-
return { name, width, height };
|
|
131
|
+
return { name: name !== null && name !== void 0 ? name : 'default', width, height };
|
|
132
132
|
}
|
|
133
|
-
else {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
const { deviceName, screenOrientation = 'portrait' } = info;
|
|
144
|
-
const size = devices[deviceName][screenOrientation];
|
|
145
|
-
return { name: deviceName, screenOrientation, ...size };
|
|
133
|
+
else if (utils.types.has(renderer, 'chromeEmulationInfo')) {
|
|
134
|
+
const devices = await provides.getChromeEmulationDevices();
|
|
135
|
+
const { deviceName, screenOrientation = 'portrait' } = renderer.chromeEmulationInfo;
|
|
136
|
+
return { name: deviceName, screenOrientation, ...devices[deviceName][screenOrientation] };
|
|
137
|
+
}
|
|
138
|
+
else if (utils.types.has(renderer, 'iosDeviceInfo')) {
|
|
139
|
+
const devices = await provides.getIOSDevices();
|
|
140
|
+
const { deviceName, screenOrientation = 'portrait' } = renderer.iosDeviceInfo;
|
|
141
|
+
return { name: deviceName, screenOrientation, ...devices[deviceName][screenOrientation] };
|
|
146
142
|
}
|
|
147
143
|
}
|
|
148
144
|
}
|
|
@@ -18,7 +18,7 @@ exports.takeSnapshots = void 0;
|
|
|
18
18
|
const take_dom_snapshots_1 = require("./take-dom-snapshots");
|
|
19
19
|
const take_vhses_1 = require("./take-vhses");
|
|
20
20
|
const nml_client_1 = require("@applitools/nml-client");
|
|
21
|
-
const extract_broker_url_1 = require("
|
|
21
|
+
const extract_broker_url_1 = require("./extract-broker-url");
|
|
22
22
|
__exportStar(require("./take-dom-snapshots"), exports);
|
|
23
23
|
__exportStar(require("./take-vhses"), exports);
|
|
24
24
|
async function takeSnapshots({ driver, settings, hooks, provides, logger, }) {
|
|
@@ -26,9 +26,9 @@ async function takeSnapshots({ driver, settings, hooks, provides, logger, }) {
|
|
|
26
26
|
return (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, settings, hooks, provides, logger });
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
|
-
const brokerUrl = await (0, extract_broker_url_1.extractBrokerUrl)(driver);
|
|
29
|
+
const brokerUrl = await (0, extract_broker_url_1.extractBrokerUrl)({ driver, logger });
|
|
30
30
|
if (brokerUrl) {
|
|
31
|
-
return (0, nml_client_1.takeSnapshots)({ url: brokerUrl, settings, logger });
|
|
31
|
+
return (await (0, nml_client_1.takeSnapshots)({ url: brokerUrl, settings, logger }));
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
return (0, take_vhses_1.takeVHSes)({ driver, settings, hooks, logger });
|