2

我知道这个话题被讨论了很多,但我有一个独特的情况。

为了测试我们的验收环境,我们需要点击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 匹配,身份验证失败。

您对保持身份验证有什么建议,同时仍然能够更改页面等

4

1 回答 1

1

我不建议将此disablePageReloads功能与角色一起使用,因为它是内部的并且可能不稳定。preserveUrl 选项将允许每个测试从https://acceptance-site.com页面开始。所以,我认为在你的情况下这是最可取的方式::

const a3 = Role('https://acceptance-site.com', async testController => {
    ...
}, { preserveUrl: true });

fixture('Testing acceptance')
    .beforeEach(async testController => {
        await testController.useRole(authenticate);
});

test('example1', async testController => {
    await testController.debug();
})

test('example2', async testController => {
    await testController.debug();
})
于 2018-10-25T10:07:19.517 回答