Как захватить и получить доступ к хранилищу сеансов браузера после входа в драматург

Я использую следующую функцию для захвата и сохранения состояния браузера после входа в систему. я вижу, что эта функция отлично записывает локальное хранилище в файл 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" })
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У 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
  });
});

Большое спасибо @agoff! Я попробую и дам вам знать 👍

Raj 15.08.2024 04:13

я выбрал простой подход. все, что я делаю, это создаю файл 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}` 
    }

Другие вопросы по теме