UNPKG

@browserstack/testcafe

Version:

Automated browser testing for the modern web development stack.

93 lines 14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const phase_1 = __importDefault(require("../test-run/phase")); const types_1 = require("../errors/types"); const testcafe_hammerhead_1 = require("testcafe-hammerhead"); const actions_1 = require("./commands/actions"); const test_run_1 = require("../errors/test-run"); class TestRunBookmark { constructor(testRun, role) { this.testRun = testRun; this.role = role; this.url = testcafe_hammerhead_1.SPECIAL_BLANK_PAGE; this.dialogHandler = testRun.activeDialogHandler; this.iframeSelector = testRun.activeIframeSelector; this.speed = testRun.speed; this.pageLoadTimeout = testRun.pageLoadTimeout; this.ctx = testRun.ctx; this.fixtureCtx = testRun.fixtureCtx; this.consoleMessages = testRun.consoleMessages; } async init() { if (this.testRun.activeIframeSelector) await this.testRun.executeCommand(new actions_1.SwitchToMainWindowCommand()); if (!this.role.opts.preserveUrl) this.url = await this.testRun.getCurrentUrl(); } async _restoreDialogHandler() { if (this.testRun.activeDialogHandler !== this.dialogHandler) { const restoreDialogCommand = new actions_1.SetNativeDialogHandlerCommand({ dialogHandler: { fn: this.dialogHandler } }); await this.testRun.executeCommand(restoreDialogCommand); } } async _restoreSpeed() { if (this.testRun.speed !== this.speed) { const restoreSpeedCommand = new actions_1.SetTestSpeedCommand({ speed: this.speed }); await this.testRun.executeCommand(restoreSpeedCommand); } } async _restorePageLoadTimeout() { if (this.testRun.pageLoadTimeout !== this.pageLoadTimeout) { const restorePageLoadTimeoutCommand = new actions_1.SetPageLoadTimeoutCommand({ duration: this.pageLoadTimeout }); await this.testRun.executeCommand(restorePageLoadTimeoutCommand); } } async _restoreWorkingFrame() { if (this.testRun.activeIframeSelector !== this.iframeSelector) { const switchWorkingFrameCommand = this.iframeSelector ? new actions_1.SwitchToIframeCommand({ selector: this.iframeSelector }) : new actions_1.SwitchToMainWindowCommand(); try { await this.testRun.executeCommand(switchWorkingFrameCommand); } catch (err) { if (err.code === types_1.TEST_RUN_ERRORS.actionElementNotFoundError) throw new test_run_1.CurrentIframeNotFoundError(); if (err.code === types_1.TEST_RUN_ERRORS.actionIframeIsNotLoadedError) throw new test_run_1.CurrentIframeIsNotLoadedError(); throw err; } } } async _restorePage(url, stateSnapshot) { await this.testRun.navigateToUrl(url, true, JSON.stringify(stateSnapshot)); } async restore(callsite, stateSnapshot) { const prevPhase = this.testRun.phase; this.testRun.phase = phase_1.default.inBookmarkRestore; this.testRun.ctx = this.ctx; this.testRun.fixtureCtx = this.fixtureCtx; this.testRun.consoleMessages = this.consoleMessages; try { await this._restoreSpeed(); await this._restorePageLoadTimeout(); await this._restoreDialogHandler(); const preserveUrl = this.role.opts.preserveUrl; const url = preserveUrl ? this.role.url : this.url; await this._restorePage(url, stateSnapshot); if (!preserveUrl) await this._restoreWorkingFrame(); } catch (err) { err.callsite = callsite; throw err; } this.testRun.phase = prevPhase; } } exports.default = TestRunBookmark; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1ydW4vYm9va21hcmsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4REFBK0M7QUFDL0MsMkNBQWtEO0FBQ2xELDZEQUF5RDtBQUV6RCxnREFNNEI7QUFFNUIsaURBRzRCO0FBRTVCLE1BQXFCLGVBQWU7SUFDaEMsWUFBYSxPQUFPLEVBQUUsSUFBSTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFNLElBQUksQ0FBQztRQUVwQixJQUFJLENBQUMsR0FBRyxHQUFlLHdDQUFrQixDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQWEsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDL0MsSUFBSSxDQUFDLEdBQUcsR0FBZSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQVEsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtZQUNqQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksbUNBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxD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TUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBRW5DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBVyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBRTNELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLFdBQVc7Z0JBQ1osTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUN6QztRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1IsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFFeEIsTUFBTSxHQUFHLENBQUM7U0FDYjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0NBQ0o7QUF0R0Qsa0NBc0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRFU1RfUlVOX1BIQVNFIGZyb20gJy4uL3Rlc3QtcnVuL3BoYXNlJztcbmltcG9ydCB7IFRFU1RfUlVOX0VSUk9SUyB9IGZyb20gJy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBTUEVDSUFMX0JMQU5LX1BBR0UgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0IHtcbiAgICBTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvSWZyYW1lQ29tbWFuZCxcbiAgICBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZCxcbiAgICBTZXRUZXN0U3BlZWRDb21tYW5kLFxuICAgIFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmRcbn0gZnJvbSAnLi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgICBDdXJyZW50SWZyYW1lTm90Rm91bmRFcnJvcixcbiAgICBDdXJyZW50SWZyYW1lSXNOb3RMb2FkZWRFcnJvclxufSBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0UnVuQm9va21hcmsge1xuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuLCByb2xlKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1biA9IHRlc3RSdW47XG4gICAgICAgIHRoaXMucm9sZSAgICA9IHJvbGU7XG5cbiAgICAgICAgdGhpcy51cmwgICAgICAgICAgICAgPSBTUEVDSUFMX0JMQU5LX1BBR0U7XG4gICAgICAgIHRoaXMuZGlhbG9nSGFuZGxlciAgID0gdGVzdFJ1bi5hY3RpdmVEaWFsb2dIYW5kbGVyO1xuICAgICAgICB0aGlzLmlmcmFtZVNlbGVjdG9yICA9IHRlc3RSdW4uYWN0aXZlSWZyYW1lU2VsZWN0b3I7XG4gICAgICAgIHRoaXMuc3BlZWQgICAgICAgICAgID0gdGVzdFJ1bi5zcGVlZDtcbiAgICAgICAgdGhpcy5wYWdlTG9hZFRpbWVvdXQgPSB0ZXN0UnVuLnBhZ2VMb2FkVGltZW91dDtcbiAgICAgICAgdGhpcy5jdHggICAgICAgICAgICAgPSB0ZXN0UnVuLmN0eDtcbiAgICAgICAgdGhpcy5maXh0dXJlQ3R4ICAgICAgPSB0ZXN0UnVuLmZpeHR1cmVDdHg7XG4gICAgICAgIHRoaXMuY29uc29sZU1lc3NhZ2VzID0gdGVzdFJ1bi5jb25zb2xlTWVzc2FnZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlc3RSdW4uYWN0aXZlSWZyYW1lU2VsZWN0b3IpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQobmV3IFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQoKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJvbGUub3B0cy5wcmVzZXJ2ZVVybClcbiAgICAgICAgICAgIHRoaXMudXJsID0gYXdhaXQgdGhpcy50ZXN0UnVuLmdldEN1cnJlbnRVcmwoKTtcbiAgICB9XG5cbiAgICBhc3luYyBfcmVzdG9yZURpYWxvZ0hhbmRsZXIgKCkge1xuICAgICAgICBpZiAodGhpcy50ZXN0UnVuLmFjdGl2ZURpYWxvZ0hhbmRsZXIgIT09IHRoaXMuZGlhbG9nSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVzdG9yZURpYWxvZ0NvbW1hbmQgPSBuZXcgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQoeyBkaWFsb2dIYW5kbGVyOiB7IGZuOiB0aGlzLmRpYWxvZ0hhbmRsZXIgfSB9KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKHJlc3RvcmVEaWFsb2dDb21tYW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9yZXN0b3JlU3BlZWQgKCkge1xuICAgICAgICBpZiAodGhpcy50ZXN0UnVuLnNwZWVkICE9PSB0aGlzLnNwZWVkKSB7XG4gICAgICAgICAgICBjb25zdCByZXN0b3JlU3BlZWRDb21tYW5kID0gbmV3IFNldFRlc3RTcGVlZENvbW1hbmQoeyBzcGVlZDogdGhpcy5zcGVlZCB9KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKHJlc3RvcmVTcGVlZENvbW1hbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3Jlc3RvcmVQYWdlTG9hZFRpbWVvdXQgKCkge1xuICAgICAgICBpZiAodGhpcy50ZXN0UnVuLnBhZ2VMb2FkVGltZW91dCAhPT0gdGhpcy5wYWdlTG9hZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmVQYWdlTG9hZFRpbWVvdXRDb21tYW5kID0gbmV3IFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQoeyBkdXJhdGlvbjogdGhpcy5wYWdlTG9hZFRpbWVvdXQgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChyZXN0b3JlUGFnZUxvYWRUaW1lb3V0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfcmVzdG9yZVdvcmtpbmdGcmFtZSAoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlc3RSdW4uYWN0aXZlSWZyYW1lU2VsZWN0b3IgIT09IHRoaXMuaWZyYW1lU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaFdvcmtpbmdGcmFtZUNvbW1hbmQgPSB0aGlzLmlmcmFtZVNlbGVjdG9yID9cbiAgICAgICAgICAgICAgICBuZXcgU3dpdGNoVG9JZnJhbWVDb21tYW5kKHsgc2VsZWN0b3I6IHRoaXMuaWZyYW1lU2VsZWN0b3IgfSkgOlxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKHN3aXRjaFdvcmtpbmdGcmFtZUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gVEVTVF9SVU5fRVJST1JTLmFjdGlvbkVsZW1lbnROb3RGb3VuZEVycm9yKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ3VycmVudElmcmFtZU5vdEZvdW5kRXJyb3IoKTtcblxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gVEVTVF9SVU5fRVJST1JTLmFjdGlvbklmcmFtZUlzTm90TG9hZGVkRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDdXJyZW50SWZyYW1lSXNOb3RMb2FkZWRFcnJvcigpO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3Jlc3RvcmVQYWdlICh1cmwsIHN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50ZXN0UnVuLm5hdmlnYXRlVG9VcmwodXJsLCB0cnVlLCBKU09OLnN0cmluZ2lmeShzdGF0ZVNuYXBzaG90KSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzdG9yZSAoY2FsbHNpdGUsIHN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgcHJldlBoYXNlID0gdGhpcy50ZXN0UnVuLnBoYXNlO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1bi5waGFzZSA9IFRFU1RfUlVOX1BIQVNFLmluQm9va21hcmtSZXN0b3JlO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1bi5jdHggICAgICAgICAgICAgPSB0aGlzLmN0eDtcbiAgICAgICAgdGhpcy50ZXN0UnVuLmZpeHR1cmVDdHggICAgICA9IHRoaXMuZml4dHVyZUN0eDtcbiAgICAgICAgdGhpcy50ZXN0UnVuLmNvbnNvbGVNZXNzYWdlcyA9IHRoaXMuY29uc29sZU1lc3NhZ2VzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXN0b3JlU3BlZWQoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3RvcmVQYWdlTG9hZFRpbWVvdXQoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3RvcmVEaWFsb2dIYW5kbGVyKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHByZXNlcnZlVXJsID0gdGhpcy5yb2xlLm9wdHMucHJlc2VydmVVcmw7XG4gICAgICAgICAgICBjb25zdCB1cmwgICAgICAgICA9IHByZXNlcnZlVXJsID8gdGhpcy5yb2xlLnVybCA6IHRoaXMudXJsO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXN0b3JlUGFnZSh1cmwsIHN0YXRlU25hcHNob3QpO1xuXG4gICAgICAgICAgICBpZiAoIXByZXNlcnZlVXJsKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3RvcmVXb3JraW5nRnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBlcnIuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuLnBoYXNlID0gcHJldlBoYXNlO1xuICAgIH1cbn1cbiJdfQ==