Karate如何拦截XHR请求响应码,实现第三方登录页面条件刷新?
方案1:Karate内置网络监听实现404捕获刷新
- Karate 1.0+版本内置
driver.listen()API,可直接监听页面所有网络请求,无需额外引入karate-netty组件(你之前查阅的netty文档适用于接口Mock/代理场景,UI测试场景直接用内置监听接口即可) - 实现代码示例:
# 替换为你需要监听的404 XHR请求的地址匹配规则,支持正则表达式 def xhrPattern = 'your-target-xhr-url-regex' def refreshFlag = false # 注册请求响应监听器 driver.listen({ type: 'request', filter: xhrPattern, onResponse: function(res) { if (res.status == 404) refreshFlag = true } }) # 访问登录页面 driver 'https://example.com/login' # 命中404则刷新页面 if (refreshFlag) driver.refresh() # 等待页面加载完成再执行后续操作 waitFor('body')
方案2:页面状态校验重试方案(无需监听网络请求)
如果不需要精准捕获XHR状态,可直接通过操作执行结果判断页面加载状态,逻辑更简单:
- 页面加载失败时执行shadow root操作会抛出
js eval failed异常,直接用重试逻辑捕获异常后刷新即可 - 实现代码示例:
def maxRetry = 3 def operationSuccess = false while (maxRetry > 0 && !operationSuccess) { try { driver 'https://example.com/login' # 替换为你原本的shadow root操作代码 eval(script("your-custom-script")) operationSuccess = true } catch (e) { maxRetry-- driver.refresh() karate.wait(1000) } }
两种方案均可满足需求,方案1可精准匹配指定404请求触发刷新,方案2无需配置请求规则适配性更强。
内容的提问来源于stack exchange,提问作者karateTester
相关产品推荐
相关产品推荐

