Karate UI自动化:如何获取Chrome网络日志及Oauth2.0 Bearer令牌
在Karate UI中获取Chrome网络日志并提取Bearer令牌
1. 配置Chrome启用网络日志
要在Karate UI中捕获Chrome的网络日志,需在浏览器启动配置中开启性能日志采集,核心是设置perfLoggingPrefs参数:
* configure driver = { type: 'chrome', options: { args: ['--enable-logging', '--v=1'], perfLoggingPrefs: { enableNetwork: true, enablePage: true } } }
perfLoggingPrefs.enableNetwork:开启网络请求日志采集--enable-logging和--v=1:确保Chrome输出可被Karate捕获的日志信息
2. 获取网络日志并提取Bearer令牌
完成微软SSO登录操作后,可通过两种方式获取日志并提取令牌:
方式一:导出HAR格式日志(推荐)
HAR格式包含所有网络请求的完整详情,直接遍历即可找到带Bearer令牌的响应/请求头:
# 完成登录流程后获取HAR日志 * def harLogs = driver.performance.getLogs('HAR') # 遍历日志条目提取Bearer令牌 * def bearerToken = null * karate.forEach(harLogs.entries, function(entry){ # 检查响应头中是否存在Authorization字段 if (entry.response.headers.Authorization) { bearerToken = entry.response.headers.Authorization.replace('Bearer ', '') } }) # 验证令牌获取成功 * assert bearerToken != null # 后续API请求直接复用令牌 * configure headers = { Authorization: 'Bearer ' + bearerToken }
方式二:实时监听网络请求
通过Chrome DevTools的事件监听,在请求发送时直接捕获令牌:
# 启用网络监控 * driver.devTools.network.enable() # 定义回调函数捕获带Authorization头的请求 * def captureToken = function(event){ if (event.request.headers.Authorization) { karate.set('bearerToken', event.request.headers.Authorization.replace('Bearer ', '')) } } # 绑定请求监听事件 * driver.devTools.network.on('requestWillBeSent', captureToken) # 执行登录操作(比如点击登录按钮、完成SSO授权) * driver.click('#ms-login-btn') # 等待令牌捕获完成,超时10秒 * driver.waitFor('bearerToken != null', 10000)
3. 兼容Selenium风格的性能日志获取
如果你习惯Selenium中LogType.PERFORMANCE的方式,Karate也支持直接获取性能类型日志:
* def perfLogs = driver.performance.getLogs('PERFORMANCE') # 遍历perfLogs条目,根据日志的message字段解析出包含令牌的网络事件
注意:微软SSO场景中,Bearer令牌通常出现在登录完成后的重定向响应头或后续API请求中,你可能需要根据实际的请求URL或响应状态码调整过滤逻辑,确保精准提取目标令牌。
内容的提问来源于stack exchange,提问作者Rekha Chotara
相关产品推荐
相关产品推荐

