量角器找不到 angular 变量并等到茉莉花默认时间导致测试失败

Protractor can't find angular variable and wait until jasmine default time resulting in failure of tests

我正在为 angular 应用程序自动化一些测试用例。我对 Protractor 的理解如下:

  1. 在 angular 应用程序中不需要像 selenium 那样显式等待 正如量角器 90% 命令 return 所承诺的,即这意味着 量角器自己等待。
  2. 量角器的函数WaitForAngularEnabled()默认为true

我遇到的问题是,在对我的 angular 应用程序进行自动化测试时,当我测试我的应用程序时,量角器会等待(我猜它会等待 angular 变量)直到 jasmine 默认时间过期并且所有测试用例都失败。当我将我的应用程序测试为非Angular时(更改我的量角器conf.设置(附加代码)),所有测试用例都可以正常工作,但我必须明确添加等待导致很多不稳定的测试。它还会增加测试执行时间。任何人都可以帮助我解决上述问题。将非常感谢你。

onPrepare() {
    require('ts-node').register({
      project: 'e2e/tsconfig.e2e.json'
    });
    browser.waitForAngularEnabled(false);//Disabled angular here
    browser.driver.manage().window().maximize();
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  }

当 Protractor 与 Angular 通信时,它使用 Angular 可测试性 API,API returns 一个名为 is_stable 的变量。当此变量为真时,表示您的 Angular 网站稳定。这意味着您页面中的所有承诺都已解决,并且页面没有等待完成的活动进程。

注意:如果页面中仍有需要解析的元素,is_stable 标志将为您提供 false。如果您的网站有任何在后台保留 运行 的第三方集成,或者如果移动端的某些内容未加载到网页上,通常会出现此问题。如果是这种情况,您将需要检查您的网页上是否有任何待处理的进程。如果有任何进程,您必须将其移出 Angular 的范围。这样 Angular 将解决所有承诺并让 Protractor 知道它已准备好接收命令。

从代码中删除显式等待的另一种方法是使用异步等待。 Async await 使用简单,并且会在继续前进之前显式等待任何 promise 解决。目前,如果您是 运行 旧版本的量角器,selenium 承诺管理器会处理所有承诺,否则,承诺管理器将被禁用(弃用),因此您将不得不手动处理所有承诺。