我的测试单击一个链接,该链接会指向同一超级域上的页面。然后,在同一超级域内对此 url 的请求会重定向到不同的域进行响应。
问题是源页面的cookie没有随一起发送。因此请求失败并且不会发生重定向。
在 Cypress 11 中,我有以下工作解决方案:
cy.contains('ACTIVATE ACCOUNT').invoke('removeAttr', 'target').click();
在 Cypress 13 中,我需要显式设置访问源的 cookie:
cy.contains('ACTIVATE ACCOUNT').invoke('attr', 'href').then(initialHref => {
cy.getCookies().then(cookies => {
const cookieString = cookies.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
cy.visit(initialHref, {
headers: {
'Cookie': cookieString,
}
})
});
});
我的问题是为什么第一个解决方案停止工作?我在变更日志中没有找到任何内容https://docs.cypress.io/guides/references/changelog 起初我认为这可能与 cy.origin 有关,但该链接位于同一超域内。我想到了 cy.session 但这是为了在测试之间共享会话状态。此外,Cypress 现在将 cookie 域设置为主机域而不是超级域,但也不是这样。此次访问不再包含 cookie。
编辑:至于我为什么问。继续使用 click 会很酷,因为我想在我的 e2e 中模拟真实用户。
Cypress 13 不像 Cypress 11 那样随请求发送 cookie 的问题可能源于 Cypress 内部处理 cookie 和跨域策略的变化,或者浏览器安全功能的更新,这些更新对跨域 cookie 处理变得更加严格。这些修改可能会影响自动化测试期间 cookie 的管理方式,因此需要采取变通办法,例如在导航上显式设置 cookie。