我正在尝试从量角器测试中删除localStorage中的条目
describe('The feature', function() {
beforeEach(function() {
browser.executeScript('localStorage.removeItem("key");');
});
it('should do this', function() {
});
});
但是当我在chrome
中运行测试时出现此错误UnknownError: <unknown>: Access to 'localStorage' is denied for this document. Storage is disabled inside 'data:' URLs.
(Session info: chrome=32.0.1700.77)
(Driver info: chromedriver=2.8.241036,platform=Mac OS X 10.9.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 436 milliseconds
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'MyPC.local', ip: '192.168.1.1', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9', java.version: '1.7.0_45'
Session ID: 23c01c8f756c653a6345e4b2f20c06e5
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=/var/folders/9h/6j5pzftn4sxdw3rt25ffrqx80000gn/T/.org.chromium.Chromium.xrCG1d}, rotatable=false, locationContextEnabled=true, version=32.0.1700.77, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
答案 0 :(得分:4)
另一个可能的解决方案是将任何状态清算放在afterEach
中,这将在任何测试运行后运行:(参见https://github.com/angular/protractor/issues/188)
afterEach(function() {
browser.executeScript('window.sessionStorage.clear();');
browser.executeScript('window.localStorage.clear();');
});
答案 1 :(得分:3)
我在尝试清除/修改sessionStorage或localStorage之前通过检查window.location来解决了这个问题。
如果尚未加载页面,则window.location.hostname
将等于空字符串''
。因此,如果您获得了emptystring,请不要尝试与sessionStorage
或localStorage
进行互动。
这是我在量角器套件中用来防止此错误的一些(ES6)代码。注意它是一个黄瓜-js After函数,但它仍然使用chrome从量角器执行,它演示了你需要做些什么来避免这个错误:
this.After(function(scenario) {
function getWindowLocation() {
return window.location;
}
function clearStorage() {
window.sessionStorage.clear();
window.localStorage.clear();
}
return browser.executeScript(getWindowLocation).then(function(location) {
// NB If no page is loaded in the scneario then calling clearStorage will cause exception
// so guard against this by checking hostname (If no page loaded then hostname == '')
if (location.hostname.length > 0) {
return browser.executeScript(clearStorage);
}
else {
return Promise.resolve();
}
});
});
答案 2 :(得分:2)
这是因为当您尝试访问localStorage时,您的浏览器尚未打开。
您应该在浏览器打开后移动localStorage操作。或者,如评论中所建议的,尝试/捕获第一个测试的JS执行(如果它适合您的场景)。
答案 3 :(得分:1)
"data:"
网址问题是localStorage isn't supported on "data:" urls
我发现了这个问题:https://code.google.com/p/chromedriver/issues/detail?id=293
Chrome 32升级再次破坏了它。下载最新的chromedriver(2.8)修复了它。
所以只需更新您的chromedriver。