如何通过参数禁用Chromium的集成Windows身份验证?原参数已失效
解决Chromium集成Windows身份验证失效及CodeceptJS多用户SSO测试问题
方案一:禁用身份验证协商特性
之前的--auth-server-whitelist="_"参数失效后,可以改用更彻底的Chromium启动参数直接关闭自动身份验证逻辑:
- 使用
--disable-features=AuthNegotiateDelegateWhitelist参数,该参数会完全禁用Kerberos/NTLM的自动协商身份验证,强制页面走手动登录流程。 - 在CodeceptJS的配置文件
codecept.conf.js中添加该参数:
helpers: { Puppeteer: { url: 'https://你的企业SSO地址', browser: 'chromium', launchOptions: { args: [ '--disable-features=AuthNegotiateDelegateWhitelist', '--no-sandbox' // 本地测试环境可选,解决启动权限问题 ] } } }
方案二:用独立用户数据目录隔离会话
通过为每个测试用户指定单独的Chromium用户数据目录,实现不同用户的SSO会话完全隔离:
- 本地创建多个独立目录,比如
C:\test-profiles\user-a、C:\test-profiles\user-b,每个目录对应一个测试用户。 - 在CodeceptJS配置中通过
--user-data-dir指定对应目录:
launchOptions: { args: [ '--user-data-dir=C:\\test-profiles\\user-a', '--no-sandbox' ] }
- 切换测试用户时,修改
--user-data-dir的路径即可,每个目录会存储独立的登录状态、Cookie等数据,不会互相干扰。
方案三:Playwright上下文隔离(推荐)
如果使用Playwright作为CodeceptJS的测试Helper,可以利用其独立浏览器上下文功能,无需重启浏览器即可快速切换用户:
- 配置示例:
helpers: { Playwright: { url: 'https://你的企业SSO地址', browser: 'chromium' } }
- 测试代码中创建独立上下文:
Scenario('多用户SSO测试', async ({ I }) => { // 第一个用户登录 const user1Context = await I.createBrowserContext(); await user1Context.goto('/login'); await I.fillField('用户名', 'user1'); await I.fillField('密码', 'user1-pass'); await I.click('登录'); // 执行用户1的测试操作 await user1Context.close(); // 第二个用户登录 const user2Context = await I.createBrowserContext(); await user2Context.goto('/login'); await I.fillField('用户名', 'user2'); await I.fillField('密码', 'user2-pass'); await I.click('登录'); // 执行用户2的测试操作 await user2Context.close(); });
每个浏览器上下文拥有独立的存储环境,完全隔离用户会话,适合频繁切换用户的测试场景。
注意事项
- 测试前建议清理旧的用户数据目录,避免残留的登录会话干扰测试结果。
- 如果企业SSO有设备绑定限制,可添加
--disable-device-discovery-notifications参数辅助绕过。 - 本地测试时
--no-sandbox参数可能需要,否则Chromium可能因权限问题启动失败。
内容的提问来源于stack exchange,提问作者Alex Dudyak
相关产品推荐
相关产品推荐

