【问题标题】:How to clear local storage before running each test in WebdriverIO?如何在 WebdriverIO 中运行每个测试之前清除本地存储?
【发布时间】:2021-01-18 05:49:29
【问题描述】:

我正在为基于 React 的 Web 工具编写测试。所以我想在每次测试之前清除所有本地存储,例如登录信息等。我主要在 Cypress 工作,这只是一个简单的命令。

cy.clearLocalStorage();

我现在正在使用 WebdriverIO,这是我正在尝试的方法(在测试文件中)。

afterEach(() => {
    browser.executeScript('window.localStorage().clear()');
});

但是,这似乎不起作用。此外,我更喜欢全局解决方案,我不必在每个测试中都写一些东西。提前感谢您的帮助。

【问题讨论】:

    标签: webdriver automated-tests cypress webdriver-io


    【解决方案1】:

    来自WebdriverIO Docs

    // remove the storage item for the given key
    client.localStorage('DELETE', 'someKey');
    
    // clear the storage
    client.localStorage('DELETE');
    

    你可以通过运行这个预设函数来清除localStorage。

    【讨论】:

    • 它说'客户端未定义'。
    【解决方案2】:

    您的假设几乎是正确的。我建议使用官方文档来消除小错误。

    https://webdriver.io/docs/api/browser/execute.html代替executeScript

    localStorage 不是函数,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

    应该是这样的

    afterEach(() => {
        browser.execute('window.localStorage.clear()');
    });
    

    附: 假设您使用的是 WebdriverIO 5 或更高版本。

    【讨论】:

    • 这不起作用,我想清除本地存储,以便在每个挂钩后再次出现登录页面,但没有发生。
    • "Something doesn't work" 评论并没有真正的帮助。请更具体
    【解决方案3】:

    所以,经过很长时间,我们意识到了问题所在。 cy.clearLocalStorage() 只清理baseUrl 定义下的本地存储。

    如果您想打开多个页面,您必须在cy.visit() 调用中明确定义清除,如下所示:

        cy.visit(`subdomain.another.domain`, {
          onBeforeLoad(win) {
            win.localStorage.clear();
          },
        });
    

    在这种情况下,将删除确切域的本地存储。

    我希望,这个解决方法会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2016-01-03
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多