Selenium操作Edge浏览器设置LocalStorage报空指针异常如何解决
错误原因分析
- 第一种写法问题:
Selenium 4及以上版本已经正式移除WebStorage相关接口,且EdgeDriver本身没有实现该接口,强制类型转换会抛出类转换异常或空指针异常。此外LocalStorage是域名绑定属性,设置前必须保证当前driver已经加载了目标域名的页面,未加载对应域名时无法获取存储实例。 - 第二种写法问题:
JavaScript内置本地存储对象是小写开头的localStorage,你代码里写的大写LocalStorage属于未定义对象,执行JS时会抛出引用错误,同时也存在未提前加载目标域名页面的问题。
正确实现方案
前置操作
设置LocalStorage前必须先导航到目标域名的任意页面,确保JS执行上下文对应目标域名,示例如下:
// 替换成你要设置LocalStorage的目标站点地址,哪怕加载的是站点404页也可以,只要域名匹配 driver.get("https://你的目标域名.com"); // 等待页面初始化完成,避免JS执行上下文未就绪 new WebDriverWait(driver, Duration.ofSeconds(3)).until( webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete") );
封装LocalStorage操作方法
// 设置LocalStorage public void setLocalStorage(String key, String value) { // 提前判空避免空指针 if (driver == null || key == null || value == null) { throw new IllegalArgumentException("driver、key、value均不能为null"); } JavascriptExecutor js = (JavascriptExecutor) driver; // 注意localStorage为小写开头,挂载在window对象下 js.executeScript("window.localStorage.setItem(arguments[0], arguments[1])", key, value); } // 可选:封装读取方法验证设置结果 public String getLocalStorage(String key) { JavascriptExecutor js = (JavascriptExecutor) driver; return (String) js.executeScript("return window.localStorage.getItem(arguments[0])", key); }
调用示例
setLocalStorage("route", "A"); // 验证设置结果 System.out.println(getLocalStorage("route")); // 输出A即为设置成功
内容的提问来源于stack exchange,提问作者Gopi
相关产品推荐
相关产品推荐

