@applitools/eyes-testcafe
Version:
Applitools Eyes SDK for TestCafe
226 lines (225 loc) • 10.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformCheckSettings = exports.transformConfig = exports.LegacyTestCafeEyesMixin = void 0;
const core_1 = require("@applitools/core");
const eyes = require("@applitools/eyes");
const utils = require("@applitools/utils");
const fs = require("fs");
const path = require("path");
const spec = require("./spec-driver");
function LegacyTestCafeEyesMixin(Eyes) {
return class TestCafeEyes extends Eyes {
constructor(runnerOrConfigOrOptions, configOrRunner) {
var _a, _b, _c;
if (utils.types.isNull(runnerOrConfigOrOptions) || utils.types.has(runnerOrConfigOrOptions, 'configPath')) {
const testcafeConfig = utils.config.getConfig({
paths: (runnerOrConfigOrOptions === null || runnerOrConfigOrOptions === void 0 ? void 0 : runnerOrConfigOrOptions.configPath) ? [runnerOrConfigOrOptions.configPath] : undefined,
params: ['failTestcafeOnDiff'],
});
const runner = (_a = runnerOrConfigOrOptions === null || runnerOrConfigOrOptions === void 0 ? void 0 : runnerOrConfigOrOptions.runner) !== null && _a !== void 0 ? _a : new eyes.VisualGridRunner({
testConcurrency: (_c = (_b = testcafeConfig.concurrency) !== null && _b !== void 0 ? _b : testcafeConfig.testConcurrency) !== null && _c !== void 0 ? _c : 1,
});
super(runner, transformConfig(testcafeConfig));
this._testcafeConfig = testcafeConfig;
}
else {
super(runnerOrConfigOrOptions, configOrRunner);
}
}
async open(driverOrConfigOrAppNameOrOptions, configOrAppNameOrTestName, testNameOrViewportSize, viewportSizeOrSessionType, sessionType) {
var _a;
let driver, config;
if (spec.isDriver(driverOrConfigOrAppNameOrOptions)) {
driver = driverOrConfigOrAppNameOrOptions;
config = utils.types.isString(configOrAppNameOrTestName)
? {
appName: configOrAppNameOrTestName,
testName: testNameOrViewportSize,
viewportSize: viewportSizeOrSessionType,
sessionType,
}
: configOrAppNameOrTestName;
}
else if (utils.types.has(driverOrConfigOrAppNameOrOptions, 't')) {
const { t, ...testcafeConfig } = driverOrConfigOrAppNameOrOptions;
this._testcafeConfig = { ...this._testcafeConfig, ...testcafeConfig };
driver = t;
config = transformConfig(this._testcafeConfig);
}
else {
config = utils.types.isString(configOrAppNameOrTestName)
? {
appName: configOrAppNameOrTestName,
testName: testNameOrViewportSize,
viewportSize: viewportSizeOrSessionType,
sessionType,
}
: configOrAppNameOrTestName;
}
if ((_a = this._testcafeConfig) === null || _a === void 0 ? void 0 : _a.showLogs)
this.setLogHandler({ type: 'console' });
if (driver) {
// driver health check, re: https://trello.com/c/xNCZNfPi
await spec
.executeScript(driver, () => true)
.catch(() => {
throw new Error(`The browser is in an invalid state due to JS errors on the page that TestCafe is unable to handle. Try running the test with TestCafe's --skip-js-errors option enabled: https://devexpress.github.io/testcafe/documentation/reference/configuration-file.html#skipjserrors`);
});
config;
return super.open(driver, config);
}
else {
return super.open(config);
}
}
async checkWindow(nameOrSetting, timeout, fully = true) {
if (utils.types.isObject(nameOrSetting)) {
return super.check(transformCheckSettings(nameOrSetting));
}
return super.checkWindow(nameOrSetting, timeout, fully);
}
async close(throwErr = true) {
var _a, _b;
return super.close(throwErr && ((_b = (_a = this._testcafeConfig) === null || _a === void 0 ? void 0 : _a.failTestcafeOnDiff) !== null && _b !== void 0 ? _b : true));
}
async waitForResults(throwErr = true) {
var _a, _b, _c;
const resultsSummary = await this.runner.getAllTestResults(throwErr && ((_b = (_a = this._testcafeConfig) === null || _a === void 0 ? void 0 : _a.failTestcafeOnDiff) !== null && _b !== void 0 ? _b : true));
if ((_c = this._testcafeConfig) === null || _c === void 0 ? void 0 : _c.tapDirPath) {
const results = resultsSummary.getAllResults().map(r => r.getTestResults());
const formatted = core_1.formatters.toHierarchicTAPString(results, {
includeSubTests: false,
markNewAsPassed: true,
});
fs.writeFileSync(path.resolve(this._testcafeConfig.tapDirPath, 'eyes.tap'), formatted);
}
return resultsSummary;
}
};
}
exports.LegacyTestCafeEyesMixin = LegacyTestCafeEyesMixin;
function transformConfig(options) {
const config = { ...options };
if (options.concurrency)
config.concurrentSessions = options.concurrency;
if (options.envName) {
config.environmentName = options.envName;
delete config.envName;
}
if (options.browser) {
config.browsersInfo = utils.types.isArray(options.browser) ? options.browser : [options.browser];
delete config.browser;
}
if (options.batchId ||
options.batchName ||
options.notifyOnCompletion ||
process.env.APPLITOOLS_NOTIFY_ON_COMPLETION) {
config.batch = {
id: options.batchId,
name: options.batchName,
notifyOnCompletion: options.notifyOnCompletion || !!process.env.APPLITOOLS_NOTIFY_ON_COMPLETION,
};
delete config.batchId;
delete config.batchName;
delete config.notifyOnCompletion;
}
if (options.matchLevel || options.ignoreCaret || options.ignoreDisplacements || options.accessibilityValidation) {
config.defaultMatchSettings = {
ignoreCaret: options.ignoreCaret,
matchLevel: options.matchLevel,
ignoreDisplacements: options.ignoreDisplacements,
accessibilitySettings: options.accessibilityValidation,
};
delete config.ignoreCaret;
delete config.matchLevel;
delete config.ignoreDisplacements;
delete config.accessibilityValidation;
}
if (utils.types.isString(options.proxy)) {
config.proxy = { url: options.proxy };
}
return config;
}
exports.transformConfig = transformConfig;
function transformCheckSettings(options) {
var _a;
const settings = { ...options };
settings.name = options.tag;
settings.hooks = options.scriptHooks;
settings.fully = (_a = options.fully) !== null && _a !== void 0 ? _a : options.target !== 'region';
if (options.target && options.target === 'region' && options.selector) {
settings.region = options.selector;
}
if (options.accessibility) {
const accessibilityRegions = utils.types.isArray(options.accessibility)
? options.accessibility
: [options.accessibility];
settings.accessibilityRegions = accessibilityRegions.map(accessibilityRegion => {
const { accessibilityType, ...region } = accessibilityRegion;
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return { region: region.selector, accessibilityType };
}
else {
return { region, accessibilityType };
}
});
}
if (options.floating) {
const floatingRegions = utils.types.isArray(options.floating) ? options.floating : [options.floating];
settings.floatingRegions = floatingRegions.map(floatingRegion => {
const { maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset, ...region } = floatingRegion;
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return { maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset, region: region.selector };
}
else {
return { maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset, region };
}
});
}
if (options.ignore) {
const ignoreRegions = utils.types.isArray(options.ignore) ? options.ignore : [options.ignore];
settings.ignoreRegions = ignoreRegions.map(region => {
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return region.selector;
}
else {
return region;
}
});
}
if (options.layout) {
const layoutRegions = utils.types.isArray(options.layout) ? options.layout : [options.layout];
settings.layoutRegions = layoutRegions.map(region => {
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return region.selector;
}
else {
return region;
}
});
}
if (options.strict) {
const strictRegions = utils.types.isArray(options.strict) ? options.strict : [options.strict];
settings.strictRegions = strictRegions.map(region => {
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return region.selector;
}
else {
return region;
}
});
}
if (options.content) {
const contentRegions = utils.types.isArray(options.content) ? options.content : [options.content];
settings.contentRegions = contentRegions.map(region => {
if (utils.types.has(region, 'selector') && !utils.types.has(region, 'type')) {
return region.selector;
}
else {
return region;
}
});
}
return settings;
}
exports.transformCheckSettings = transformCheckSettings;