You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright中storage state与dependency功能使用问题求助

问题分析

产品A的登录认证是标签页隔离的,说明它依赖sessionStorage存储核心认证数据——sessionStorage本身就是标签页级别的存储,关闭标签页就会清空。而Playwright默认的storageState()方法仅保存cookies和localStorage,不会包含sessionStorage,这就是复用user.json对产品A无效的根本原因。

解决方案

要解决这个问题,需要在登录环节额外保存sessionStorage内容,后续测试时再手动将其注入到新标签页中。结合dependency功能的具体实现步骤如下:

1. 修改登录依赖脚本,同时保存完整认证状态

// 登录依赖脚本(示例:login.setup.js)
import { test as setup } from '@playwright/test';
import fs from 'fs/promises';

const authFile = 'user.json';

setup('完成登录并保存完整状态', async ({ page }) => {
  // 执行产品A的登录流程
  await page.goto('/login');
  await page.fill('#username', '你的账号');
  await page.fill('#password', '你的密码');
  await page.click('#submit-btn');
  await page.waitForURL('/home');

  // 获取默认的storageState(包含cookies和localStorage)
  const baseState = await page.context().storageState();
  // 手动提取当前页面的sessionStorage
  const sessionData = await page.evaluate(() => JSON.stringify(window.sessionStorage));
  
  // 合并所有状态并写入文件
  const fullAuthState = {
    ...baseState,
    sessionStorage: JSON.parse(sessionData)
  };
  await fs.writeFile(authFile, JSON.stringify(fullAuthState));
});

2. 在测试用例中加载状态并注入sessionStorage

// 测试用例脚本
import { test } from '@playwright/test';
import fs from 'fs/promises';

test.use({ storageState: 'user.json' });

test('产品A页面操作测试', async ({ page }) => {
  await page.goto('/home');
  
  // 读取保存的完整认证状态
  const fullAuthState = JSON.parse(await fs.readFile('user.json', 'utf-8'));
  // 手动注入sessionStorage到当前页面
  await page.evaluate((sessionData) => {
    Object.entries(sessionData).forEach(([key, value]) => {
      window.sessionStorage.setItem(key, value);
    });
  }, fullAuthState.sessionStorage);
  
  // 刷新页面让sessionStorage生效
  await page.reload();
  
  // 后续正常执行测试步骤即可
  await page.click('#function-btn');
  // ...其他测试逻辑
});

补充提示

  • 如果产品A还用到了其他标签页隔离的存储(比如IndexedDB),可以用同样的思路:登录时通过page.evaluate()提取数据,测试时再注入。
  • 若测试中需要打开新标签页,要在新标签页加载完成后,重复执行sessionStorage的注入步骤,因为sessionStorage无法跨标签页共享。

内容的提问来源于stack exchange,提问作者Sara Sarvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:52:13