假设这是由 SameSite cookie blocking 引起的,那么我一直在解决同样的问题。我通过拦截所有请求、检查它们是否具有 set-cookie 标头并重写 SameSite 属性来解决它。可能有一种更简洁的方法可以做到这一点,因为这确实会使柏树仪表板有点混乱。
SameSiteByDefaultCookies
可悲的是,随着 Chrome 94 删除了标志,Zachary Costa 的回答不再有效。
您可以将其添加为命令以便于重用:
在您的命令文件中:
declare namespace Cypress {
interface Chainable<Subject> {
disableSameSiteCookieRestrictions(): void;
}
}
Cypress.Commands.add('disableSameSiteCookieRestrictions', () => {
cy.intercept('*', (req) => {
req.on('response', (res) => {
if (!res.headers['set-cookie']) {
return;
}
const disableSameSite = (headerContent: string): string => {
return headerContent.replace(/samesite=(lax|strict)/ig, 'samesite=none');
}
if (Array.isArray(res.headers['set-cookie'])) {
res.headers['set-cookie'] = res.headers['set-cookie'].map(disableSameSite);
} else {
res.headers['set-cookie'] = disableSameSite(res.headers['set-cookie']);
}
})
});
});
用法:
it('should login using third party idp', () => {
cy.disableSameSiteCookieRestrictions();
//add test body here
});
或者,在每次测试之前运行它:
beforeEach(() => cy.disableSameSiteCookieRestrictions());