PhantomJSDriver(GhostDriver)无法使用javascript获取localStorage值

时间:2014-08-31 12:44:24

标签: selenium-webdriver phantomjs ghostdriver

使用PhantomJsDriver(GhostDriver)测试我的Web应用程序。 尝试使用以下调用访问本地存储值:

 (String) js.executeScript(String.format("return localStorage.getItem('%s');", key));

在webDriver初始化中,我正在设置功能:

 DesiredCapabilities dCaps = new DesiredCapabilities()
 dCaps.setJavascriptEnabled(true)
 dCaps.setCapability("webStorageEnabled", true)
 return new PhantomJSDriver(dCaps)

在尝试执行上面的JS时接收WebDriverException,看起来webStorageEnabled从未设置为true:

  

org.openqa.selenium.WebDriverException:{“errorMessage”:“SECURITY_ERR:   DOM Exception 18“,”request“:{”headers“:{”Accept“:”application / json,   图像/ PNG“‘连接’:‘保持活动’,‘内容长度’:‘98’,‘内容类型’:”应用/ JSON;   字符集= UTF-8" , “主机”: “本地主机:20884”}, “httpVersion”: “1.1”, “方法”: “POST”, “后”: “{\” ARGS \“:[],\ “脚本\”:\“返回   localStorage.getItem( 'cartId_136d7735-13d7-8178-8abf-010beb62f8cf'); \ “}”, “URL”: “/执行”, “urlParsed”:{ “锚”: “”, “查询”: “”, “文件”: “执行”, “目录”: “/”, “路径”: “/运行”, “相对”: “/运行”, “口”: “”, “主人”: “”,“密码“:” “ ”用户“: ”“, ”用户信息“: ”“, ”权威“: ”“, ”协议“: ”“, ”源“: ”/执行“, ”queryKey“:{},”块 “:[” 执行 “]}”,urlOriginal “:”/会话/ 5f67ce30-310a-11e4-83c7-6d52cfce6b64 /执行“}}   命令持续时间或超时:8毫秒构建信息:版本:   '2.39.0',修订版:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:   '2013-12-16 13:18:38'

     

驱动程序信息:org.openqa.selenium.phantomjs.PhantomJSDriver   功能[{platform = MAC,acceptSslCerts = false,   javascriptEnabled = true,browserName = phantomjs,rotate = false,   driverVersion = 1.1.0,locationContextEnabled = false,version = 1.9.7,   cssSelectorsEnabled = true,databaseEnabled = false,handlesAlerts = false,   browserConnectionEnabled = false, webStorageEnabled = false ,   nativeEvents = true,proxy = {proxyType = direct},   applicationCacheEnabled = false,driverName = ghostdriver,   takeScreenshot = false}] at   sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)     在   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     在   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

我遇到的问题可能是什么原因?是否可以为PhantomJSDriver设置webStorageEnabled?如果不是,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

经过一番思考后,我设法解决了这个问题。

通常,可以使用JavaScript访问localStorage。这里描述的问题是因为其他原因而发生的。 这是我的流程:

1)初始化WebDriver
2)访问localStorage
3)做driver.get(url)

问题是,driver.get(url)必须在访问localStorage之前发生。这解决了这个问题。

这是我的LocalStorage驱动程序实现(在Scala中),如果您需要:LocalStorageDriver