如何用WebdriverIO的wdio-intercept-service捕获全部API请求?
解决wdio-intercept-service无法捕获指定API的问题
wdio-intercept-service完全支持捕获自定义API,你遇到的问题大概率是使用方式或配置不当导致的,以下是几个排查方向:
1. 确保拦截器在API调用前初始化
必须在触发提交操作之前启动请求拦截,否则后续发起的API不会被记录:
// 先初始化拦截器 browser.setupInterceptor(); // 再执行点击提交操作 $('button[type="submit"]').click(); // 最后获取请求 const requests = browser.getRequests({ includePending: true });
2. 检查是否需要开启Fetch请求拦截
wdio-intercept-service默认仅拦截XMLHttpRequest请求,如果getPNR和fulfilPNR是通过Fetch API发送的,需要在wdio配置文件中开启Fetch拦截:
在wdio.conf.js的services配置中添加:
services: [ ['intercept', { fetch: true // 开启Fetch请求拦截 }] ]
3. 增加请求等待逻辑
即使使用includePending: true,点击提交后API请求可能还未发起,需要添加等待确保请求已触发:
$('button[type="submit"]').click(); // 等待至少3个请求出现,超时时间设为5秒 browser.waitUntil( () => browser.getRequests({ includePending: true }).length >= 3, { timeout: 5000, timeoutMsg: '未捕获到足够的API请求' } ); const requests = browser.getRequests({ includePending: true });
4. 排查版本兼容性问题
你使用的4.3.1版本可能存在特定场景下的拦截bug,比如对Fetch请求的支持不完善。可以尝试升级到该库的最新稳定版,或者查看该版本的官方issue,确认是否有类似未捕获请求的已知问题。
5. 检查请求路径/域名是否被过滤
查看是否有自定义的过滤规则,导致getPNR和fulfilPNR请求被排除。可以打印所有捕获到的请求URL,确认目标API是否在列表中:
console.log('捕获到的请求URL:', requests.map(req => req.url));
内容的提问来源于stack exchange,提问作者SnehaL
相关产品推荐
相关产品推荐

