testcafe
Version:
Automated browser testing for the modern web development stack.
85 lines • 11.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const process_1 = __importDefault(require("./process"));
const VIDEO_EXTENSION = 'mp4';
const TEMP_VIDEO_FILE_PREFIX = 'tmp-video';
const TEMP_MERGE_FILE_PREFIX = TEMP_VIDEO_FILE_PREFIX + '-merge';
const TEMP_MERGE_CONFIG_FILE_PREFIX = 'config';
const TEMP_MERGE_CONFIG_FILE_EXTENSION = 'txt';
class TestRunVideoRecorder {
constructor({ testRun, test, index }, { path, ffmpegPath, encodingOptions }) {
this.testRun = testRun;
this.test = test;
this.index = index;
this.tempFiles = null;
this.videoRecorder = null;
this.path = path;
this.ffmpegPath = ffmpegPath;
this.encodingOptions = encodingOptions;
this.start = null;
this.timecodes = null;
}
get testRunInfo() {
return {
testIndex: this.index,
fixture: this.test.fixture.name,
test: this.test.name,
timecodes: this.timecodes,
alias: this._connection.browserInfo.alias,
parsedUserAgent: this._connection.browserInfo.parsedUserAgent,
};
}
get hasErrors() {
return !!this.testRun.errs.length;
}
get _connection() {
return this.testRun.browserConnection;
}
async startCapturing() {
await this.videoRecorder.startCapturing();
this.start = Date.now();
}
async finishCapturing() {
await this.videoRecorder.finishCapturing();
}
async init() {
this.tempFiles = this._generateTempNames();
this.videoRecorder = this._createVideoRecorderProcess();
await this.videoRecorder.init();
}
async isVideoSupported() {
const connectionCapabilities = await this._connection.provider.hasCustomActionForBrowser(this._connection.id);
return connectionCapabilities && connectionCapabilities.hasGetVideoFrameData;
}
async isVideoEnabled() {
return !this.test.skip;
}
onTestRunRestart() {
this.timecodes = this.timecodes || [0];
this._addTimeCode();
}
_addTimeCode() {
this.timecodes.push(Date.now() - this.start);
}
_createVideoRecorderProcess() {
return new process_1.default(this.tempFiles.tempVideoPath, this.ffmpegPath, this._connection, this.encodingOptions);
}
_generateTempNames() {
const id = this._connection.id;
const tempFileNames = {
tempVideoPath: `${TEMP_VIDEO_FILE_PREFIX}-${id}.${VIDEO_EXTENSION}`,
tempMergeConfigPath: `${TEMP_MERGE_CONFIG_FILE_PREFIX}-${id}.${TEMP_MERGE_CONFIG_FILE_EXTENSION}`,
tmpMergeName: `${TEMP_MERGE_FILE_PREFIX}-${id}.${VIDEO_EXTENSION}`,
};
for (const [tempFile, tempName] of Object.entries(tempFileNames))
tempFileNames[tempFile] = (0, path_1.join)(this.path, tempName);
return tempFileNames;
}
}
exports.default = TestRunVideoRecorder;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tdmlkZW8tcmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlkZW8tcmVjb3JkZXIvdGVzdC1ydW4tdmlkZW8tcmVjb3JkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBNEI7QUFDNUIsd0RBQTZDO0FBRTdDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU5QixNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQUVqRSxNQUFNLDZCQUE2QixHQUFNLFFBQVEsQ0FBQztBQUNsRCxNQUFNLGdDQUFnQyxHQUFHLEtBQUssQ0FBQztBQUUvQyxNQUFxQixvQkFBb0I7SUFDckMsWUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRTtRQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFNLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFTLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFRLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxHQUFPLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFjLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFRLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxHQUFPLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTztZQUNILFNBQVMsRUFBUSxJQUFJLENBQUMsS0FBSztZQUMzQixPQUFP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QUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUV4RCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUEzRkQsdUNBMkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IFZpZGVvUmVjb3JkZXJQcm9jZXNzIGZyb20gJy4vcHJvY2Vzcyc7XG5cbmNvbnN0IFZJREVPX0VYVEVOU0lPTiA9ICdtcDQnO1xuXG5jb25zdCBURU1QX1ZJREVPX0ZJTEVfUFJFRklYID0gJ3RtcC12aWRlbyc7XG5jb25zdCBURU1QX01FUkdFX0ZJTEVfUFJFRklYID0gVEVNUF9WSURFT19GSUxFX1BSRUZJWCArICctbWVyZ2UnO1xuXG5jb25zdCBURU1QX01FUkdFX0NPTkZJR19GSUxFX1BSRUZJWCAgICA9ICdjb25maWcnO1xuY29uc3QgVEVNUF9NRVJHRV9DT05GSUdfRklMRV9FWFRFTlNJT04gPSAndHh0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1blZpZGVvUmVjb3JkZXIge1xuICAgIGNvbnN0cnVjdG9yICh7IHRlc3RSdW4sIHRlc3QsIGluZGV4IH0sIHsgcGF0aCwgZmZtcGVnUGF0aCwgZW5jb2RpbmdPcHRpb25zIH0pIHtcbiAgICAgICAgdGhpcy50ZXN0UnVuICAgID0gdGVzdFJ1bjtcbiAgICAgICAgdGhpcy50ZXN0ICAgICAgID0gdGVzdDtcbiAgICAgICAgdGhpcy5pbmRleCAgICAgID0gaW5kZXg7XG5cbiAgICAgICAgdGhpcy50ZW1wRmlsZXMgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyID0gbnVsbDtcblxuICAgICAgICB0aGlzLnBhdGggICAgICAgICAgICA9IHBhdGg7XG4gICAgICAgIHRoaXMuZmZtcGVnUGF0aCAgICAgID0gZmZtcGVnUGF0aDtcbiAgICAgICAgdGhpcy5lbmNvZGluZ09wdGlvbnMgPSBlbmNvZGluZ09wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5zdGFydCAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnRpbWVjb2RlcyA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IHRlc3RSdW5JbmZvICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlc3RJbmRleDogICAgICAgdGhpcy5pbmRleCxcbiAgICAgICAgICAgIGZpeHR1cmU6ICAgICAgICAgdGhpcy50ZXN0LmZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgIHRlc3Q6ICAgICAgICAgICAgdGhpcy50ZXN0Lm5hbWUsXG4gICAgICAgICAgICB0aW1lY29kZXM6ICAgICAgIHRoaXMudGltZWNvZGVzLFxuICAgICAgICAgICAgYWxpYXM6ICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uLmJyb3dzZXJJbmZvLmFsaWFzLFxuICAgICAgICAgICAgcGFyc2VkVXNlckFnZW50OiB0aGlzLl9jb25uZWN0aW9uLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZXN0UnVuLmVycnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBfY29ubmVjdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb247XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnRDYXB0dXJpbmcgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnZpZGVvUmVjb3JkZXIuc3RhcnRDYXB0dXJpbmcoKTtcblxuICAgICAgICB0aGlzLnN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hDYXB0dXJpbmcgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnZpZGVvUmVjb3JkZXIuZmluaXNoQ2FwdHVyaW5nKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIHRoaXMudGVtcEZpbGVzICAgICA9IHRoaXMuX2dlbmVyYXRlVGVtcE5hbWVzKCk7XG4gICAgICAgIHRoaXMudmlkZW9SZWNvcmRlciA9IHRoaXMuX2NyZWF0ZVZpZGVvUmVjb3JkZXJQcm9jZXNzKCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy52aWRlb1JlY29yZGVyLmluaXQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpc1ZpZGVvU3VwcG9ydGVkICgpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbkNhcGFiaWxpdGllcyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rpb24ucHJvdmlkZXIuaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3Nlcih0aGlzLl9jb25uZWN0aW9uLmlkKTtcblxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbkNhcGFiaWxpdGllcyAmJiBjb25uZWN0aW9uQ2FwYWJpbGl0aWVzLmhhc0dldFZpZGVvRnJhbWVEYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGlzVmlkZW9FbmFibGVkICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRlc3Quc2tpcDtcbiAgICB9XG5cbiAgICBvblRlc3RSdW5SZXN0YXJ0ICgpIHtcbiAgICAgICAgdGhpcy50aW1lY29kZXMgPSB0aGlzLnRpbWVjb2RlcyB8fCBbMF07XG5cbiAgICAgICAgdGhpcy5fYWRkVGltZUNvZGUoKTtcbiAgICB9XG5cbiAgICBfYWRkVGltZUNvZGUgKCkge1xuICAgICAgICB0aGlzLnRpbWVjb2Rlcy5wdXNoKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0KTtcbiAgICB9XG5cbiAgICBfY3JlYXRlVmlkZW9SZWNvcmRlclByb2Nlc3MgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZpZGVvUmVjb3JkZXJQcm9jZXNzKHRoaXMudGVtcEZpbGVzLnRlbXBWaWRlb1BhdGgsIHRoaXMuZmZtcGVnUGF0aCwgdGhpcy5fY29ubmVjdGlvbiwgdGhpcy5lbmNvZGluZ09wdGlvbnMpO1xuICAgIH1cblxuICAgIF9nZW5lcmF0ZVRlbXBOYW1lcyAoKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fY29ubmVjdGlvbi5pZDtcblxuICAgICAgICBjb25zdCB0ZW1wRmlsZU5hbWVzID0ge1xuICAgICAgICAgICAgdGVtcFZpZGVvUGF0aDogICAgICAgYCR7VEVNUF9WSURFT19GSUxFX1BSRUZJWH0tJHtpZH0uJHtWSURFT19FWFRFTlNJT059YCxcbiAgICAgICAgICAgIHRlbXBNZXJnZUNvbmZpZ1BhdGg6IGAke1RFTVBfTUVSR0VfQ09ORklHX0ZJTEVfUFJFRklYfS0ke2lkfS4ke1RFTVBfTUVSR0VfQ09ORklHX0ZJTEVfRVhURU5TSU9OfWAsXG4gICAgICAgICAgICB0bXBNZXJnZU5hbWU6ICAgICAgICBgJHtURU1QX01FUkdFX0ZJTEVfUFJFRklYfS0ke2lkfS4ke1ZJREVPX0VYVEVOU0lPTn1gLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgW3RlbXBGaWxlLCB0ZW1wTmFtZV0gb2YgT2JqZWN0LmVudHJpZXModGVtcEZpbGVOYW1lcykpXG4gICAgICAgICAgICB0ZW1wRmlsZU5hbWVzW3RlbXBGaWxlXSA9IGpvaW4odGhpcy5wYXRoLCB0ZW1wTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBGaWxlTmFtZXM7XG4gICAgfVxufVxuIl19