使用wdio intercept service时browser.getRequest无法获取数据求助
解决wdio-intercept-service捕获不到请求返回空数组的问题
你的代码存在两个核心问题,导致无法捕获到目标请求:
1. 未初始化请求拦截器
wdio-intercept-service需要先调用browser.setupInterceptor()启动网络请求监听,否则后续的expectRequest和getRequest都无法捕获任何请求。这个步骤必须在加载页面或触发请求之前执行。
2. 请求监听的顺序错误
你是先触发了搜索请求(输入"mobile"),再调用expectRequest,此时请求已经发送完成,拦截器来不及捕获。正确的顺序应该是先设置请求预期,再触发请求。
另外,使用完整URL匹配请求时容易因为查询参数、域名差异等问题导致匹配失败,改用正则表达式匹配路径部分会更可靠。
修正后的代码
it("test a", async () => { // 先启动请求拦截器 await browser.setupInterceptor(); await browser.url("https://www.amazon.in/") const input = await $("#twotabsearchtextbox") // 先设置请求预期,再触发搜索请求 await browser.expectRequest("GET", /\/api\/2017\/suggestions/, 200) await input.setValue("mobile") await browser.pause(3000) // 用正则匹配请求路径,避免精确URL匹配的问题 const searchSuggestions = await browser.getRequest( "GET", /\/api\/2017\/suggestions/ ) console.log("Captured requests:", searchSuggestions) expect(searchSuggestions).to.have.length.above(0) })
额外检查项
- 确认
wdio-intercept-service与你的WebdriverIO版本兼容,可查看package.json中的依赖版本是否匹配官方要求。 - 确保测试使用的是支持Chrome DevTools Protocol的浏览器(如Chrome、Edge),该服务依赖CDP实现网络拦截。
- 如果请求带有动态参数(如时间戳、随机ID),正则表达式要避开这些动态部分,只匹配固定的路径结构。
内容的提问来源于stack exchange,提问作者Riddle
相关产品推荐
相关产品推荐

