我知道错误的原因是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}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:751:32)
at Request.end (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:1507:10)
at end (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:564:14)
at Immediate._onImmediate (C:\Users\{user}\AppData\Local\Cypress\Cache\4.0.0\Cypress\resources\app\packages\server\node_modules\request\request.js:578:7)
at processImmediate (internal/timers.js:439:21)
发布于 2020-02-12 16:19:16
修复错误的正确方法是在应用程序保存cookie时对其进行转义。但是,如果由于某些原因无法修复应用程序代码,解决方法可能是使用override visit()
命令,并在每个请求的末尾转义无效的cookies:
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
});
}
});
}
https://stackoverflow.com/questions/60183894
复制相似问题