带参数调用 Testcafe 客户端函数
Call Testcafe Client Function with Parameters
我是 Testcafe 的新手,我实现了一个客户端功能来读取由要测试的网站设置的所有 Cookie,因为没有直接的方法来读取 Testcafe 中的所有 Cookie 并检查 Cookie 是否具有某个名字;因此,客户端功能应该可以解决问题。不幸的是,在检查了网络上所有可能的 Ressource 之后,我无法弄清楚如何使用参数调用 Client Function,以便将要测试的 Cookie 的名称作为参数传递给 Client Function。我没有找到任何关于如何在 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 "";
}
也可以是任何其他Javascript允许检查Cookies名称的函数;问题出现在这里,在这一行中,我需要检查某个 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();
因此,这里重点关注两个问题:
- 如何在 Testcafe 中将 Cookie 名称等参数传递给客户端函数?
- 如何检查 Testcafe 返回的数组是否包含一个 Cookie 名称或什至多个 Cookie 名称?
任何提示或帮助将不胜感激,提前致谢
下面是一个如何将参数传递给 ClientFunction 的示例:Pass Parameters to Client Functions。
contains
断言可以检查数组中是否存在特定元素。要检查多个 cookie 名称,您可以 return 来自 ClientFunction 的整个 cookie 字符串并使用 t.expect.match 方法:
const getCookiesFromSite = ClientFunction(() => 'Cookie_1; Cookie_2; Cookie_3');
await t.expect(getCookiesFromSite()).match(/Cookie_1|Cookie_2/);
我是 Testcafe 的新手,我实现了一个客户端功能来读取由要测试的网站设置的所有 Cookie,因为没有直接的方法来读取 Testcafe 中的所有 Cookie 并检查 Cookie 是否具有某个名字;因此,客户端功能应该可以解决问题。不幸的是,在检查了网络上所有可能的 Ressource 之后,我无法弄清楚如何使用参数调用 Client Function,以便将要测试的 Cookie 的名称作为参数传递给 Client Function。我没有找到任何关于如何在 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 "";
}
也可以是任何其他Javascript允许检查Cookies名称的函数;问题出现在这里,在这一行中,我需要检查某个 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();
因此,这里重点关注两个问题:
- 如何在 Testcafe 中将 Cookie 名称等参数传递给客户端函数?
- 如何检查 Testcafe 返回的数组是否包含一个 Cookie 名称或什至多个 Cookie 名称?
任何提示或帮助将不胜感激,提前致谢
下面是一个如何将参数传递给 ClientFunction 的示例:Pass Parameters to Client Functions。
contains
断言可以检查数组中是否存在特定元素。要检查多个 cookie 名称,您可以 return 来自 ClientFunction 的整个 cookie 字符串并使用 t.expect.match 方法:
const getCookiesFromSite = ClientFunction(() => 'Cookie_1; Cookie_2; Cookie_3');
await t.expect(getCookiesFromSite()).match(/Cookie_1|Cookie_2/);