Javascript 为什么browser.wait会导致量角器不精确地等待异步任务

Javascript 为什么browser.wait会导致量角器不精确地等待异步任务,javascript,angular,asynchronous,protractor,angularjs-e2e,Javascript,Angular,Asynchronous,Protractor,Angularjs E2e,我使用最新的量角器版本在全angular2应用程序中运行测试。我有一个函数,它导航到登录页面,执行登录过程,然后调用browser.wait,直到出现登录后出现的元素。然后,我的实际测试以“失败:等待异步角度任务在11秒后完成超时”而失败。 但是,如果我不等待登录过程完成,测试就会通过。很明显,我在browser.wait函数中遗漏了一些东西。sleep(x)会导致相同的行为 我的代码如下所示: this.login = () => { browser.get(${this.baseU

我使用最新的量角器版本在全angular2应用程序中运行测试。我有一个函数,它导航到登录页面,执行登录过程,然后调用browser.wait,直到出现登录后出现的元素。然后,我的实际测试以“失败:等待异步角度任务在11秒后完成超时”而失败。 但是,如果我不等待登录过程完成,测试就会通过。很明显,我在browser.wait函数中遗漏了一些东西。sleep(x)会导致相同的行为

我的代码如下所示:

this.login = () => {
  browser.get(${this.baseUrl}/login);
  let emailField = element(by.id('emailID-input'));
  let passwordField = element(by.id('passwordID-input'));
  let submitBtn = element(by.id('loginSubmitId'));
  emailField.sendKeys(credentials.email);
  passwordField.sendKeys(credentials.pass);
  submitBtn.click();
//browser.driver.sleep(3000);
  return browser.wait(() => {
    return element(by.xpath('//*[@id="header"]')).isPresent()
      .then((isPresent) => {
        console.log('Header is Present;', isPresent);
        return isPresent;
      });
  });
};
在实际测试规范中,我希望在运行测试之前登录:

beforeAll(async () => {
   helpers.login().then(() => {
   console.log('logged in');
   });
});
编辑1: 我将等待条件更改为也包含超时,但问题仍然存在

let until = protractor.ExpectedConditions;
let header = element(by.xpath('//*[@id="header"]'));
return browser.wait(until.presenceOf(header), 5000);

您需要在
browser.wait()方法中提及等待时间。一旦达到最大等待时间,量角器将根据您的等待条件引发超时异常。并尝试使用
ExpectedConditions
代替直接
isPresent()
方法

var EC = protractor.ExpectedConditions;
var ele = element(by.xpath('//*[@id="header"]'));
return browser.wait(EC.presenceOf(ele),5000); //It will wait for 5 secs

在量角器中,有默认设置为10秒的getPageTimeout:timeout(以毫秒为单位)。您的页面加载时间超过10秒,因此显示超时错误消息


您可以在conf.js文件中指定这一点。

谢谢您的回答。我以前也看到过预期的情况。我只是不确定该用哪一个,在一篇旧帖子[link]()中,我看到@juliemr在使用isPresent()。然而,超时并没有解决我的问题,因为等待条件实际上已满!我已登录并正确重定向,但量角器似乎仍在等待某个异步任务,因此无法继续。是和否,似乎有某个任务挂起,这导致超时,但这与等待或睡眠有关。我已经尝试增加超时时间,但没有帮助。。。