Я использую следующую функцию для захвата и сохранения состояния браузера после входа в систему. я вижу, что эта функция отлично записывает локальное хранилище в файл json. Однако токен, который мне нужен (токен носителя/доступа), доступен только в хранилище сеансов, а не в локальном хранилище. любые идеи о том, как захватить и получить доступ к хранилищу сеансов, будут очень признательны.
async function globalSetup() {
const browser: Browser = await chromium.launch();
const context = await browser.newContext();
const page: Page = await context.newPage();
const loginPage = new LoginPage(page);
await page.goto("url")
await loginPage.login("userName", "password");
await page.context().storageState({ path: "./utils/storageState.json" })
}





У Playwright есть документация о том, как использовать sessionStorage с аутентификацией, но соответствующие части скопированы здесь.
Вам нужно будет использовать page.evaluate(), чтобы получить sessionStorage.
const sessionStorage = page.evaluate(() => window.sessionStorage);
А затем запишите это в файл. Мне удалось просто добавить sessionStorage в JSON, сгенерированный storageState.
import fs from 'fs';
...
const storageState = JSON.parse(fs.readFileSync("./utils/storageState.json", "utf-8"));
storageState.sessionStorage = JSON.parse(sessionStorage); // variable name re-used from above
fs.writeFileSync("./utils/storageState.json", JSON.stringify(storageState), "utf-8");
После сохранения sessionStorage, когда мне нужно было установить его в браузере, я преобразовал функцию из их документа в служебную функцию, которую я могу вызывать при необходимости.
export const setSessionStorage = async (page: Page, user: string) => {
const sessionStorage = JSON.parse(readFileSync(user, 'utf-8'));
await page.addInitScript(storage => {
for (const [key, value] of Object.entries(storage.sessionStorage)) window.sessionStorage.setItem(key, value);
}, sessionStorage);
};
Что позволяет легко звонить во время теста/beforeEach
test.describe('My Tests', () => {
test('My test', ({ page }) => {
await setSessionStorage(page, "./utils/storageState.json");
// rest of setup
});
});
я выбрал простой подход. все, что я делаю, это создаю файл sessionStorage.json, например:
const sessionStorage= await page.evaluate(() => JSON.stringify(sessionStorage));
fs.writeFileSync('./utils/sessionStorage.json', sessionStorage, 'utf-8');
а затем импортировать его в тесты -
import sessionStorage from "../finance-auto-test-frame-work/utils/sessionStorage.json";
и используя его так-
extraHTTPHeaders:{accept: 'application/json',
Authorization:`Bearer ${sessionStorage.access_token}`
}
Большое спасибо @agoff! Я попробую и дам вам знать 👍