@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
71 lines • 9.53 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;
}
get testRunInfo() {
return {
testIndex: this.index,
fixture: this.test.fixture.name,
test: this.test.name,
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();
}
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;
}
_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] = path_1.join(this.path, tempName);
return tempFileNames;
}
}
exports.default = TestRunVideoRecorder;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tdmlkZW8tcmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlkZW8tcmVjb3JkZXIvdGVzdC1ydW4tdmlkZW8tcmVjb3JkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBNEI7QUFDNUIsd0RBQTZDO0FBRTdDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU5QixNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQUVqRSxNQUFNLDZCQUE2QixHQUFNLFFBQVEsQ0FBQztBQUNsRCxNQUFNLGdDQUFnQyxHQUFHLEtBQUssQ0FBQztBQUUvQyxNQUFxQixvQkFBb0I7SUFDckMsWUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRTtRQUN4RSxJQUFJLENBQUMsT0FBTyxHQUFNLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFTLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFRLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsU0FBUyxHQUFPLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFjLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFRLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTztZQUNILFNBQVMsRUFBUSxJQUFJLENBQUMsS0FBSztZQUMzQixPQUFPLEVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUN2QyxJQUFJLEVBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQy9CLEtBQUssRUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxlQUFlO1NBQ2hFLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWU7UUFDakIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUV4RCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEIsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFOUcsT0FBTyxzQkFBc0IsSUFBSSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQztJQUNqRixDQUFDO0lBRUQsMkJBQTJCO1FBQ3ZCLE9BQU8sSUFBSSxpQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxrQkFBa0I7UUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUUvQixNQUFNLGFBQWEsR0FBRztZQUNsQixhQUFhLEVBQVEsR0FBRyxzQkFBc0IsSUFBSSxFQUFFLElBQUksZUFBZSxFQUFFO1lBQ3pFLG1CQUFtQixFQUFFLEdBQUcsNkJBQTZCLElBQUksRUFBRSxJQUFJLGdDQUFnQyxFQUFFO1lBQ2pHLFlBQVksRUFBUyxHQUFHLHNCQUFzQixJQUFJLEVBQUUsSUFBSSxlQUFlLEVBQUU7U0FDNUUsQ0FBQztRQUVGLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUM1RCxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFeEQsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBdkVELHVDQXVFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBWaWRlb1JlY29yZGVyUHJvY2VzcyBmcm9tICcuL3Byb2Nlc3MnO1xuXG5jb25zdCBWSURFT19FWFRFTlNJT04gPSAnbXA0JztcblxuY29uc3QgVEVNUF9WSURFT19GSUxFX1BSRUZJWCA9ICd0bXAtdmlkZW8nO1xuY29uc3QgVEVNUF9NRVJHRV9GSUxFX1BSRUZJWCA9IFRFTVBfVklERU9fRklMRV9QUkVGSVggKyAnLW1lcmdlJztcblxuY29uc3QgVEVNUF9NRVJHRV9DT05GSUdfRklMRV9QUkVGSVggICAgPSAnY29uZmlnJztcbmNvbnN0IFRFTVBfTUVSR0VfQ09ORklHX0ZJTEVfRVhURU5TSU9OID0gJ3R4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RSdW5WaWRlb1JlY29yZGVyIHtcbiAgICBjb25zdHJ1Y3RvciAoeyB0ZXN0UnVuLCB0ZXN0LCBpbmRleCB9LCB7IHBhdGgsIGZmbXBlZ1BhdGgsIGVuY29kaW5nT3B0aW9ucyB9KSB7XG4gICAgICAgIHRoaXMudGVzdFJ1biAgICA9IHRlc3RSdW47XG4gICAgICAgIHRoaXMudGVzdCAgICAgICA9IHRlc3Q7XG4gICAgICAgIHRoaXMuaW5kZXggICAgICA9IGluZGV4O1xuXG4gICAgICAgIHRoaXMudGVtcEZpbGVzICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMudmlkZW9SZWNvcmRlciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5wYXRoICAgICAgICAgICAgPSBwYXRoO1xuICAgICAgICB0aGlzLmZmbXBlZ1BhdGggICAgICA9IGZmbXBlZ1BhdGg7XG4gICAgICAgIHRoaXMuZW5jb2RpbmdPcHRpb25zID0gZW5jb2RpbmdPcHRpb25zO1xuICAgIH1cblxuICAgIGdldCB0ZXN0UnVuSW5mbyAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0SW5kZXg6ICAgICAgIHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBmaXh0dXJlOiAgICAgICAgIHRoaXMudGVzdC5maXh0dXJlLm5hbWUsXG4gICAgICAgICAgICB0ZXN0OiAgICAgICAgICAgIHRoaXMudGVzdC5uYW1lLFxuICAgICAgICAgICAgYWxpYXM6ICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uLmJyb3dzZXJJbmZvLmFsaWFzLFxuICAgICAgICAgICAgcGFyc2VkVXNlckFnZW50OiB0aGlzLl9jb25uZWN0aW9uLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBoYXNFcnJvcnMgKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnRlc3RSdW4uZXJycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0IF9jb25uZWN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbjtcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydENhcHR1cmluZyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudmlkZW9SZWNvcmRlci5zdGFydENhcHR1cmluZygpO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmlzaENhcHR1cmluZyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudmlkZW9SZWNvcmRlci5maW5pc2hDYXB0dXJpbmcoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgdGhpcy50ZW1wRmlsZXMgICAgID0gdGhpcy5fZ2VuZXJhdGVUZW1wTmFtZXMoKTtcbiAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyID0gdGhpcy5fY3JlYXRlVmlkZW9SZWNvcmRlclByb2Nlc3MoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnZpZGVvUmVjb3JkZXIuaW5pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGlzVmlkZW9TdXBwb3J0ZWQgKCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uQ2FwYWJpbGl0aWVzID0gYXdhaXQgdGhpcy5fY29ubmVjdGlvbi5wcm92aWRlci5oYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyKHRoaXMuX2Nvbm5lY3Rpb24uaWQpO1xuXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uQ2FwYWJpbGl0aWVzICYmIGNvbm5lY3Rpb25DYXBhYmlsaXRpZXMuaGFzR2V0VmlkZW9GcmFtZURhdGE7XG4gICAgfVxuXG4gICAgX2NyZWF0ZVZpZGVvUmVjb3JkZXJQcm9jZXNzICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWaWRlb1JlY29yZGVyUHJvY2Vzcyh0aGlzLnRlbXBGaWxlcy50ZW1wVmlkZW9QYXRoLCB0aGlzLmZmbXBlZ1BhdGgsIHRoaXMuX2Nvbm5lY3Rpb24sIHRoaXMuZW5jb2RpbmdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBfZ2VuZXJhdGVUZW1wTmFtZXMgKCkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2Nvbm5lY3Rpb24uaWQ7XG5cbiAgICAgICAgY29uc3QgdGVtcEZpbGVOYW1lcyA9IHtcbiAgICAgICAgICAgIHRlbXBWaWRlb1BhdGg6ICAgICAgIGAke1RFTVBfVklERU9fRklMRV9QUkVGSVh9LSR7aWR9LiR7VklERU9fRVhURU5TSU9OfWAsXG4gICAgICAgICAgICB0ZW1wTWVyZ2VDb25maWdQYXRoOiBgJHtURU1QX01FUkdFX0NPTkZJR19GSUxFX1BSRUZJWH0tJHtpZH0uJHtURU1QX01FUkdFX0NPTkZJR19GSUxFX0VYVEVOU0lPTn1gLFxuICAgICAgICAgICAgdG1wTWVyZ2VOYW1lOiAgICAgICAgYCR7VEVNUF9NRVJHRV9GSUxFX1BSRUZJWH0tJHtpZH0uJHtWSURFT19FWFRFTlNJT059YFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgW3RlbXBGaWxlLCB0ZW1wTmFtZV0gb2YgT2JqZWN0LmVudHJpZXModGVtcEZpbGVOYW1lcykpXG4gICAgICAgICAgICB0ZW1wRmlsZU5hbWVzW3RlbXBGaWxlXSA9IGpvaW4odGhpcy5wYXRoLCB0ZW1wTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBGaWxlTmFtZXM7XG4gICAgfVxufVxuXG4iXX0=