在量角器测试中从localStorage中删除一个项目

时间:2014-01-21 13:15:18

标签: angularjs selenium selenium-webdriver selenium-chromedriver protractor

我正在尝试从量角器测试中删除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}]

4 个答案:

答案 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,请不要尝试与sessionStoragelocalStorage进行互动。

这是我在量角器套件中用来防止此错误的一些(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