aye-spy
Version:
A visual regression tool
95 lines (72 loc) • 3.05 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _seleniumWebdriver = require('selenium-webdriver');
var _seleniumWebdriver2 = _interopRequireDefault(_seleniumWebdriver);
var _scenarioValidator = require('./scenarioValidator');
var _scenarioValidator2 = _interopRequireDefault(_scenarioValidator);
var _progressBar = require('./progressBar');
var _progressBar2 = _interopRequireDefault(_progressBar);
var _executeScript = require('./executeScript');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const onComplete = () => _progressBar2.default.tick();
const onError = () => _progressBar2.default.stop();
const generateSnapShotPromises = (SnapShotter, config) => {
return config.scenarios.reduce((accum, scenario) => {
(0, _scenarioValidator2.default)(scenario);
scenario.viewports.forEach(viewport => {
accum.push(new SnapShotter({
label: scenario.label,
latest: config.latest,
browser: config.browser,
chromeCustomCapabilites: scenario.chromeCustomCapabilites,
mobileDeviceName: scenario.mobileDeviceName,
gridUrl: config.gridUrl,
height: viewport.height,
width: viewport.width,
viewportLabel: viewport.label,
cookies: scenario.cookies,
cropToSelector: scenario.cropToSelector,
removeElements: scenario.removeElements,
hideElements: scenario.hideElements,
waitForElement: scenario.waitForElement,
waitForIFrameElement: scenario.waitForIFrameElement,
url: scenario.url,
onBeforeScript: scenario.onBeforeScript,
onReadyScript: scenario.onReadyScript,
wait: scenario.wait
}, { webdriver: _seleniumWebdriver2.default, By: _seleniumWebdriver.By, until: _seleniumWebdriver.until }, onComplete, onError));
});
return accum;
}, []);
};
function executeOnBeforeSuiteScript(config) {
return (0, _executeScript.executeScript)(config.onBeforeSuiteScript, config).catch(error => {
throw new Error(`❌ Unable to run onBeforeSuite script:\n due to: ${error}`);
});
}
async function getScreenshots(SnapShotter, config) {
return new Promise(async (resolve, reject) => {
if (config.onBeforeSuiteScript) {
try {
await executeOnBeforeSuiteScript(config);
} catch (error) {
onError();
return reject(error);
}
}
const promises = generateSnapShotPromises(SnapShotter, config);
_progressBar2.default.setLength(promises.length);
const requestLimit = config.limitAmountOfParallelScenarios || promises.length;
const iterationsToPerform = Math.ceil(promises.length / requestLimit);
_progressBar2.default.start();
for (let i = 0; i < iterationsToPerform; i++) {
const splice = promises.splice(0, requestLimit);
const executingPromises = splice.map(screenshot => screenshot.takeSnap());
await Promise.all(executingPromises);
}
resolve();
});
}
exports.default = getScreenshots;