UNPKG

testplane

Version:

Tests framework based on mocha and wdio

101 lines 5.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_extra_1 = __importDefault(require("fs-extra")); const restoreStorage_1 = require("./restoreStorage"); const config_1 = require("../../../constants/config"); const saveState_1 = require("../saveState"); const existing_browser_1 = require("../../existing-browser"); exports.default = (browser) => { const { publicAPI: session } = browser; session.addCommand("restoreState", async (_options = {}) => { const currentUrl = new URL(await session.getUrl()); if (!currentUrl.origin || currentUrl.origin === "null") { throw new Error("Before restoreState first open page using url command"); } const options = { ...browser.config.stateOpts, refresh: true, ..._options }; let restoreState = options.data; if (options.path) { restoreState = await fs_extra_1.default.readJson(options.path); } if (!restoreState) { throw new Error("Can't restore state: please provide a path to file or data"); } if (restoreState?.cookies && options.cookieFilter) { restoreState.cookies = restoreState?.cookies.filter(options.cookieFilter); } switch ((0, saveState_1.getOverridesProtocol)(browser)) { case config_1.WEBDRIVER_PROTOCOL: { await session.switchToParentFrame(); if (restoreState.cookies && options.cookies) { await session.setCookies(restoreState.cookies.map(cookie => ({ ...cookie, secure: cookie.secure || cookie.sameSite === "None", // fix for ff sameSite: cookie.sameSite && session.isBidi ? cookie.sameSite.toLowerCase() : cookie.sameSite, }))); } if (restoreState.framesData) { await session.switchToParentFrame(); const frames = await (0, saveState_1.getWebdriverFrames)(session); for (let i = 0; i <= frames.length; i++) { await session.switchToParentFrame(); // after last element have to set data for parent frame if (i < frames.length) { await session.switchFrame(await session.$(`iframe[src="${frames[i]}"]`)); } const origin = await session.execute(() => window.location.origin); const frameData = restoreState.framesData[origin]; if (frameData) { if (frameData.localStorage && options.localStorage) { await session.execute(restoreStorage_1.restoreStorage, frameData.localStorage, "localStorage"); } if (frameData.sessionStorage && options.sessionStorage) { await session.execute(restoreStorage_1.restoreStorage, frameData.sessionStorage, "sessionStorage"); } } } await session.switchToParentFrame(); } if (options.refresh) { await session.refresh(); } break; } case config_1.DEVTOOLS_PROTOCOL: { const page = await (0, existing_browser_1.getActivePuppeteerPage)(session); if (!page) { return; } const frames = page.frames(); if (restoreState.cookies && options.cookies) { await page.setCookie(...restoreState.cookies); } for (const frame of frames) { const origin = new URL(frame.url()).origin; if (origin === "null" || !restoreState.framesData[origin]) { continue; } const frameData = restoreState.framesData[origin]; if (!frameData) { continue; } if (frameData.localStorage && options.localStorage) { await frame.evaluate(restoreStorage_1.restoreStorage, frameData.localStorage, "localStorage"); } if (frameData.sessionStorage && options.sessionStorage) { await frame.evaluate(restoreStorage_1.restoreStorage, frameData.sessionStorage, "sessionStorage"); } } if (options.refresh) { await page.reload(); } break; } } }); }; //# sourceMappingURL=index.js.map