在量角器测试期间离开页面然后返回中断 waitForAngularEnabled()

During protractor tests navigating away from the page and then returning breaks waitForAngularEnabled()

虽然 运行ning e2e 测试针对 angular 8 应用程序,但如果我离开该应用程序并在测试中 return 进入该应用程序,测试驱动程序将失败。

更具体地说:

在我的 Angular 8 应用程序中,我有一组量角器端到端测试,需要在外部页面对服务器进行身份验证。

在量角器的 onPrepare 函数中,我通过等待应用程序检测到需要身份验证并重定向到登录页面来开始测试 运行,该页面本身不是 angular 应用程序。

然后我调用 waitForAngularEnabled(false),执行必要的登录步骤,然后重新启用 waitForAngular。

代码如下所示:

const onPrepare = async () => {
  browser.waitForAngularEnabled(false);

  await browser.get('/');
  await $('#username').clear();
  await $('#username').sendKeys('username');
  await $('#password').clear();
  await $('#password').sendKeys('password');
  await $('button[value=login]').click();

  browser.waitForAngularEnabled(true);
}

恢复测试后,任何等待 UI 元素的操作都会无限期超时。堆栈跟踪显示 waitForAngular 失败。

如果我通过跳过对 waitForAngularEnabled(true) 的最后一次调用来关闭等待 angular,测试 运行 大多数情况下是正常的,但是很多操作突然需要额外的手动操作 wait 要求它起作用。

有没有办法在我 return 进入页面后恢复原来的 waitForAngular 行为?

您错过了 waitForAngularEnabled 方法的 await

const onPrepare = async () => {
  await browser.waitForAngularEnabled(false);

  await browser.get('/');
  await $('#username').clear();
  await $('#username').sendKeys('username');
  await $('#password').clear();
  await $('#password').sendKeys('password');
  await $('button[value=login]').click();

  await browser.waitForAngularEnabled(true);
}