使用quit()后如何保留变量值?多用户登录切换方案咨询
解决Karate UI自动化中quit()后变量丢失及多用户切换问题
一、quit()后保留变量值的方法
方法1:使用Karate全局变量
Karate的全局变量不受driver上下文销毁影响,可跨driver实例保留值:
Given driver 'www.test.com' * driver.maximize() * call read('login.feature@login') * def variable = (driver.text('title')).trim() # 将变量存入全局空间 * karate.set('globalVariable', variable) * quit() Given driver 'www.test.com' * driver.maximize() # 注意原代码中的`maximum()`为笔误,应为`maximize()` * call read('login.feature@login') {user2: '#(user2)'} # 从全局空间读取变量 * def savedVariable = karate.get('globalVariable') * karate.log(savedVariable)
方法2:写入临时文件持久化
如果需要跨feature保留变量,或全局变量场景不适用,可将变量写入本地文件持久化:
Given driver 'www.test.com' * driver.maximize() * call read('login.feature@login') * def variable = (driver.text('title')).trim() # 写入临时文件 * write('user_title.txt', variable) * quit() Given driver 'www.test.com' * driver.maximize() * call read('login.feature@login') {user2: '#(user2)'} # 读取文件内容 * def savedVariable = read('user_title.txt') * karate.log(savedVariable)
二、无需quit()的多用户切换方案
针对Azure OIDC登录状态残留问题,可手动清除浏览器存储而非销毁driver实例,实现用户切换:
Given driver 'www.test.com' * driver.maximize() * call read('login.feature@login') # 执行第一个用户操作并保存变量 * def variable = (driver.text('title')).trim() # 清除登录相关存储,触发重新登录 * driver.executeScript("window.localStorage.clear();") * driver.executeScript("window.sessionStorage.clear();") * driver.deleteAllCookies() # 导航到首页或登录页 * driver.url('www.test.com') # 登录第二个用户 * call read('login.feature@login') {user2: '#(user2)'} * karate.log(variable) # 变量直接可用,无需额外处理
注:若Azure OIDC有特定的会话存储键,可针对性清除(如匹配包含
oidc/azure的键),避免误删其他必要存储。
内容的提问来源于stack exchange,提问作者hungryhippos
相关产品推荐
相关产品推荐

