首页 > 解决方案 > 如何禁用 TestCafe cookie 处理机制以允许默认浏览器 document.cookie 列表?

问题描述

我有一个业务需求来提取在我的测试过程中生成的所有 cookie。

但是我遇到了与此处讨论的类似问题,因为 TestCafe 使用自己的 cookie 处理机制。在我登录测试结束时document.cookie,我没有得到与手动完成测试旅程时相同的完整列表。通过 TestCafe 代理浏览器运行时,预期的 30 个 cookie 中至少有一半不存在。

我可以暂时禁用 TestCafe 的 cookie 处理机制来满足我的要求吗?

干杯

标签: javascripttestingcookiesautomated-teststestcafe

解决方案


无法禁用 TestCafe cookie 处理机制。但是,如果您需要收集随请求发送的所有 cookie,则可以使用请求记录器从请求标头中获取 cookie,如下例所示:

import _ from "lodash";

import { ClientFunction, RequestLogger, Selector } from "testcafe";

const logger = RequestLogger(/.*/, { logRequestHeaders: true });

const setCookie = ClientFunction(() => { document.cookie = 'foo=bar'; });

fixture `Cookie Test`
    .page('bing.com')
    .requestHooks(logger);

test('Send cookie', async t => {
    await setCookie();
    await t.click(Selector('#sb_go_par'));

    const cookies =
        _.uniq(
            _.flatMap(
                _.filter(
                    _.map(
                        _.flatMap(
                            logger.requests,
                            item => item.request.headers
                        ),
                        headers => headers.cookie
                    )
                ),
                cookies => cookies.split('; ')
            )
        );

    console.log(cookies);
    await t.expect(cookies).contains('foo=bar');
});

  另外,请注意,document.cookie不会显示仅 HTTP cookie 和其他域的 cookie,虽然它们通过 DevTools 可见,并且 TestCafe 每次都在清晰的环境中运行测试。因此,如果您手动运行测试场景来比较结果,则需要在隐身模式下进行;否则,您可能会从以前的会话中获得额外的 cookie。


推荐阅读