带参数调用 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();

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

  1. 如何在 Testcafe 中将 Cookie 名称等参数传递给客户端函数?
  2. 如何检查 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/);