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

如何在Karate UI框架中执行JS存储Chrome会话启动依赖设备ID的站点

Karate框架实现会话恢复方案

你可以直接通过Karate内置的JS执行能力注入deviceId到站点indexedDB,完整实现逻辑如下:

正确Feature文件示例

Feature: 测试无密码登录会话恢复流程
Scenario: 注入deviceId恢复站点访问权限
  # 首次访问站点初始化域名上下文,才可以操作对应indexedDB
  Given driver 'https://www.testing.com'
  # 定义可用的deviceId值
  * def deviceId = 'qqqqqq'
  # 编写注入脚本,Karate中多行字符串用三个双引号包裹即可直接拼接变量
  * def injectScript = 
  """
  var request = indexedDB.open("ZZ");
  var db;
  request.onupgradeneeded = function() {
    db = request.result;
    var store = db.createObjectStore("XX");
  };
  request.onsuccess = function() {
    db = request.result;
    var tx = db.transaction("XX", "readwrite");
    var store = tx.objectStore("XX");
    store.put("""" + deviceId + """", "AAA");
  };
  """
  # 执行JS脚本注入deviceId到indexedDB
  * driver.script(injectScript)
  # 等待1秒确保存储写入完成,可根据实际运行情况调整时长
  * sleep(1000)
  # 再次访问站点,此时会话已恢复可正常操作
  Given driver 'https://www.testing.com'
  # 窗口最大化,对应Selenium的window.maximize方法
  * driver.maximize()
  # 后续你的测试操作逻辑
  When click('<搜索框元素定位符>')
  Then match text('<结果定位符>') == '预期结果'

关键说明

  • 必须先发起一次对目标站点的访问,初始化对应域名的上下文后才可以操作该域名下的indexedDB,否则会触发跨域错误
  • Karate中执行前端JS统一使用driver.script(JS字符串)方法,等价于Selenium的executeScript,不需要额外封装工具类
  • 若部分站点写入indexedDB后需要等待生效,可适当延长sleep时间,或增加自定义等待逻辑判断写入完成

内容的提问来源于stack exchange,提问作者Niks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:27:03