我知道这个话题被讨论了很多,但我有一个独特的情况。
为了测试我们的验收环境,我们需要点击https://authentication-example.com,它会运行一个脚本来添加会话 cookie 从而对我们进行身份验证。然后我们导航到https://acceptance-site.com来运行测试。
在尝试了许多选项之后,我最接近的解决方案是使用角色,例如
const a3 = Role('https://acceptance-site.com', async testController => {
await testController.navigateTo('https://authentication-example.com');
await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });
fixture('Testing acceptance')
.beforeEach(async testController => {
await testController.useRole(authenticate);
});
test('example1', async testController => {
await testController.debug();
}).disablePageReloads;
test('example2', async testController => {
await testController.debug();
}).disablePageReloads;
test('example3', async testController => {
await testController.debug();
}).disablePageReloads;
该解决方案使我无法加载与角色结尾不同的任何新页面。
如果我从角色中删除 { preserveUrl: true },example2 和 example3 会加载空白页。如果我从测试中删除 .disablePageReloads,则 escond 和第三次测试的身份验证失败,并且我收到错误“无法在...找到资源的 DNS 记录”此外,如果我的角色为
const a3 = Role('https://authentication-example.com', async testController => {
await testController.navigateTo('https://acceptance-site.com');
}, { preserveUrl: true });
所有测试的身份验证均失败。
我注意到,当成功工作时,我应该得到的 cookie 实际上保存在调试时应用程序下的会话中,并且由这个锤头存储包装器更改。测试时的基本 url 是 testCafe 服务器的 ip 和端口,前面是随机字母,例如 172.0.0.1:8080/hoi23hh/ https://acceptance-site.com 这导致我的 cookie 保存在会话中(不是在不使用测试咖啡馆时通常发生的 cookie 下)作为锤头|存储包装|hoi23hh|acceptance-site.com
当我删除 .disablePageReloads,但保留角色上的 preserveUrl: true 时,“cookie”保持不变,但基本 url 更改为 172.0.0.1:8080/ohgbo223/ https://acceptance-site.com
因此 url 中的“hoi23hh”更改为“ohgbo223”,cookie/会话密钥不再与 url 匹配,身份验证失败。
您对保持身份验证有什么建议,同时仍然能够更改页面等