【问题标题】:Protractor & Angular 8: Set localStorage before Angular app runs?Protractor 和 Angular 8:在 Angular 应用程序运行之前设置 localStorage?
【发布时间】:2020-08-12 14:25:43
【问题描述】:

我有一些 E2E 测试要求,我需要通过 localStorage 模拟一些数据,但我很难在 Angular 运行之前设置 localStorage。该应用程序最终确实会看到我设置的 localStorage 项目,但只有在 Angular 能够很好地运行组件代码并发出 HTTP 请求之后。这是我尝试过的:

beforeAll(() => {
  // Attempt #1
  browser.get('/');
  browser.executeScript(`window.localStorage.setItem('foo', 'bar');`);

  // Attempt #2
  browser.get('/').then(() => {
    return browser.executeScript(`window.localStorage.setItem('foo', 'bar');`);
  });
});

Protractor 是否有其他机制来完成此任务?或者也许是其他一些创造性的方式在 Angular 应用程序加载之前将数据注入到每个规范(或 browser.get)的基础上?谢谢!

【问题讨论】:

  • 您的应用程序的本地存储在您加载页面之前不存在。那么之前怎么设置呢?或者我没看懂问题
  • 我主要是在寻找一种在浏览器打开后但在 Angular 加载/运行之前对浏览器实例执行操作的方法。我已经继续前进,现在我只是通过browser.get() 中的 URL 传递一些数据,但我仍然想知道是否有更好的方法。

标签: protractor angular8


【解决方案1】:

我建议您在 protractor config fileonPrepare 挂钩中设置它。

如果准备工作涉及任何异步调用,例如与浏览器交互。

在配置中:

onPrepare() {
  return browser.get('/').then(() => {
    return browser.executeScript(`window.localStorage.setItem('foo', 'bar');`);
  });
}

【讨论】:

  • 感谢您的建议。我可能会将它用于其他用途,但我仍然需要一种方法来在 beforeEach 或 beforeAll 中设置本地存储,例如。是否存在与 onPrepare 等效的规范级别?
  • 为什么你不想把它放在onPrepare中,除了你可以在onPrepare函数中使用beforeEachbeforeAll函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多