Remove an item from localStorage in a protractor test

前端 未结 4 1072
旧时难觅i
旧时难觅i 2020-12-10 05:49

I am trying to remove an entry in the localStorage from a protractor test

describe(\'The feature\', function() {

  beforeEach(function() {
    browser.execu         


        
相关标签:
4条回答
  • 2020-12-10 06:29

    Another potential solution is to put any state clearing in an afterEach, which will run after any test is run: (see https://github.com/angular/protractor/issues/188)

    afterEach(function() {
        browser.executeScript('window.sessionStorage.clear();');
        browser.executeScript('window.localStorage.clear();');
    });
    
    0 讨论(0)
  • 2020-12-10 06:41

    It happens because your browser is not yet open when you trying to access it's localStorage.

    You should move your localStorage manipulation to happen after the browser is open. Or, as suggested in the comment, to try/catch the JS execution of the first test (if it suits your scenario).

    0 讨论(0)
  • 2020-12-10 06:49

    I solved this issue by checking the window.location before attempting to clear/modify sessionStorage or localStorage.

    If a page has not been loaded then window.location.hostname will equal the empty string ''. So if you get the emptystring, then don't attempt to interact with sessionStorage or localStorage.

    Here's some (ES6) code I used in my protractor suite to prevent this error. Note it's a cucumber-js After function, but it is still executed from protractor using chrome, and it demonstrates what you need to do to avoid this error:

    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();
        }
      });
    });
    
    0 讨论(0)
  • 2020-12-10 06:49

    There is a bug with selenium that opens pages with "data:" urls

    The probelm is that localStorage isn't supported on "data:" urls

    I found this issue: https://code.google.com/p/chromedriver/issues/detail?id=293

    The Chrome 32 upgrade broke it again. Downloading the latest chromedriver (2.8) fixes it.

    So just update your chromedriver.

    0 讨论(0)
提交回复
热议问题