Cypress如何使用intercept拦截端点不含指定字符串的GET请求
Cypress 拦截不含指定路径段的GET请求实现方案
Cypress 完全支持这类反向匹配的拦截规则,有两种常用实现方式:
方案1:使用正则负向预查实现匹配
直接在cy.intercept的路径参数传入正则表达式,通过负向预查规则过滤掉包含f0000000000的请求:
// 正则说明:(?!f0000000000) 为负向预查规则,匹配指定路径段不是f0000000000的请求 cy.intercept("GET", /\/(?!f0000000000)[^/]+\/path1.*/).as('getForecast'); cy.get('#some').click(); // 示例场景中只有1个符合规则的请求,直接等待一次即可 cy.wait('@getForecast').its('response.statusCode').should('eq', 200);
方案2:使用自定义过滤函数(更直观易维护)
如果觉得正则写法复杂,也可以通过cy.intercept的请求回调函数手动判断过滤,仅给符合条件的请求挂载别名:
cy.intercept('GET', '**/path1*', (req) => { // 仅当请求URL不包含f0000000000时,才绑定getForecast别名 if (!req.url.includes('f0000000000')) { req.alias = 'getForecast' } }) cy.get('#some').click(); cy.wait('@getForecast').its('response.statusCode').should('eq', 200);
注意事项
- 如果页面触发的符合规则的请求不止1个,需要按实际数量传入
cy.wait参数,比如2个符合要求的请求就写cy.wait(['@getForecast', '@getForecast']) - 第二种方案灵活度更高,还可以扩展判断请求头、请求参数等更多过滤条件
内容的提问来源于stack exchange,提问作者Dhamo
相关产品推荐
相关产品推荐

