Cypress Access()失败:TypeError:标题内容["Cookie&Quot;]中的字符无效 [英] Cypress visit() fails: TypeError: Invalid character in header content ["cookie"]

查看:19
本文介绍了Cypress Access()失败:TypeError:标题内容["Cookie&Quot;]中的字符无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道错误原因是Cookie中的无效字符,但在我的情况下,我更喜欢找到一种解决方法,而不固定Cookie的保存方式。错误堆栈跟踪为:

TypeError [ERR_INVALID_CHAR] [ERR_INVALID_CHAR]: Invalid character in header content ["cookie"]
    at ClientRequest.setHeader (_http_outgoing.js:467:3)
    at new ClientRequest (_http_client.js:222:14)
    at Object.request (https.js:309:10)
    at Request.start (C:Users{user}AppDataLocalCypressCache4.0.0Cypress
esourcesapppackagesserver
ode_modules
equest
equest.js:751:32)
    at Request.end (C:Users{user}AppDataLocalCypressCache4.0.0Cypress
esourcesapppackagesserver
ode_modules
equest
equest.js:1507:10)
    at end (C:Users{user}AppDataLocalCypressCache4.0.0Cypress
esourcesapppackagesserver
ode_modules
equest
equest.js:564:14)
    at Immediate._onImmediate (C:Users{user}AppDataLocalCypressCache4.0.0Cypress
esourcesapppackagesserver
ode_modules
equest
equest.js:578:7)
    at processImmediate (internal/timers.js:439:21)

推荐答案

修复错误的正确方法是在应用程序保存Cookie时对其进行转义。但是,如果由于某些原因无法修复应用程序代码,解决方法可能是使用overridevisit()命令并在每个请求的末尾转义无效的cookie:

Cypress.Commands.overwrite('visit', (originalFn, ...args) => {
  const [ url, options ] = (() => {
    if (typeof args[0] === 'object') {
      const { url, ...options } = args[0];
      return [ url, options ];
    } else {
      return args;
    }
  })();

  if (options && options.__original) {
    return originalFn(url, options);
  } else {
    escapeCookie("firstInvalidCookie");
    escapeCookie("secondInvalidCookie");

    return cy.visit(url, {
      ...options,
      __original: true
    });
  }
});

function escapeCookie(name) {
  return cy.getCookie(name, { log: false }).then(cookie => {
    cy.clearCookie(name, { log: false });

    if (cookie) {
      cy.setCookie(name, encodeURIComponent(cookie.value), {
        domain: 'my.domain.com',
        log: false
      });
    }
  });
}

这篇关于Cypress Access()失败:TypeError:标题内容["Cookie&Quot;]中的字符无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆