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

使用Cypress进行测试自动化时如何处理Windows身份验证弹窗?

问题根因与解决方案

首先明确核心判断偏差:你遇到的Windows账号密码提示框不是JS层面的window.prompt()弹窗,是浏览器原生的HTTP Basic认证弹窗。这也是你stub prompt方法完全不生效、找不到button#signin元素的根本原因——未通过HTTP认证前,目标页面的DOM不会被渲染,自然不存在你要定位的登录按钮。


问题一修复方案

不要尝试通过stub JS方法处理原生系统弹窗,直接通过请求拦截自动注入认证凭据,从根源绕过弹窗:

  1. 先在Cypress配置文件中关闭Web安全限制,避免跨域跳转、凭据传递被浏览器拦截:
// cypress.config.js (旧版本对应cypress.json配置项)
const { defineConfig } = require("cypress");

module.exports = defineConfig({
  chromeWebSecurity: false,
  e2e: {
    setupNodeEvents(on, config) {
      // 保留原有项目配置即可
    },
  },
});
  1. 测试用例中,在点击跳转链接触发导航前,配置拦截规则给所有目标站点的请求自动添加认证头:
// 配置测试账号信息
const testUsername = "你的测试账号"
const testPassword = "你的测试密码"
const basicAuthHeader = "Basic " + btoa(`${testUsername}:${testPassword}`)

// 拦截所有指向测试站点的请求,注入认证信息
cy.intercept("https://mytestingwebsite.com/**", (req) => {
  req.headers["Authorization"] = basicAuthHeader
})

// 你已经提前移除了链接的target属性,直接点击即可在当前tab跳转
// 注意:如果移除target的操作是用cy.invoke('removeAttr','target')实现的,要放在intercept配置之后执行,避免跳转早于规则生效
cy.get("a#触发跳转的链接选择器").click()

// 认证自动完成,页面正常渲染后即可定位到登录按钮、下载按钮等元素
cy.get("button#signin", { timeout: 30000 }).should("be.visible")
// 后续登录、点击下载的逻辑按正常流程编写即可

问题二修复方案

你实现的forceVisit自定义命令失效有两点核心原因:

  • 现代Chromium内核浏览器默认拦截JS触发的window.open加载user:pass@domain格式的带凭据URL,判定为钓鱼风险
  • Cypress默认的同源安全策略会在跨域跳转时自动剥离URL中嵌入的身份凭据

可以二选一选择修复方式:

  • 优先使用上面提到的请求头注入方案,不需要拼接带凭据的URL,直接正常调用cy.visit('https://mytestingwebsite.com')即可,拦截规则会自动携带认证信息,不会弹出原生提示框。
  • 如果要保留带凭据访问的逻辑,不要用win.open实现跳转,直接使用Cypress原生支持的auth配置项传参,不会被浏览器安全策略拦截:
// 替换原有的cy.forceVisit调用即可
cy.visit("https://mytestingwebsite.com", {
  auth: {
    username: "你的测试账号",
    password: "你的测试密码"
  },
  failOnStatusCode: false
})

注意:如果是从mailtrap.io等其他域名跨域跳转到测试站点,必须先配置前面提到的chromeWebSecurity: false,否则跨域场景下认证信息无法正常携带。


下载操作补充说明

点击下载按钮如果触发的是浏览器原生文件保存弹窗,不要直接等待系统弹窗响应,可以通过cy.intercept监听下载接口拿到响应内容做断言,也可以搭配官方下载插件处理文件落盘校验,不需要操作系统级弹窗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:09:36