UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

115 lines 15.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /* global Symbol */ const pinkie_1 = __importDefault(require("pinkie")); const lodash_1 = require("lodash"); const promisify_event_1 = __importDefault(require("promisify-event")); const browser_job_result_1 = __importDefault(require("../../runner/browser-job-result")); const connection_1 = __importDefault(require("../connection")); const warning_message_1 = __importDefault(require("../../notifications/warning-message")); const name = Symbol(); class BrowserProviderPluginHost { constructor(providerObject, providerName) { this.JOB_RESULT = lodash_1.assignIn({}, browser_job_result_1.default); lodash_1.assignIn(this, providerObject); this[name] = providerName; } // Helpers get providerName() { return this[name]; } runInitScript(browserId, code) { const connection = connection_1.default.getById(browserId); return connection.runInitScript(`(${code})()`); } waitForConnectionReady(browserId) { const connection = connection_1.default.getById(browserId); if (connection.ready) return pinkie_1.default.resolve(); return promisify_event_1.default(connection, 'ready'); } reportWarning(browserId, ...args) { const connection = connection_1.default.getById(browserId); connection.addWarning(...args); } setUserAgentMetaInfo(browserId, message) { const connection = connection_1.default.getById(browserId); connection.setProviderMetaInfo(message); } async closeLocalBrowser(browserId) { const connection = connection_1.default.getById(browserId); await connection.provider._ensureBrowserWindowDescriptor(browserId); await connection.provider._closeLocalBrowser(browserId); } async resizeLocalBrowserWindow(browserId, width, height, currentWidth, currentHeight) { const connection = connection_1.default.getById(browserId); await connection.provider._ensureBrowserWindowParameters(browserId); await connection.provider._resizeLocalBrowserWindow(browserId, width, height, currentWidth, currentHeight); } // API // Browser control async openBrowser( /* browserId, pageUrl, browserName */) { throw new Error('Not implemented!'); } async closeBrowser( /* browserId */) { throw new Error('Not implemented!'); } // Initialization async init() { return; } async dispose() { return; } // Browser names handling async getBrowserList() { throw new Error('Not implemented!'); } async isValidBrowserName( /* browserName */) { return true; } // Extra functions // NOTE: The browserName argument is optional, and must be supplied if the browserId argument is not valid (browser is not opened) async isLocalBrowser( /* browserId[, browserName] */) { return false; } isHeadlessBrowser( /* browserId */) { return false; } async hasCustomActionForBrowser( /* browserId */) { return { hasCloseBrowser: this.hasOwnProperty('closeBrowser'), hasResizeWindow: this.hasOwnProperty('resizeWindow'), hasTakeScreenshot: this.hasOwnProperty('takeScreenshot'), hasGetVideoFrameData: this.hasOwnProperty('getVideoFrameData'), hasCanResizeWindowToDimensions: this.hasOwnProperty('canResizeWindowToDimensions'), hasMaximizeWindow: this.hasOwnProperty('maximizeWindow'), hasChromelessScreenshots: false }; } async resizeWindow(browserId /*, width, height, currentWidth, currentHeight */) { this.reportWarning(browserId, warning_message_1.default.resizeNotSupportedByBrowserProvider, this[name]); } async canResizeWindowToDimensions( /* browserId, width, height */) { return true; } async takeScreenshot(browserId /*, screenshotPath, pageWidth, pageHeight */) { this.reportWarning(browserId, warning_message_1.default.screenshotNotSupportedByBrowserProvider, this[name]); } async maximizeWindow(browserId) { this.reportWarning(browserId, warning_message_1.default.maximizeNotSupportedByBrowserProvider, this[name]); } async getVideoFrameData(browserId) { const browserAlias = connection_1.default.getById(browserId).browserInfo.alias; this.reportWarning(browserId, warning_message_1.default.videoNotSupportedByBrowser, browserAlias); } async reportJobResult( /*browserId, status, data*/) { return; } } exports.default = BrowserProviderPluginHost; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9wbHVnaW4taG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1CQUFtQjtBQUNuQixvREFBNkI7QUFDN0IsbUNBQWtDO0FBQ2xDLHNFQUE2QztBQUM3Qyx5RkFBaUU7QUFDakUsK0RBQThDO0FBQzlDLDBGQUFrRTtBQUdsRSxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUV0QixNQUFxQix5QkFBeUI7SUFDMUMsWUFBYSxjQUFjLEVBQUUsWUFBWTtRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFRLENBQUMsRUFBRSxFQUFFLDRCQUFrQixDQUFDLENBQUM7UUFFbkQsaUJBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUM5QixDQUFDO0lBR0QsVUFBVTtJQUNWLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxhQUFhLENBQUUsU0FBUyxFQUFFLElBQUk7UUFDMUIsTUFBTSxVQUFVLEdBQUcsb0JBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHNCQUFzQixDQUFFLFNBQVM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsb0JBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELElBQUksVUFBVSxDQUFDLEtBQUs7WUFDaEIsT0FBTyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE9BQU8seUJBQWMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVE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QSxpREFBaUQ7UUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUseUJBQWUsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixFQUFFLDhCQUE4QjtRQUM3RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBRSxTQUFTLENBQUEsNENBQTRDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLHlCQUFlLENBQUMsdUNBQXVDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUUsU0FBUztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSx5QkFBZSxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUUsU0FBUztRQUM5QixNQUFNLFlBQVksR0FBRyxvQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUU1RSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSx5QkFBZSxDQUFDLDBCQUEwQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxFQUFFLDJCQUEyQjtRQUM5QyxPQUFPO0lBQ1gsQ0FBQztDQUNKO0FBcElELDRDQW9JQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBTeW1ib2wgKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJ3BpbmtpZSc7XG5pbXBvcnQgeyBhc3NpZ25JbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcHJvbWlzaWZ5RXZlbnQgZnJvbSAncHJvbWlzaWZ5LWV2ZW50JztcbmltcG9ydCBCUk9XU0VSX0pPQl9SRVNVTFQgZnJvbSAnLi4vLi4vcnVubmVyL2Jyb3dzZXItam9iLXJlc3VsdCc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcblxuXG5jb25zdCBuYW1lID0gU3ltYm9sKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJQcm92aWRlclBsdWdpbkhvc3Qge1xuICAgIGNvbnN0cnVjdG9yIChwcm92aWRlck9iamVjdCwgcHJvdmlkZXJOYW1lKSB7XG4gICAgICAgIHRoaXMuSk9CX1JFU1VMVCA9IGFzc2lnbkluKHt9LCBCUk9XU0VSX0pPQl9SRVNVTFQpO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMsIHByb3ZpZGVyT2JqZWN0KTtcblxuICAgICAgICB0aGlzW25hbWVdID0gcHJvdmlkZXJOYW1lO1xuICAgIH1cblxuXG4gICAgLy8gSGVscGVyc1xuICAgIGdldCBwcm92aWRlck5hbWUgKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tuYW1lXTtcbiAgICB9XG5cbiAgICBydW5Jbml0U2NyaXB0IChicm93c2VySWQsIGNvZGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQoYnJvd3NlcklkKTtcblxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5ydW5Jbml0U2NyaXB0KGAoJHtjb2RlfSkoKWApO1xuICAgIH1cblxuICAgIHdhaXRGb3JDb25uZWN0aW9uUmVhZHkgKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnJlYWR5KVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybiBwcm9taXNpZnlFdmVudChjb25uZWN0aW9uLCAncmVhZHknKTtcbiAgICB9XG5cbiAgICByZXBvcnRXYXJuaW5nIChicm93c2VySWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQoYnJvd3NlcklkKTtcblxuICAgICAgICBjb25uZWN0aW9uLmFkZFdhcm5pbmcoLi4uYXJncyk7XG4gICAgfVxuXG4gICAgc2V0VXNlckFnZW50TWV0YUluZm8gKGJyb3dzZXJJZCwgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZChicm93c2VySWQpO1xuXG4gICAgICAgIGNvbm5lY3Rpb24uc2V0UHJvdmlkZXJNZXRhSW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbG9zZUxvY2FsQnJvd3NlciAoYnJvd3NlcklkKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBCcm93c2VyQ29ubmVjdGlvbi5nZXRCeUlkKGJyb3dzZXJJZCk7XG5cbiAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5wcm92aWRlci5fZW5zdXJlQnJvd3NlcldpbmRvd0Rlc2NyaXB0b3IoYnJvd3NlcklkKTtcbiAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5wcm92aWRlci5fY2xvc2VMb2NhbEJyb3dzZXIoYnJvd3NlcklkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNpemVMb2NhbEJyb3dzZXJXaW5kb3cgKGJyb3dzZXJJZCwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBCcm93c2VyQ29ubmVjdGlvbi5nZXRCeUlkKGJyb3dzZXJJZCk7XG5cbiAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5wcm92aWRlci5fZW5zdXJlQnJvd3NlcldpbmRvd1BhcmFtZXRlcnMoYnJvd3NlcklkKTtcbiAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5wcm92aWRlci5fcmVzaXplTG9jYWxCcm93c2VyV2luZG93KGJyb3dzZXJJZCwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICAvLyBCcm93c2VyIGNvbnRyb2xcbiAgICBhc3luYyBvcGVuQnJvd3NlciAoLyogYnJvd3NlcklkLCBwYWdlVXJsLCBicm93c2VyTmFtZSAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbG9zZUJyb3dzZXIgKC8qIGJyb3dzZXJJZCAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXphdGlvblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXN5bmMgZGlzcG9zZSAoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIEJyb3dzZXIgbmFtZXMgaGFuZGxpbmdcbiAgICBhc3luYyBnZXRCcm93c2VyTGlzdCAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIScpO1xuICAgIH1cblxuICAgIGFzeW5jIGlzVmFsaWRCcm93c2VyTmFtZSAoLyogYnJvd3Nlck5hbWUgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRXh0cmEgZnVuY3Rpb25zXG4gICAgLy8gTk9URTogVGhlIGJyb3dzZXJOYW1lIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgbXVzdCBiZSBzdXBwbGllZCBpZiB0aGUgYnJvd3NlcklkIGFyZ3VtZW50IGlzIG5vdCB2YWxpZCAoYnJvd3NlciBpcyBub3Qgb3BlbmVkKVxuICAgIGFzeW5jIGlzTG9jYWxCcm93c2VyICgvKiBicm93c2VySWRbLCBicm93c2VyTmFtZV0gKi8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzSGVhZGxlc3NCcm93c2VyICgvKiBicm93c2VySWQgKi8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIGhhc0N1c3RvbUFjdGlvbkZvckJyb3dzZXIgKC8qIGJyb3dzZXJJZCAqLykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGFzQ2xvc2VCcm93c2VyOiAgICAgICAgICAgICAgICB0aGlzLmhhc093blByb3BlcnR5KCdjbG9zZUJyb3dzZXInKSxcbiAgICAgICAgICAgIGhhc1Jlc2l6ZVdpbmRvdzogICAgICAgICAgICAgICAgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncmVzaXplV2luZG93JyksXG4gICAgICAgICAgICBoYXNUYWtlU2NyZWVuc2hvdDogICAgICAgICAgICAgIHRoaXMuaGFzT3duUHJvcGVydHkoJ3Rha2VTY3JlZW5zaG90JyksXG4gICAgICAgICAgICBoYXNHZXRWaWRlb0ZyYW1lRGF0YTogICAgICAgICAgIHRoaXMuaGFzT3duUHJvcGVydHkoJ2dldFZpZGVvRnJhbWVEYXRhJyksXG4gICAgICAgICAgICBoYXNDYW5SZXNpemVXaW5kb3dUb0RpbWVuc2lvbnM6IHRoaXMuaGFzT3duUHJvcGVydHkoJ2NhblJlc2l6ZVdpbmRvd1RvRGltZW5zaW9ucycpLFxuICAgICAgICAgICAgaGFzTWF4aW1pemVXaW5kb3c6ICAgICAgICAgICAgICB0aGlzLmhhc093blByb3BlcnR5KCdtYXhpbWl6ZVdpbmRvdycpLFxuICAgICAgICAgICAgaGFzQ2hyb21lbGVzc1NjcmVlbnNob3RzOiAgICAgICBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2l6ZVdpbmRvdyAoYnJvd3NlcklkLyosIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCAqLykge1xuICAgICAgICB0aGlzLnJlcG9ydFdhcm5pbmcoYnJvd3NlcklkLCBXQVJOSU5HX01FU1NBR0UucmVzaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXIsIHRoaXNbbmFtZV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNhblJlc2l6ZVdpbmRvd1RvRGltZW5zaW9ucyAoLyogYnJvd3NlcklkLCB3aWR0aCwgaGVpZ2h0ICovKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHRha2VTY3JlZW5zaG90IChicm93c2VySWQvKiwgc2NyZWVuc2hvdFBhdGgsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCAqLykge1xuICAgICAgICB0aGlzLnJlcG9ydFdhcm5pbmcoYnJvd3NlcklkLCBXQVJOSU5HX01FU1NBR0Uuc2NyZWVuc2hvdE5vdFN1cHBvcnRlZEJ5QnJvd3NlclByb3ZpZGVyLCB0aGlzW25hbWVdKTtcbiAgICB9XG5cbiAgICBhc3luYyBtYXhpbWl6ZVdpbmRvdyAoYnJvd3NlcklkKSB7XG4gICAgICAgIHRoaXMucmVwb3J0V2FybmluZyhicm93c2VySWQsIFdBUk5JTkdfTUVTU0FHRS5tYXhpbWl6ZU5vdFN1cHBvcnRlZEJ5QnJvd3NlclByb3ZpZGVyLCB0aGlzW25hbWVdKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRWaWRlb0ZyYW1lRGF0YSAoYnJvd3NlcklkKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJBbGlhcyA9IEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQoYnJvd3NlcklkKS5icm93c2VySW5mby5hbGlhcztcblxuICAgICAgICB0aGlzLnJlcG9ydFdhcm5pbmcoYnJvd3NlcklkLCBXQVJOSU5HX01FU1NBR0UudmlkZW9Ob3RTdXBwb3J0ZWRCeUJyb3dzZXIsIGJyb3dzZXJBbGlhcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVwb3J0Sm9iUmVzdWx0ICgvKmJyb3dzZXJJZCwgc3RhdHVzLCBkYXRhKi8pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cbiJdfQ==