使用参数调用Testcafe客户端函数



我是Testcafe的新手,并实现了一个客户端功能,可以按名称读取网站设置的所有待测试Cookie,因为没有直接的方法可以读取Testcafe中的所有Cookie并检查Cookie是否有特定的名称;因此,客户端函数应该完成这项任务。不幸的是,在检查了网络上所有可能的资源后,我不知道如何用参数调用客户端函数,这样要测试的Cookie的名称就可以作为参数传递给客户端函数。我没有找到任何关于如何在Testcafe客户端函数中传递参数的例子。

这是客户端功能:

const getCookiesFromSite = ClientFunction(() => {
let cookies = document.cookie.split(";");

})

这是我想在客户端功能中实现的Javascript代码,它需要一个Cookie名称作为参数:

function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

它也可以是任何其他允许检查Cookie名称的Javascript函数;问题出现在这里,在这一行中,我需要检查某个Cookie名称:

await t.wait(3000);
await t.navigateTo('http://www.myfavouritewebsite.com')
const cookies1 = await getCookiesFromSite();
//await t.expect(cookies1.length).eql(15 || 20)
//await t.expect(getCookies).contains('cookie_name')

在下面的行中,我想检查是否设置了具有特定名称的Cookie;由于我需要对照几个名字进行检查,我甚至需要一个数组来完成这项工作:

await t.expect(getCookiesFromSite()).contains('cookie_name');

这是测试的其余部分:

await t.switchToIframe(Selector('*[id^=sp_message_iframe_]'));
await t.expect(Selector('button[title="Accept all"]').exists).ok();
await t.switchToMainWindow();
await consentLayer.clickAcceptButton();
await t.eval(() => location.reload(true))
const cookies2 = await getCookiesFromSite();

因此,这里有两个重点问题:

  1. 如何在Testcafe中将Cookie名称等参数传递给客户端函数
  2. 如何检查Testcafe返回的数组是否包含Cookie名称,甚至包含多个Cookie名称

任何提示或帮助都将不胜感激,提前感谢

以下是如何将参数传递到ClientFunction的示例:将参数传递给客户端函数。

contains断言可以检查数组中是否存在特定元素。要检查几个cookie名称,可以从ClientFunction返回整个cookie字符串,并使用t.expect.match方法:

const getCookiesFromSite = ClientFunction(() => 'Cookie_1; Cookie_2; Cookie_3');
await t.expect(getCookiesFromSite()).match(/Cookie_1|Cookie_2/);

最新更新