testplane
Version:
Tests framework based on mocha and wdio
101 lines • 5.04 kB
JavaScript
;
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