testcafe
Version:
Automated browser testing for the modern web development stack.
108 lines • 15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MaximizeWindowCommand = exports.ResizeWindowToFitDeviceCommand = exports.ResizeWindowCommand = exports.TakeScreenshotOnFailCommand = exports.TakeElementScreenshotCommand = exports.TakeScreenshotCommand = exports.TakeScreenshotBaseCommand = void 0;
const type_1 = __importDefault(require("./type"));
const base_1 = require("./base");
const options_1 = require("./options");
const initializers_1 = require("./validations/initializers");
const argument_1 = require("./validations/argument");
const utils_1 = require("../../screenshots/utils");
const lodash_1 = require("lodash");
function initResizeToFitDeviceOptions(name, val, initOptions, validate = true) {
return new options_1.ResizeToFitDeviceOptions(val, validate);
}
function initElementScreenshotOptions(name, val, initOptions, validate = true) {
return new options_1.ElementScreenshotOptions(val, validate);
}
// Commands
class TakeScreenshotBaseCommand extends base_1.ActionCommandBase {
constructor(obj, testRun, type, validateProperties) {
super(obj, testRun, type, validateProperties);
this.markSeed = null;
this.markData = '';
}
generateScreenshotMark() {
Object.assign(this, (0, utils_1.generateScreenshotMark)());
}
}
exports.TakeScreenshotBaseCommand = TakeScreenshotBaseCommand;
class TakeScreenshotCommand extends TakeScreenshotBaseCommand {
constructor(obj, testRun, validateProperties) {
super(obj, testRun, type_1.default.takeScreenshot, validateProperties);
}
getAssignableProperties() {
return [
{ name: 'path', type: argument_1.screenshotPathArgument, defaultValue: '' },
{ name: 'pathPattern', type: argument_1.stringArgument, defaultValue: '' },
{ name: 'fullPage', type: argument_1.booleanArgument, defaultValue: void 0 },
{ name: 'thumbnails', type: argument_1.booleanArgument, defaultValue: void 0 },
];
}
}
exports.TakeScreenshotCommand = TakeScreenshotCommand;
TakeScreenshotCommand.methodName = (0, lodash_1.camelCase)(type_1.default.takeScreenshot);
class TakeElementScreenshotCommand extends TakeScreenshotBaseCommand {
constructor(obj, testRun, validateProperties) {
super(obj, testRun, type_1.default.takeElementScreenshot, validateProperties);
}
getAssignableProperties() {
return [
{ name: 'selector', init: initializers_1.initSelector, required: true },
{ name: 'options', init: initElementScreenshotOptions, required: true },
{ name: 'path', type: argument_1.screenshotPathArgument, defaultValue: '' },
];
}
}
exports.TakeElementScreenshotCommand = TakeElementScreenshotCommand;
TakeElementScreenshotCommand.methodName = (0, lodash_1.camelCase)(type_1.default.takeElementScreenshot);
class TakeScreenshotOnFailCommand extends TakeScreenshotBaseCommand {
constructor(obj, testRun) {
super(obj, testRun, type_1.default.takeScreenshotOnFail);
}
getAssignableProperties() {
return [
{ name: 'fullPage', type: argument_1.booleanArgument, defaultValue: false },
{ name: 'failedActionId', type: argument_1.stringArgument },
];
}
}
exports.TakeScreenshotOnFailCommand = TakeScreenshotOnFailCommand;
TakeScreenshotOnFailCommand.methodName = (0, lodash_1.camelCase)(type_1.default.takeScreenshotOnFail);
class ResizeWindowCommand extends base_1.ActionCommandBase {
constructor(obj, testRun) {
super(obj, testRun, type_1.default.resizeWindow);
}
getAssignableProperties() {
return [
{ name: 'width', type: argument_1.positiveIntegerArgument, required: true },
{ name: 'height', type: argument_1.positiveIntegerArgument, required: true },
];
}
}
exports.ResizeWindowCommand = ResizeWindowCommand;
ResizeWindowCommand.methodName = (0, lodash_1.camelCase)(type_1.default.resizeWindow);
class ResizeWindowToFitDeviceCommand extends base_1.ActionCommandBase {
constructor(obj, testRun, validateProperties) {
super(obj, testRun, type_1.default.resizeWindowToFitDevice, validateProperties);
}
getAssignableProperties() {
return [
{ name: 'device', type: argument_1.resizeWindowDeviceArgument, required: true },
{ name: 'options', type: argument_1.actionOptions, init: initResizeToFitDeviceOptions, required: true },
];
}
}
exports.ResizeWindowToFitDeviceCommand = ResizeWindowToFitDeviceCommand;
ResizeWindowToFitDeviceCommand.methodName = (0, lodash_1.camelCase)(type_1.default.resizeWindowToFitDevice);
class MaximizeWindowCommand extends base_1.ActionCommandBase {
constructor() {
super();
this.type = type_1.default.maximizeWindow;
}
}
exports.MaximizeWindowCommand = MaximizeWindowCommand;
MaximizeWindowCommand.methodName = (0, lodash_1.camelCase)(type_1.default.maximizeWindow);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1tYW5pcHVsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLGlDQUEyQztBQUMzQyx1Q0FBK0U7QUFDL0UsNkRBQTBEO0FBRTFELHFEQU9nQztBQUVoQyxtREFBaUU7QUFDakUsbUNBQW1DO0FBRW5DLFNBQVMsNEJBQTRCLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFBUSxHQUFHLElBQUk7SUFDMUUsT0FBTyxJQUFJLGtDQUF3QixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLEdBQUcsSUFBSTtJQUMxRSxPQUFPLElBQUksa0NBQXdCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxXQUFXO0FBQ1gsTUFBYSx5QkFBMEIsU0FBUSx3QkFBaUI7SUFDNUQsWUFBYSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0I7UUFDL0MsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFBLDhCQUFzQixHQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0o7QUFYRCw4REFXQztBQUVELE1BQWEscUJBQXNCLFNBQVEseUJBQXlCO0lBR2hFLFlBQWEsR0FBRyxFQUFFLE9B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QUFFLE9BQU8sRUFBRSxrQkFBa0I7UUFDekMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsY0FBSSxDQUFDLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixPQUFPO1lBQ0gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxxQ0FBMEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3BFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsd0JBQWEsRUFBRSxJQUFJLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUMvRixDQUFDO0lBQ04sQ0FBQzs7QUFaTCx3RUFhQztBQVpVLHlDQUFVLEdBQUcsSUFBQSxrQkFBUyxFQUFDLGNBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBY2hFLE1BQWEscUJBQXNCLFNBQVEsd0JBQWlCO0lBR3hEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLGNBQUksQ0FBQyxjQUFjLENBQUM7SUFDcEMsQ0FBQzs7QUFOTCxzREFPQztBQU5VLGdDQUFVLEdBQUcsSUFBQSxrQkFBUyxFQUFDLGNBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUWVBFIGZyb20gJy4vdHlwZSc7XG5pbXBvcnQgeyBBY3Rpb25Db21tYW5kQmFzZSB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBFbGVtZW50U2NyZWVuc2hvdE9wdGlvbnMsIFJlc2l6ZVRvRml0RGV2aWNlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBpbml0U2VsZWN0b3IgfSBmcm9tICcuL3ZhbGlkYXRpb25zL2luaXRpYWxpemVycyc7XG5cbmltcG9ydCB7XG4gICAgYm9vbGVhbkFyZ3VtZW50LFxuICAgIHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LFxuICAgIHNjcmVlbnNob3RQYXRoQXJndW1lbnQsXG4gICAgcmVzaXplV2luZG93RGV2aWNlQXJndW1lbnQsXG4gICAgYWN0aW9uT3B0aW9ucyxcbiAgICBzdHJpbmdBcmd1bWVudCxcbn0gZnJvbSAnLi92YWxpZGF0aW9ucy9hcmd1bWVudCc7XG5cbmltcG9ydCB7IGdlbmVyYXRlU2NyZWVuc2hvdE1hcmsgfSBmcm9tICcuLi8uLi9zY3JlZW5zaG90cy91dGlscyc7XG5pbXBvcnQgeyBjYW1lbENhc2UgfSBmcm9tICdsb2Rhc2gnO1xuXG5mdW5jdGlvbiBpbml0UmVzaXplVG9GaXREZXZpY2VPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IFJlc2l6ZVRvRml0RGV2aWNlT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdEVsZW1lbnRTY3JlZW5zaG90T3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBFbGVtZW50U2NyZWVuc2hvdE9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbi8vIENvbW1hbmRzXG5leHBvcnQgY2xhc3MgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB0eXBlLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCB0eXBlLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuXG4gICAgICAgIHRoaXMubWFya1NlZWQgPSBudWxsO1xuICAgICAgICB0aGlzLm1hcmtEYXRhID0gJyc7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVTY3JlZW5zaG90TWFyayAoKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZ2VuZXJhdGVTY3JlZW5zaG90TWFyaygpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWtlU2NyZWVuc2hvdENvbW1hbmQgZXh0ZW5kcyBUYWtlU2NyZWVuc2hvdEJhc2VDb21tYW5kIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnRha2VTY3JlZW5zaG90KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUudGFrZVNjcmVlbnNob3QsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHR5cGU6IHNjcmVlbnNob3RQYXRoQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogJycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3BhdGhQYXR0ZXJuJywgdHlwZTogc3RyaW5nQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogJycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Z1bGxQYWdlJywgdHlwZTogYm9vbGVhbkFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IHZvaWQgMCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAndGh1bWJuYWlscycsIHR5cGU6IGJvb2xlYW5Bcmd1bWVudCwgZGVmYXVsdFZhbHVlOiB2b2lkIDAgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kIGV4dGVuZHMgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS50YWtlRWxlbWVudFNjcmVlbnNob3QpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS50YWtlRWxlbWVudFNjcmVlbnNob3QsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgaW5pdDogaW5pdEVsZW1lbnRTY3JlZW5zaG90T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB0eXBlOiBzY3JlZW5zaG90UGF0aEFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6ICcnIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFrZVNjcmVlbnNob3RPbkZhaWxDb21tYW5kIGV4dGVuZHMgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS50YWtlU2NyZWVuc2hvdE9uRmFpbCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS50YWtlU2NyZWVuc2hvdE9uRmFpbCk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZnVsbFBhZ2UnLCB0eXBlOiBib29sZWFuQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZhaWxlZEFjdGlvbklkJywgdHlwZTogc3RyaW5nQXJndW1lbnQgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNpemVXaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucmVzaXplV2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4pIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnJlc2l6ZVdpbmRvdyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnd2lkdGgnLCB0eXBlOiBwb3NpdGl2ZUludGVnZXJBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2hlaWdodCcsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUucmVzaXplV2luZG93VG9GaXREZXZpY2UsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZGV2aWNlJywgdHlwZTogcmVzaXplV2luZG93RGV2aWNlQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdFJlc2l6ZVRvRml0RGV2aWNlT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXhpbWl6ZVdpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5tYXhpbWl6ZVdpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9IFRZUEUubWF4aW1pemVXaW5kb3c7XG4gICAgfVxufVxuIl19