You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress 10+测试中Microsoft SSO登录遇Cookie拦截错误的解决方法

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:50:25