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

Playwright结合Azure B2C登录状态无法复用问题求助

解决方案
  • 检查配置文件路径一致性
    确保playwright.config.ts中use字段里的storageState路径与global-setup.ts中保存状态的路径完全匹配。建议使用绝对路径避免相对路径出错,示例:

    // playwright.config.ts
    import path from 'path';
    export default defineConfig({
      use: {
        storageState: path.resolve(__dirname, 'storageState.json'),
        // 其他配置
      },
    });
    
  • 验证storageState.json内容有效性
    打开生成的storageState.json,确认包含.b2clogin.com域名的Cookie,且domain、origin、path参数正确。若Cookie的域名匹配规则错误,Playwright会自动忽略该Cookie。

  • 确保测试上下文正确加载状态
    测试文件中不要手动创建未指定storageState的浏览器上下文。如果需要自定义上下文,显式传入状态配置:

    // onboarding.spec.ts
    test('onboarding flow', async ({ browser }) => {
      const context = await browser.newContext({ storageState: path.resolve(__dirname, '../storageState.json') });
      const page = await context.newPage();
      // 测试逻辑
    });
    
  • 处理Azure B2C的Cookie限制
    Azure B2C的Cookie可能带有SameSite属性限制,可在配置中添加上下文选项放宽限制:

    // playwright.config.ts
    export default defineConfig({
      use: {
        // 其他配置
      },
      contextOptions: {
        ignoreHTTPSErrors: true,
        permissions: ['storage'],
      },
    });
    
  • 确保登录流程完整后再保存状态
    在global-setup.ts中,登录完成后等待登录成功标识元素出现,确认Cookie已写入再保存状态:

    // global-setup.ts
    await page.waitForSelector('#user-avatar'); // 替换为实际的登录成功元素选择器
    await context.storageState({ path: './storageState.json' });
    
  • 清理旧的状态文件
    每次执行global-setup前删除旧的storageState.json,避免缓存干扰:

    // global-setup.ts
    import fs from 'fs';
    const statePath = './storageState.json';
    if (fs.existsSync(statePath)) fs.unlinkSync(statePath);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:45:38