如何在Protractor中更新sessionStorage内对象的指定属性值
解决Protractor中修改sessionStorage里JSON字符串的问题
别着急,这问题我之前折腾过,核心原因很简单:你从sessionStorage拿到的retVal是JSON格式的字符串,不是真正的JavaScript对象,所以直接去改roles属性肯定行不通。得按「解析→修改→重新存储」的步骤来,具体操作如下:
完整实现代码
// 1. 从sessionStorage获取字符串并解析为JS对象 browser.driver.executeScript('return window.sessionStorage.getItem("claims_obj");').then((retVal) => { try { // 把JSON字符串转成可操作的JS对象 const claimsObj = JSON.parse(retVal); // 2. 修改roles属性为你想要的值 claimsObj.roles = ["READ"]; // 3. 把修改后的对象转回JSON字符串,存回sessionStorage browser.driver.executeScript(`window.sessionStorage.setItem("claims_obj", '${JSON.stringify(claimsObj)}');`).then(() => { console.log("sessionStorage中的claims_obj已成功更新"); // 可选:验证修改结果 browser.driver.executeScript('return window.sessionStorage.getItem("claims_obj");').then((updatedVal) => { console.log("更新后的值:", updatedVal); }); }); } catch (error) { console.error("解析JSON字符串失败:", error); console.log("原始字符串内容:", retVal); } });
关键步骤说明
- JSON.parse():把sessionStorage返回的字符串转换成JavaScript对象,这样才能修改它的属性。
- JSON.stringify():修改完成后,必须把对象转回JSON格式的字符串,因为sessionStorage只能存储字符串类型的数据。
- try-catch块:加个异常捕获很有必要,万一原始的字符串格式有问题(比如你提供的打印结果里缺少逗号,这会导致解析失败),能快速定位问题。
另外提一句:你贴出来的打印结果里的JSON是有语法错误的(键值对之间没加逗号),如果实际运行中也是这样,得先确保sessionStorage里的原始字符串是合法的JSON,不然JSON.parse会报错哦。
内容的提问来源于stack exchange,提问作者a p
相关产品推荐
相关产品推荐

