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
相关产品推荐
相关产品推荐

