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

Playwright存储Local Storage不完整,无法跳过登录步骤求助

问题

我尝试在测试中使用Playwright Local Storage跳过登录步骤,但生成的文件仅包含少量无法用于跳过登录的信息。以下是我使用的代码:

test('Positive Login', async ({page}) => {
    const authFile = 'e2e/.auth/userAuth.json'
    
    await loginPage.loginToApp(login_email, login_password);
    await loginPage.clickLoginButton();
    await page.context().storageState({ path: authFile });
  })

但生成的userAuth.json文件仅包含如下信息:

{
  "cookies": [],
  "origins": [
    {
      "origin": "https://staging.uxtest.oculid.com",
      "localStorage": [
        {
          "name": "userpilotSettings",
          "value": "{\"endpoint\":\"wss://analytex-eu.userpilot.io/v0/events/websocket\",\"date\":1710280985903}"
        },
        {
          "name": "userpilotSDK",
          "value": "{}"
        }
      ]
    }
  ]
}

我不清楚为何只存储了这些内容,而非所有必要信息,请问这是什么问题?

解决方案
  • 保存时机过早,登录状态未完全写入:点击登录按钮后直接调用storageState,可能页面还在跳转、登录凭证(Cookie/Token)还没完成写入。可以先等待登录后的标志性元素加载完成,确保状态稳定后再保存:

    await loginPage.clickLoginButton();
    // 等待登录后才会出现的元素,比如用户头像
    await page.waitForSelector('.user-avatar', { timeout: 5000 });
    await page.context().storageState({ path: authFile });
    
  • 登录凭证存在于Cookie而非LocalStorage:很多应用用HttpOnly Cookie存储会话信息,这类Cookie不会出现在LocalStorage中,但会被storageState捕获。现在你的cookies数组为空,说明登录请求可能未成功,或者Cookie的域/路径配置有问题。可以手动登录后打开浏览器开发者工具,在Application标签下检查Cookie、SessionStorage,确认真正的登录凭证存储位置。

  • 页面上下文不匹配:如果登录过程中跳转到了其他域名,或者新开了标签页,当前page.context()可能没有包含目标域名的存储信息。确保所有登录操作都在同一个上下文执行,或者直接使用全局上下文来保存状态。

  • Playwright版本或配置问题:旧版本Playwright可能存在storageState捕获的bug,建议升级到最新稳定版。同时检查playwright.config.ts中的上下文配置,有没有禁用Cookie或存储的相关设置。

内容的提问来源于stack exchange,提问作者Josip Herceg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:51:03