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

Cypress执行cy.visit()时跳转至非目标请求页面问题如何解决

问题原因

  • 最常见原因 应用自身路由鉴权逻辑:当前cy.login()登录的账号无/sites/2/users页面的访问权限,前端路由守卫或后端鉴权逻辑自动将请求重定向到/sites/2/global
  • 登录方法未完成全流程:cy.login()自定义命令存在未处理的异步跳转逻辑,登录完成后残留的重定向操作覆盖了后续cy.visit的目标地址
  • 服务端重定向配置:后端对/sites/2/users路径配置了301/302重定向规则,直接返回了/sites/2/global作为目标地址
  • Cypress全局配置干扰:cypress/support目录下的全局钩子函数存在路由修改逻辑,强制跳转至/sites/2/global

解决步骤

  1. 优先排除应用本身逻辑问题:手动打开浏览器,使用和cy.login()相同的账号登录系统,直接输入地址http://localhost:3002/sites/2/users,确认是否会自动跳转。如果跳转,优先处理应用逻辑:
    • 更换拥有用户管理权限的测试账号登录
    • 临时关闭测试环境下的页面访问权限校验
  2. 优化测试用例逻辑:
    • 给登录请求添加别名,等待登录全流程完成后再执行访问操作:
    // 登录逻辑中给登录接口打别名
    cy.intercept('POST', '/api/login').as('loginReq')
    cy.login()
    cy.wait('@loginReq')
    
    • 检查cy.visit的响应状态,确认重定向来源:
    cy.visit("/sites/2/users", { failOnStatusCode: false })
      .then((res) => {
        // 打印状态码,如果是3xx说明是服务端返回的重定向
        console.log('访问响应状态:', res.status)
        // 打印响应头的location字段,确认重定向地址是否由服务端返回
        console.log('重定向地址:', res.headers?.location)
      })
    
  3. 排查全局配置:检查cypress/support/e2e.js(旧版本对应index.js)中是否存在全局beforeEach、afterEach钩子修改路由路径,或者是否有全局拦截器重写了访问地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03