testcafe
Version:
Automated browser testing for the modern web development stack.
87 lines • 13.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const os_family_1 = __importDefault(require("os-family"));
const url_1 = require("url");
const base_1 = __importDefault(require("../base"));
const runtime_info_1 = __importDefault(require("./runtime-info"));
const config_1 = __importDefault(require("./config"));
const local_chrome_1 = require("./local-chrome");
const cdp = __importStar(require("./cdp"));
const client_functions_1 = require("../../../utils/client-functions");
const MIN_AVAILABLE_DIMENSION = 50;
exports.default = Object.assign({}, base_1.default, { _getConfig(name) {
return config_1.default(name);
},
_getBrowserProtocolClient() {
return cdp;
},
async openBrowser(browserId, pageUrl, configString) {
const runtimeInfo = await runtime_info_1.default(url_1.parse(pageUrl).hostname, configString);
runtimeInfo.browserName = this._getBrowserName();
runtimeInfo.browserId = browserId;
runtimeInfo.providerMethods = {
resizeLocalBrowserWindow: (...args) => this.resizeLocalBrowserWindow(...args)
};
await local_chrome_1.start(pageUrl, runtimeInfo);
await this.waitForConnectionReady(browserId);
runtimeInfo.viewportSize = await this.runInitScript(browserId, client_functions_1.GET_WINDOW_DIMENSIONS_INFO_SCRIPT);
await cdp.createClient(runtimeInfo);
this.openedBrowsers[browserId] = runtimeInfo;
await this._ensureWindowIsExpanded(browserId, runtimeInfo.viewportSize);
},
async closeBrowser(browserId) {
const runtimeInfo = this.openedBrowsers[browserId];
if (cdp.isHeadlessTab(runtimeInfo))
await cdp.closeTab(runtimeInfo);
else
await this.closeLocalBrowser(browserId);
if (os_family_1.default.mac || runtimeInfo.config.headless)
await local_chrome_1.stop(runtimeInfo);
if (runtimeInfo.tempProfileDir)
await runtimeInfo.tempProfileDir.dispose();
delete this.openedBrowsers[browserId];
},
async resizeWindow(browserId, width, height, currentWidth, currentHeight) {
const runtimeInfo = this.openedBrowsers[browserId];
if (runtimeInfo.config.mobile)
await cdp.updateMobileViewportSize(runtimeInfo);
else {
runtimeInfo.viewportSize.width = currentWidth;
runtimeInfo.viewportSize.height = currentHeight;
}
await cdp.resizeWindow({ width, height }, runtimeInfo);
},
async getVideoFrameData(browserId) {
return await cdp.getScreenshotData(this.openedBrowsers[browserId]);
},
async hasCustomActionForBrowser(browserId) {
const { config, client } = this.openedBrowsers[browserId];
return {
hasCloseBrowser: true,
hasResizeWindow: !!client && (config.emulation || config.headless),
hasMaximizeWindow: !!client && config.headless,
hasTakeScreenshot: !!client,
hasChromelessScreenshots: !!client,
hasGetVideoFrameData: !!client,
hasCanResizeWindowToDimensions: false
};
},
async _ensureWindowIsExpanded(browserId, { height, width, availableHeight, availableWidth, outerWidth, outerHeight }) {
if (height < MIN_AVAILABLE_DIMENSION || width < MIN_AVAILABLE_DIMENSION) {
const newHeight = Math.max(availableHeight, MIN_AVAILABLE_DIMENSION);
const newWidth = Math.max(Math.floor(availableWidth / 2), MIN_AVAILABLE_DIMENSION);
await this.resizeWindow(browserId, newWidth, newHeight, outerWidth, outerHeight);
}
} });
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBEQUEyQjtBQUMzQiw2QkFBd0M7QUFDeEMsbURBQTRDO0FBQzVDLGtFQUE0QztBQUM1QyxzREFBaUM7QUFDakMsaURBQW9GO0FBQ3BGLDJDQUE2QjtBQUM3QixzRUFBb0Y7QUFHcEYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFFbkMsb0NBQ08sY0FBcUIsSUFFeEIsVUFBVSxDQUFFLElBQUk7UUFDWixPQUFPLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWTtRQUMvQyxNQUFNLFdBQVcsR0FBRyxNQUFNLHNCQUFjLENBQUMsV0FBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVuRixXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNqRCxXQUFXLENBQUMsU0FBUyxHQUFLLFNBQVMsQ0FBQztRQUVwQyxXQUFXLENBQUMsZUFBZSxHQUFHO1lBQzFCLHdCQUF3QixFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNoRixDQUFDO1FBRUYsTUFBTSxvQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0MsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0MsV0FBVyxDQUFDLFlBQVksR0FB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LEdBQUcsQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNyRSxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFFcEYsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNwRjtJQUNMLENBQUMsSUFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VVcmwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IGRlZGljYXRlZFByb3ZpZGVyQmFzZSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBnZXRSdW50aW1lSW5mbyBmcm9tICcuL3J1bnRpbWUtaW5mbyc7XG5pbXBvcnQgZ2V0Q29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHN0YXJ0IGFzIHN0YXJ0TG9jYWxDaHJvbWUsIHN0b3AgYXMgc3RvcExvY2FsQ2hyb21lIH0gZnJvbSAnLi9sb2NhbC1jaHJvbWUnO1xuaW1wb3J0ICogYXMgY2RwIGZyb20gJy4vY2RwJztcbmltcG9ydCB7IEdFVF9XSU5ET1dfRElNRU5TSU9OU19JTkZPX1NDUklQVCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NsaWVudC1mdW5jdGlvbnMnO1xuXG5cbmNvbnN0IE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OID0gNTA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAuLi5kZWRpY2F0ZWRQcm92aWRlckJhc2UsXG5cbiAgICBfZ2V0Q29uZmlnIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBnZXRDb25maWcobmFtZSk7XG4gICAgfSxcblxuICAgIF9nZXRCcm93c2VyUHJvdG9jb2xDbGllbnQgKCkge1xuICAgICAgICByZXR1cm4gY2RwO1xuICAgIH0sXG5cbiAgICBhc3luYyBvcGVuQnJvd3NlciAoYnJvd3NlcklkLCBwYWdlVXJsLCBjb25maWdTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcnVudGltZUluZm8gPSBhd2FpdCBnZXRSdW50aW1lSW5mbyhwYXJzZVVybChwYWdlVXJsKS5ob3N0bmFtZSwgY29uZmlnU3RyaW5nKTtcblxuICAgICAgICBydW50aW1lSW5mby5icm93c2VyTmFtZSA9IHRoaXMuX2dldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgIHJ1bnRpbWVJbmZvLmJyb3dzZXJJZCAgID0gYnJvd3NlcklkO1xuXG4gICAgICAgIHJ1bnRpbWVJbmZvLnByb3ZpZGVyTWV0aG9kcyA9IHtcbiAgICAgICAgICAgIHJlc2l6ZUxvY2FsQnJvd3NlcldpbmRvdzogKC4uLmFyZ3MpID0+IHRoaXMucmVzaXplTG9jYWxCcm93c2VyV2luZG93KC4uLmFyZ3MpXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgc3RhcnRMb2NhbENocm9tZShwYWdlVXJsLCBydW50aW1lSW5mbyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ29ubmVjdGlvblJlYWR5KGJyb3dzZXJJZCk7XG5cbiAgICAgICAgcnVudGltZUluZm8udmlld3BvcnRTaXplID0gYXdhaXQgdGhpcy5ydW5Jbml0U2NyaXB0KGJyb3dzZXJJZCwgR0VUX1dJTkRPV19ESU1FTlNJT05TX0lORk9fU0NSSVBUKTtcblxuICAgICAgICBhd2FpdCBjZHAuY3JlYXRlQ2xpZW50KHJ1bnRpbWVJbmZvKTtcblxuICAgICAgICB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF0gPSBydW50aW1lSW5mbztcblxuICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXaW5kb3dJc0V4cGFuZGVkKGJyb3dzZXJJZCwgcnVudGltZUluZm8udmlld3BvcnRTaXplKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgcnVudGltZUluZm8gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG5cbiAgICAgICAgaWYgKGNkcC5pc0hlYWRsZXNzVGFiKHJ1bnRpbWVJbmZvKSlcbiAgICAgICAgICAgIGF3YWl0IGNkcC5jbG9zZVRhYihydW50aW1lSW5mbyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2VMb2NhbEJyb3dzZXIoYnJvd3NlcklkKTtcblxuICAgICAgICBpZiAoT1MubWFjIHx8IHJ1bnRpbWVJbmZvLmNvbmZpZy5oZWFkbGVzcylcbiAgICAgICAgICAgIGF3YWl0IHN0b3BMb2NhbENocm9tZShydW50aW1lSW5mbyk7XG5cbiAgICAgICAgaWYgKHJ1bnRpbWVJbmZvLnRlbXBQcm9maWxlRGlyKVxuICAgICAgICAgICAgYXdhaXQgcnVudGltZUluZm8udGVtcFByb2ZpbGVEaXIuZGlzcG9zZSgpO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc2l6ZVdpbmRvdyAoYnJvd3NlcklkLCB3aWR0aCwgaGVpZ2h0LCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgcnVudGltZUluZm8gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG5cbiAgICAgICAgaWYgKHJ1bnRpbWVJbmZvLmNvbmZpZy5tb2JpbGUpXG4gICAgICAgICAgICBhd2FpdCBjZHAudXBkYXRlTW9iaWxlVmlld3BvcnRTaXplKHJ1bnRpbWVJbmZvKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBydW50aW1lSW5mby52aWV3cG9ydFNpemUud2lkdGggID0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgcnVudGltZUluZm8udmlld3BvcnRTaXplLmhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBjZHAucmVzaXplV2luZG93KHsgd2lkdGgsIGhlaWdodCB9LCBydW50aW1lSW5mbyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZpZGVvRnJhbWVEYXRhIChicm93c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNkcC5nZXRTY3JlZW5zaG90RGF0YSh0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBoYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgeyBjb25maWcsIGNsaWVudCB9ID0gdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoYXNDbG9zZUJyb3dzZXI6ICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBoYXNSZXNpemVXaW5kb3c6ICAgICAgICAgICAgICAgICEhY2xpZW50ICYmIChjb25maWcuZW11bGF0aW9uIHx8IGNvbmZpZy5oZWFkbGVzcyksXG4gICAgICAgICAgICBoYXNNYXhpbWl6ZVdpbmRvdzogICAgICAgICAgICAgICEhY2xpZW50ICYmIGNvbmZpZy5oZWFkbGVzcyxcbiAgICAgICAgICAgIGhhc1Rha2VTY3JlZW5zaG90OiAgICAgICAgICAgICAgISFjbGllbnQsXG4gICAgICAgICAgICBoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHM6ICAgICAgICEhY2xpZW50LFxuICAgICAgICAgICAgaGFzR2V0VmlkZW9GcmFtZURhdGE6ICAgICAgICAgICAhIWNsaWVudCxcbiAgICAgICAgICAgIGhhc0NhblJlc2l6ZVdpbmRvd1RvRGltZW5zaW9uczogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgX2Vuc3VyZVdpbmRvd0lzRXhwYW5kZWQgKGJyb3dzZXJJZCwgeyBoZWlnaHQsIHdpZHRoLCBhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZVdpZHRoLCBvdXRlcldpZHRoLCBvdXRlckhlaWdodCB9KSB7XG4gICAgICAgIGlmIChoZWlnaHQgPCBNSU5fQVZBSUxBQkxFX0RJTUVOU0lPTiB8fCB3aWR0aCA8IE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChhdmFpbGFibGVIZWlnaHQsIE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoICA9IE1hdGgubWF4KE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggLyAyKSwgTUlOX0FWQUlMQUJMRV9ESU1FTlNJT04pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2l6ZVdpbmRvdyhicm93c2VySWQsIG5ld1dpZHRoLCBuZXdIZWlnaHQsIG91dGVyV2lkdGgsIG91dGVySGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=