TestCafe全局before钩子设置的Cookie在测试中无法找到的问题
问题根源:
t.useRole(userRole)会为每个角色创建独立的浏览器上下文,Cookie、localStorage等存储数据都是上下文隔离的。你在全局test:before钩子中设置的Cookie存放在默认浏览器上下文里,执行useRole切换到角色专属上下文后,自然无法访问到默认上下文的Cookie,localStorage出现同样问题也是这个原因。验证依据:你将Cookie设置逻辑移到
beforeEach中能正常工作,正是因为设置操作是在角色上下文切换完成后执行的,Cookie被写入到当前角色的上下文里。可行解决方案:
- 将Cookie设置逻辑放到fixture的
beforeEach中,确保在useRole之后执行:fixture('Language test') .page('./') .beforeEach(async (t) => { await t.useRole(userRole); // 切换角色后设置Cookie,写入当前角色的上下文 await t.setCookies({ testCafeRun: 'true' }, baseUrl); }); test('test 1', async (t) => { const cookies = await t.getCookies('testCafeRun'); console.log(cookies); // 可正常获取 }); - 把Cookie设置整合到Role的初始化逻辑中,角色创建时就完成Cookie配置:
const userRole = Role('./login-page', async t => { // 原有登录操作逻辑 await t.typeText('#username', 'user'); await t.typeText('#password', 'pass'); await t.click('#submit'); // 在角色登录完成后设置Cookie await t.setCookies({ testCafeRun: 'true' }, baseUrl); });
- 将Cookie设置逻辑放到fixture的
内容的提问来源于stack exchange,提问作者BBB
相关产品推荐
相关产品推荐

