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

Windows11下Cypress Firefox测试默认使用系统SSO登录Azure问题求助

Windows 11下Cypress+Firefox测试Azure应用时强制使用系统SSO登录的问题

在Windows 11设备上用Cypress测试Azure应用时,测试本该使用指定的测试账号,但运行器始终默认走系统SSO登录。测试基于Firefox浏览器执行,已经手动清除Firefox缓存和存储、移除保存的登录凭据,也尝试了无头模式,但问题依旧。同一代码在Mac设备上运行正常。

相关配置及代码

cypress.config.js

const { defineConfig } = require('cypress')
const setConfig = require('./cypress/plugins/index')
module.exports = defineConfig({
env: {
    testEnv: 'stage1',
    user: 'testuser&gmail.com',
    secret: 'password'
},
reporter: 'cypress-multi-reporters',
reporterOptions: {
    configFile: 'reporter-config.json',
},
"trashAssetsBeforeRuns": true,
defaultCommandTimeout: 10000, 
pageLoadTimeout: 60000,          
e2e: {
    setupNodeEvents: setConfig,
    baseUrl: `https://applicationurl.com`,
    experimentalModifyObstructiveThirdPartyCode: true,
    chromeWebSecurity: false,
    firefoxWebDriverBiDi: true,
},
});

Azure登录自定义命令

Cypress.Commands.add('loginViaADD', () => {
cy.origin('https://login.microsoftonline.com', () => {
    cy.visit(`${Cypress.config('baseUrl')}/testendpoint`)
    //provide username
    cy.get('input[name="loginfmt"]').type(Cypress.env('user'))
    cy.get('input[type="submit"]').click()
    // provide password
    cy.get('input[type="password"]').type(Cypress.env('secret'))
    cy.get('input[type="submit"]').click()
})})

Cypress.Commands.add('loginToADD', () => {
cy.session('azure login', () => {
    cy.loginViaADD()
}, {
    cacheAcrossSpecs: true
})
})

调用登录命令的测试用例文件

describe('Azure Test', () => {
before(() => {
    cy.loginToADD();
})
beforeEach(() => {
    cy.visit(`${Cypress.config('baseUrl')}/testendpoint`)
})

it('Test', () => {
    cy.contains('button', 'Create').click()
});
});

解决思路及建议

  • 禁用Firefox的系统集成SSO
    Windows上Firefox默认会集成Windows的SSO功能(如Windows Hello或Azure AD系统级认证),可在Cypress配置中添加启动参数强制禁用:

    e2e: {
      // 保留原有配置
      browsers: [
        {
          name: 'firefox',
          channel: 'stable',
          args: [
            '--disable-features=WindowsAzureADWebAccountManager',
            '--disable-integration-with-default-browser',
            '--no-default-browser-check'
          ]
        }
      ]
    }
    

    这些参数会阻止Firefox调用系统级SSO,强制走账号密码登录流程。

  • 优化cy.origin使用逻辑
    当前命令在cy.origin内部访问应用端点,易导致跳转逻辑混乱。正确流程应先访问应用登录入口,触发跳转至Azure登录页后再处理:

    Cypress.Commands.add('loginViaADD', () => {
      // 先访问应用入口,触发跳转至Azure登录页
      cy.visit(`${Cypress.config('baseUrl')}/testendpoint`)
      // 跳转到Azure域名后,在cy.origin中处理登录
      cy.origin('https://login.microsoftonline.com', () => {
        cy.get('input[name="loginfmt"]', { timeout: 15000 }).type(Cypress.env('user'))
        cy.get('input[type="submit"]').click()
        cy.get('input[type="password"]', { timeout: 15000 }).type(Cypress.env('secret'))
        cy.get('input[type="submit"]').click()
        // 处理"保持登录"弹窗(如果存在)
        cy.get('input[id="idBtn_Back"]', { timeout: 10000 }).click({ force: true }).catch(() => {})
      })
    })
    
  • 调整Cypress Session缓存策略
    Windows上Session缓存可能与系统SSO冲突,可尝试禁用跨用例缓存或添加预清除逻辑:

    Cypress.Commands.add('loginToADD', () => {
      cy.session('azure login', () => {
        // 登录前强制清除所有存储
        cy.clearAllCookies()
        cy.clearAllLocalStorage()
        cy.clearAllSessionStorage()
        cy.loginViaADD()
      }, {
        cacheAcrossSpecs: false, // 先禁用跨用例缓存测试
        validate: () => {
          // 验证登录状态,避免缓存无效会话
          cy.visit(`${Cypress.config('baseUrl')}/testendpoint`)
          cy.contains('Create').should('be.visible')
        }
      })
    })
    
  • 检查Windows系统SSO设置

    • 打开Windows设置 → 账户 → 访问工作或学校,移除与测试应用关联的账户
    • 打开"凭据管理器",删除所有与Azure AD、测试应用相关的Windows凭据

内容的提问来源于stack exchange,提问作者Kavya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:20:04