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

Playwright+TypeScript复用认证状态时多测试用例仅单个生效问题

问题分析与解决方案

核心问题

第二个测试用例卡在登录页的原因是:你在test2.spec.ts的beforeEach中主动导航到了登录页面,但此时Playwright已经通过storageState加载了已认证的会话状态。系统检测到用户已登录后,不会自动跳转至首页,导致页面停留在登录页。

具体修复步骤

1. 修改test2.spec.ts的beforeEach逻辑

移除跳转到登录页的代码,改为导航到登录后的目标页面(和test1.spec.ts保持一致,或根据测试需求调整):

test.beforeEach(async ({page}) => {
    // 导航到登录后的业务页面,而非登录页
    await page.goto("url of the site");
    await page.waitForLoadState('networkidle'); // 替换waitForTimeout为更可靠的等待方式
});

注意:尽量避免使用waitForTimeout,改用waitForLoadState或元素可见性等待,提升测试稳定性。

2. 验证storageState路径一致性

确保login.setup.ts中authFile的路径和playwright.config.ts里配置的storageState路径完全一致:

  • 在login.setup.ts中明确路径:
    const authFile = './playwright/.auth/user.json';
    
  • 确保playwright.config.ts中的路径和上述一致,避免相对路径错误导致无法读取认证状态文件。

3. 确认测试运行时依赖setup配置

运行测试时,确保使用依赖setup的chromium配置,例如:

npx playwright test --project=chromium

如果默认项目不是chromium,需要明确指定,否则测试不会复用setup生成的认证状态。

4. 可选:适配登录页自动跳转逻辑(若业务有此设定)

如果业务上已登录用户访问登录页会自动跳转至首页,可在test2.spec.ts中添加等待跳转的逻辑:

test.beforeEach(async ({page}) => {
    await page.goto("https://test-campus.dli.mn.gov/user/login");
    // 等待页面自动跳转到登录后的首页
    await page.waitForURL("url after login");
});

但更推荐直接导航到目标业务页面,避免不必要的登录页访问流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:40:14