如何在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
相关产品推荐
相关产品推荐

