You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:02:51