Cypress 10+测试中Microsoft SSO登录遇Cookie拦截错误的解决方法
调整Cypress全局Cookie与安全配置
在cypress.config.js中修改以下配置,确保第三方Cookie和跨域请求被允许:
export default defineConfig({ e2e: { // 禁用第三方Cookie拦截 blockThirdPartyCookies: false, // 允许跨域测试(适配SSO场景) chromeWebSecurity: false, // 开启session的跨用例缓存 session: { cacheAcrossSpecs: true, }, }, });
优化cy.session与cy.origin的登录逻辑
针对Microsoft SSO的流程,完善登录代码,确保Cookie被正确保留,同时提升步骤可靠性:
cy.session([args.email, args.password], () => { cy.origin(`https://login.microsoftonline.com/`, { args: { email: args.email, password: args.password } }, ({ email, password }) => { // 访问应用对应的具体SSO授权端点,而非根路径 cy.visit('/{your-tenant-id}/oauth2/v2.0/authorize?client_id={your-client-id}&response_type=code&redirect_uri={your-app-redirect-uri}&scope=openid%20profile%20offline_access'); // 输入邮箱并提交 cy.get('[name="loginfmt"]').type(email); cy.get('[type="submit"]').click(); // 输入密码并提交 cy.get('[name="passwd"]').type(password); cy.get('[type="submit"]').click(); // 处理“保持登录”提示(忽略元素不存在的情况) cy.get('[name="Kmsi"]').click({ force: true }).catch(() => {}); } ); }, { // 验证登录状态是否有效 validate: () => { cy.visit('{your-app-home-url}'); cy.get('.user-identification-element').should('be.visible'); // 替换为应用中标识登录的元素 } });
关键说明
- 替换代码中的占位符(如
{your-tenant-id}、{your-client-id})为实际的应用配置值 - 使用
click()替代type('{enter}')可避免输入框聚焦问题,提升提交可靠性 validate函数用于确保session有效,避免因Cookie失效导致的重复登录
内容的提问来源于stack exchange,提问作者seventhRider
相关产品推荐
相关产品推荐

