@applitools/core
Advanced tools
Comparing version 4.31.4 to 4.32.0
@@ -40,4 +40,9 @@ "use strict"; | ||
const format_results_1 = require("../utils/format-results"); | ||
function getConsoleLogLimit() { | ||
var _a; | ||
return (_a = utils.general.getEnvValue('OFFLINE_LOG_LIMIT', 'number')) !== null && _a !== void 0 ? _a : 20; | ||
} | ||
async function runOfflineSnapshots(options) { | ||
var _a; | ||
const limitConsoleLogs = getConsoleLogLimit(); | ||
if (!options.offlineLocationPath) | ||
@@ -84,3 +89,4 @@ throw new Error('offlineLocationPath is required'); | ||
logger.log('running tests', testFolders); | ||
const results = await Promise.all(testFolders.map(async (testFolder) => { | ||
const messages = []; | ||
const testPromises = testFolders.map(async (testFolder) => { | ||
const testLogger = logger.extend({ tags: [testFolder] }); | ||
@@ -92,3 +98,14 @@ const testPath = path_1.default.join(offlineLocationPath, testFolder); | ||
const openSettings = (0, merge_configs_1.mergeConfigs)(fileOpenSettings, options.config.open); | ||
logger.console.log(`Running test: ${openSettings.testName} (${formatEnvironment(openSettings.environment)})`); | ||
messages.push(`Running test: ${openSettings.testName} (${formatEnvironment(openSettings.environment)})`); | ||
return { testPath, openSettings, testLogger }; | ||
}); | ||
const preparedTests = await Promise.all(testPromises); | ||
if (messages.length > limitConsoleLogs) { | ||
const slice = messages.slice(0, limitConsoleLogs); | ||
logger.console.log(slice.join('\n') + `\n... ${messages.length - limitConsoleLogs} more tests`); | ||
} | ||
else { | ||
logger.console.log(messages.join('\n')); | ||
} | ||
const results = await Promise.all(preparedTests.map(async ({ testPath, openSettings, testLogger }) => { | ||
return runTest(testPath, openSettings, testLogger); | ||
@@ -121,19 +138,25 @@ })); | ||
}); | ||
const checkFolders = (await fs_1.default.promises.readdir(testPath)).filter(folderpath => folderpath.startsWith('check-')); | ||
logger.log('running checks for test', testPath, ':', checkFolders); | ||
const targets = await Promise.all(checkFolders.map(async (checkFolder) => { | ||
const snapshot = await fs_1.default.promises | ||
.readFile(path_1.default.resolve(testPath, checkFolder, 'snapshot.json'), 'utf-8') | ||
.then(JSON.parse); | ||
snapshot.settings.environment.environmentId = utils.general.guid(); | ||
return snapshot; | ||
})); | ||
await uploadResources(targets, logger); | ||
// logger.log('resource hashes for test', testFolder, ':', resourceHashes) | ||
logger.log('uploaded resources for test', testPath); | ||
await Promise.all(targets.map((target, index) => runCheck(eyes, target, index, logger))); | ||
const fileCloseSettings = await fs_1.default.promises.readFile(path_1.default.resolve(testPath, 'close.json'), 'utf-8').then(JSON.parse); | ||
const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, options.config.close); | ||
await eyes.close({ settings: closeSettings }); | ||
logger.log('done running test', logger); | ||
const closeSettingsPath = path_1.default.resolve(testPath, 'close.json'); | ||
if (fs_1.default.existsSync(closeSettingsPath)) { | ||
const checkFolders = (await fs_1.default.promises.readdir(testPath)).filter(folderpath => folderpath.startsWith('check-')); | ||
logger.log('running checks for test', testPath, ':', checkFolders); | ||
const targets = await Promise.all(checkFolders.map(async (checkFolder) => { | ||
const snapshot = await fs_1.default.promises | ||
.readFile(path_1.default.resolve(testPath, checkFolder, 'snapshot.json'), 'utf-8') | ||
.then(JSON.parse); | ||
snapshot.settings.environment.environmentId = utils.general.guid(); | ||
return snapshot; | ||
})); | ||
await uploadResources(targets, logger); | ||
// logger.log('resource hashes for test', testFolder, ':', resourceHashes) | ||
logger.log('uploaded resources for test', testPath); | ||
await Promise.all(targets.map((target, index) => runCheck(eyes, target, index, logger))); | ||
const fileCloseSettings = await fs_1.default.promises.readFile(closeSettingsPath, 'utf-8').then(JSON.parse); | ||
const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, options.config.close); | ||
await eyes.close({ settings: closeSettings }); | ||
} | ||
else { | ||
await eyes.abort(); | ||
} | ||
logger.log('done running test', testPath); | ||
return { batchId: openSettings.batch.id, results: (await eyes.getResults({ logger }))[0] }; | ||
@@ -242,12 +265,12 @@ } | ||
if (passedOrNew.length > 0) { | ||
outputStr += testResultsOutput(passedOrNew, warnForUnsavedNewTests); | ||
outputStr += testResultsOutput(passedOrNew, warnForUnsavedNewTests, 'Passed'); | ||
} | ||
if (failedTests.length > 0) { | ||
outputStr += testResultsOutput(failedTests, warnForUnsavedNewTests); | ||
outputStr += testResultsOutput(failedTests, warnForUnsavedNewTests, 'Failed'); | ||
} | ||
if (unresolved.length > 0) { | ||
outputStr += testResultsOutput(unresolved, warnForUnsavedNewTests); | ||
outputStr += testResultsOutput(unresolved, warnForUnsavedNewTests, 'Unresolved'); | ||
} | ||
if (aborted.length > 0) { | ||
outputStr += testResultsOutput(aborted, warnForUnsavedNewTests); | ||
outputStr += testResultsOutput(aborted, warnForUnsavedNewTests, 'Aborted'); | ||
} | ||
@@ -316,4 +339,6 @@ if (errors.length) { | ||
} | ||
function testResultsOutput(results, warnForUnsavedNewTests) { | ||
let outputStr = ''; | ||
function testResultsOutput(results, warnForUnsavedNewTests, tag) { | ||
const limitConsoleLogs = getConsoleLogLimit(); | ||
const truncated = []; | ||
let limitCount = 0; | ||
const sortedTestResults = results.sort((a, b) => a.name.localeCompare(b.name)); | ||
@@ -323,18 +348,27 @@ sortedTestResults.forEach(result => { | ||
if (result.isAborted) { | ||
outputStr += `${testTitle}${chalk_1.default.keyword('red')(`Aborted`)}\n`; | ||
const str = `${testTitle}${chalk_1.default.keyword('red')(`Aborted`)}\n`; | ||
truncated.push(str); | ||
} | ||
else if (result.isNew) { | ||
const newResColor = warnForUnsavedNewTests ? 'orange' : 'blue'; | ||
outputStr += `${testTitle}${chalk_1.default.keyword(newResColor)('New')}\n`; | ||
const str = `${testTitle}${chalk_1.default.keyword(newResColor)('New')}\n`; | ||
truncated.push(str); | ||
} | ||
else if (result.status === 'Passed') { | ||
outputStr += `${testTitle}${chalk_1.default.green('Passed')}\n`; | ||
const str = `${testTitle}${chalk_1.default.green('Passed')}\n`; | ||
truncated.push(str); | ||
} | ||
else if (result.status === 'Failed') { | ||
outputStr += `${testTitle}${chalk_1.default.keyword('red')('Failed')}\n`; | ||
const str = `${testTitle}${chalk_1.default.keyword('red')('Failed')}\n`; | ||
truncated.push(str); | ||
} | ||
else { | ||
outputStr += `${testTitle}${chalk_1.default.keyword('orange')(`Unresolved`)}\n`; | ||
const str = `${testTitle}${chalk_1.default.keyword('orange')(`Unresolved`)}\n`; | ||
truncated.push(str); | ||
} | ||
if (limitCount < limitConsoleLogs) | ||
limitCount++; | ||
}); | ||
let outputStr = truncated.slice(0, limitConsoleLogs).join(''); | ||
outputStr += results.length - limitCount > 0 ? `... ${results.length - limitCount} more ${tag} tests` : ''; | ||
outputStr += '\n'; | ||
@@ -341,0 +375,0 @@ return outputStr; |
@@ -42,6 +42,6 @@ "use strict"; | ||
return async function openEyes({ type = defaultType, settings: openSettings, config, target, logger = mainLogger, }) { | ||
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; | ||
var _w, _x, _y, _z, _0; | ||
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; | ||
var _z, _0, _1, _2, _3; | ||
logger = logger.extend(mainLogger, { tags: [`eyes-${type}-${utils.general.shortid()}`] }); | ||
const settings = { ...config === null || config === void 0 ? void 0 : config.open, ...openSettings }; | ||
const settings = { environments: config === null || config === void 0 ? void 0 : config.check.environments, ...config === null || config === void 0 ? void 0 : config.open, ...openSettings }; | ||
const eyesServerSettings = (0, populate_eyes_server_settings_1.populateEyesServerSettings)(settings); | ||
@@ -52,7 +52,7 @@ logger.mask(eyesServerSettings.apiKey); | ||
settings.batch = { ...batch, ...settings.batch }; | ||
(_b = (_w = settings.batch).id) !== null && _b !== void 0 ? _b : (_w.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`); | ||
(_d = (_x = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_x.buildId = utils.general.getEnvValue('BATCH_BUILD_ID')); | ||
(_e = (_y = settings.batch).name) !== null && _e !== void 0 ? _e : (_y.name = utils.general.getEnvValue('BATCH_NAME')); | ||
(_f = (_z = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_z.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE')); | ||
(_g = (_0 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_0.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean')); | ||
(_b = (_z = settings.batch).id) !== null && _b !== void 0 ? _b : (_z.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`); | ||
(_d = (_0 = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_0.buildId = utils.general.getEnvValue('BATCH_BUILD_ID')); | ||
(_e = (_1 = settings.batch).name) !== null && _e !== void 0 ? _e : (_1.name = utils.general.getEnvValue('BATCH_NAME')); | ||
(_f = (_2 = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_2.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE')); | ||
(_g = (_3 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_3.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean')); | ||
(_h = settings.keepBatchOpen) !== null && _h !== void 0 ? _h : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean')); | ||
@@ -97,2 +97,11 @@ (_j = settings.branchName) !== null && _j !== void 0 ? _j : (settings.branchName = utils.general.getEnvValue('BRANCH')); | ||
const driverUrl = await (driver === null || driver === void 0 ? void 0 : driver.getDriverUrl()); | ||
const multiDeviceTargets = []; | ||
for (const checkEnv of (_u = settings.environments) !== null && _u !== void 0 ? _u : []) { | ||
if (utils.types.has(checkEnv, 'iosDeviceInfo') && ((_v = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _v === void 0 ? void 0 : _v.instrumented)) { | ||
multiDeviceTargets.push({ | ||
deviceInfo: checkEnv.iosDeviceInfo.deviceName, | ||
orientation: (_w = checkEnv.iosDeviceInfo.screenOrientation) !== null && _w !== void 0 ? _w : 'portrait', | ||
}); | ||
} | ||
} | ||
void core.logEvent({ | ||
@@ -105,3 +114,3 @@ settings: { | ||
userTestId: settings.userTestId, | ||
concurrency: (_u = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _u !== void 0 ? _u : core.concurrency, | ||
concurrency: (_x = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _x !== void 0 ? _x : core.concurrency, | ||
environment, | ||
@@ -114,6 +123,7 @@ driver: { | ||
platformVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformVersion, | ||
isApplitoolsLib: (_v = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _v === void 0 ? void 0 : _v.instrumented, | ||
isApplitoolsLib: (_y = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _y === void 0 ? void 0 : _y.instrumented, | ||
isEC: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.isEC, | ||
}, | ||
driverUrl, | ||
multiDeviceTargets, | ||
}, | ||
@@ -120,0 +130,0 @@ }, |
@@ -35,2 +35,3 @@ "use strict"; | ||
const extract_default_environment_1 = require("./utils/extract-default-environment"); | ||
const verify_environment_info_1 = require("./utils/verify-environment-info"); | ||
const abort_controller_1 = require("abort-controller"); | ||
@@ -40,3 +41,3 @@ const utils = __importStar(require("@applitools/utils")); | ||
return async function openEyes({ target, settings, storage = new Map(), logger = mainLogger, }) { | ||
var _a, _b, _c; | ||
var _a, _b, _c, _d; | ||
logger = logger.extend(mainLogger); | ||
@@ -59,2 +60,11 @@ logger.log(`Command "openEyes" is called with ${target ? 'default driver' : ''}`, ...(settings ? ['and settings', settings] : []), storage.size > 0 ? 'and default eyes storage' : ''); | ||
const account = await core.getAccountInfo({ settings, logger }); | ||
const ufgClient = await core.getUFGClient({ | ||
settings: { | ||
...account.ufgServer, | ||
eyesServerUrl: account.eyesServer.eyesServerUrl, | ||
apiKey: account.eyesServer.apiKey, | ||
}, | ||
logger, | ||
}); | ||
await (0, verify_environment_info_1.verifyEnvironmentsInfo)({ environments: (_d = settings.environments) !== null && _d !== void 0 ? _d : [], ufgClient }); | ||
return utils.general.extend({}, eyes => { | ||
@@ -61,0 +71,0 @@ var _a, _b, _c, _d; |
@@ -9,5 +9,6 @@ "use strict"; | ||
const abort_error_1 = require("../errors/abort-error"); | ||
const filterStaleElements_1 = require("./utils/filterStaleElements"); | ||
function makeTakeSnapshots({ core, spec, signal, logger: mainLogger }) { | ||
return async function takeSnapshots({ driver, settings = {}, account, logger = mainLogger, }) { | ||
var _a; | ||
var _a, _b; | ||
logger = logger.extend(mainLogger); | ||
@@ -42,3 +43,3 @@ logger.log('Command "takeSnapshots" is called with settings', settings); | ||
}); | ||
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ | ||
const takeSnapshotsSettings = { | ||
driver, | ||
@@ -59,3 +60,21 @@ settings: { | ||
logger, | ||
}); | ||
}; | ||
try { | ||
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)(takeSnapshotsSettings); | ||
} | ||
catch (err) { | ||
if ((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('stale element')) { | ||
snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ | ||
...takeSnapshotsSettings, | ||
settings: await (0, filterStaleElements_1.removeStaleElementsFromDomSnapshotsSettings)({ | ||
settings: takeSnapshotsSettings.settings, | ||
context: currentContext, | ||
targetElement: elementReferences.target, | ||
}), | ||
}); | ||
} | ||
else { | ||
throw err; | ||
} | ||
} | ||
} | ||
@@ -62,0 +81,0 @@ else { |
{ | ||
"name": "@applitools/core", | ||
"version": "4.31.4", | ||
"version": "4.32.0", | ||
"homepage": "https://applitools.com", | ||
@@ -5,0 +5,0 @@ "bugs": { |
@@ -174,2 +174,3 @@ import type { MaybeArray, Size, Region, ControlledPromise } from '@applitools/utils'; | ||
disableBrokerUrlCache?: boolean; | ||
environments?: Environment[]; | ||
}; |
Sorry, the diff of this file is too big to display
629185
197
9255