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

Cypress设置req.followRedirect=false无法阻止页面重定向该如何解决?

问题根因

你在cy.intercept中设置的req.followRedirect = false仅作用于Cypress的代理层,控制Cypress自身是否跟随重定向获取后续响应内容,完全不会影响浏览器的默认跳转行为。官方示例中cy.request的followRedirect配置也是同理,它仅控制cy.request命令自身的请求逻辑,和页面内浏览器触发的跳转无关。

可行解决方案

方案1:篡改重定向响应,阻止浏览器触发跳转

浏览器只有收到3xx状态码才会执行跳转逻辑,我们可以直接在拦截逻辑中修改响应状态,切断跳转触发条件,同时保留原始跳转信息用于断言:

it('should redirect to some external website on click', () => {
  cy.intercept(
    'GET',
    'http://localhost.com:4100?*',
    (req: CyHttpMessages.IncomingHttpRequest) => {
      req.reply((res) => {
        // 篡改响应,将3xx重定向状态改为200,把原始跳转地址存入自定义头用于断言
        res.send({
          statusCode: 200,
          body: '',
          headers: {
            'x-original-location': res.headers.location
          }
        })
      })
    }
  ).as('redirect');

  cy.get('#some-button').click(); // 点击该按钮会触发重定向
  cy.wait('@redirect')
      .its('response.headers.x-original-location')
      .should('include', 'value-A')
      .and('include', 'value-B');
});

该方案兼容所有重定向场景,包括服务端返回3xx跳转、前端JS主动触发window.location跳转。

方案2:修改跳转触发元素属性,阻止原生跳转

如果跳转是通过<a>标签的href属性触发的,可以直接修改元素属性阻断跳转:

cy.get('#some-button')
  .invoke('removeAttr', 'href') // 移除href属性,阻止原生跳转
  .click();
// 后续正常断言请求参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:10