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

