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

Cypress测试访问被拦截链接如何无需降低pageLoadTimeout检测加载失败

Cypress访问被拦截链接避免超时的解决方案

方案1:通过cy.intercept()提前监听目标请求

该方案无需修改全局pageLoadTimeout参数,通过捕获访问请求的响应状态直接判断是否被拦截,请求返回后立即得出结果,无需等待页面加载超时。
操作逻辑:

  • 先注册对目标访问地址的请求监听,设置别名
  • 调用cy.visit()时添加failOnStatusCode: false配置,避免非2xx/3xx状态码直接抛出错误
  • 等待监听的请求返回,直接断言响应状态码是否符合拦截预期

代码示例:

// 替换为你要访问的目标地址匹配规则
cy.intercept('GET', '/your-target-path/*').as('targetVisit')
// 调用visit,关闭状态码校验
cy.visit('https://your-target-url.com', { failOnStatusCode: false })
// 等待请求返回,断言拦截状态码,这里以常见的403拦截为例
cy.wait('@targetVisit').its('response.statusCode').should('eq', 403)

如果你的拦截场景是网络层面直接断开连接、请求无响应返回,cy.wait()也可以单独设置超时时间,该配置和全局pageLoadTimeout互不影响:

// 10秒内无请求返回即可判定为拦截生效
cy.wait('@targetVisit', { timeout: 10000 }).should('not.exist')

方案2:前置cy.request()预检访问状态

如果不需要验证页面渲染效果,仅需要确认访问被拦截,可以用cy.request()提前发起请求校验,该方法的超时配置独立于pageLoadTimeout,可以单独设置短超时:

cy.request({
  method: 'GET',
  url: 'https://your-target-url.com',
  failOnStatusCode: false,
  // 单独设置该请求的超时时间,不影响全局配置
  timeout: 10000
}).its('status').should('eq', 403)

注意事项

  • 如果需要验证拦截后的页面提示内容,在请求断言完成后,可以直接定位页面上的拦截提示元素做校验,不需要等待页面触发load事件
  • 拦截状态码根据你的业务实际场景调整,常见的拦截状态码包括401、403、451等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:36:03