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
相关产品推荐
相关产品推荐

