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

Cypress执行点击事件时如何处理服务端身份认证?

问题根因

该报错由Cypress默认运行机制与IBM Navigator for i(AS/400)认证逻辑不兼容导致。UFT、Protractor直接驱动原生浏览器透传全量认证上下文,手动操作也不会修改原始请求,但Cypress内置的请求代理层会默认拦截、剥离三类AS/400后端强校验的认证信息:

  • LTPA/LTPA2令牌、AS400专有认证Cookie
  • NTLM/Kerberos集成认证的自动凭据
  • 原生点击事件携带的隐式认证上下文
    因此部分链接点击时会被后端判定为未授权请求抛出错误。
修复方案

1. 基础配置放行认证信息

修改Cypress配置文件,关闭默认安全拦截、配置认证凭据自动透传、保留全量认证Cookie。
cypress.config.js配置示例:

const { defineConfig } = require("cypress");

module.exports = defineConfig({
  e2e: {
    baseUrl: "替换为自身环境的IBM Navigator访问地址",
    chromeWebSecurity: false,
    experimentalSessionAndOrigin: true,
    setupNodeEvents(on, config) {
      on("before:browser:launch", (browser, launchOptions) => {
        if (browser.family === "chromium") {
          // 配置Chrome自动传递NTLM认证凭据,关闭SameSite Cookie拦截
          launchOptions.args.push(
            "--auth-server-whitelist=*",
            "--auth-negotiate-delegate-whitelist=*",
            "--disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure"
          );
          return launchOptions;
        }
      });
    },
  },
});

在测试用例全局前置钩子中添加Cookie保留逻辑,避免页面跳转时认证态被Cypress自动清除:

beforeEach(() => {
  Cypress.Cookies.preserveOnce(
    "LtpaToken",
    "LtpaToken2", 
    "JSESSIONID",
    "PD-S-SESSION-ID"
  );
});

2. 替换点击逻辑为原生事件触发

Cypress默认的合成事件点击不会触发IBM Navigator绑定在原生鼠标事件上的认证参数拼接逻辑,替换点击代码如下:

// 替换原有 cy.get(元素选择器).click() 逻辑
cy.get("替换为5250 Emulation导航入口的元素选择器")
  .scrollIntoView()
  .should("be.visible")
  .click({
    force: true,
    eventConstructor: "MouseEvent",
    waitForAnimations: true
  });

3. 预请求预埋认证态(兜底方案)

上述配置仍不生效时,在点击导航前先通过cy.request手动携带全量Cookie请求目标页面,提前在浏览器上下文中种下合法访问态,再执行导航操作:

cy.getCookies().then(cookies => {
  const cookieStr = cookies.map(c => `${c.name}=${c.value}`).join("; ");
  cy.request({
    url: "替换为5250 Emulation页面对应的相对路径",
    headers: { Cookie: cookieStr },
    failOnStatusCode: false
  });
});
// 预请求完成后再执行点击导航操作
注意事项
  • 测试必须使用Chrome/Edge浏览器运行,不要用Cypress默认的Electron,Electron对IBM NTLM认证兼容性极差
  • 登录步骤必须走页面输入账号密码的完整流程,不要用接口代登,否则会缺失后端校验的浏览器指纹类参数
  • 环境开启双因子认证时,需要在Cypress请求拦截逻辑中添加对应认证头的白名单,避免被代理层篡改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:03:19