为什么browser.wait会导致量角器无条件地等待异步任务

时间:2016-12-12 01:17:44

标签: javascript angular asynchronous protractor angularjs-e2e

我使用最新的量角器版本在所有angular2应用程序中运行测试。我有一个函数,它导航到登录页面,执行登录过程,然后调用browser.wait直到登录后出现的元素出现。然后我的实际测试失败了'失败:超时等待异步角度任务在11秒后完成。'。 但是,如果我不等待登录过程完成,则测试通过。所以显然我错过了browser.wait函数。 browser.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);

2 个答案:

答案 0 :(得分:2)

您需要在browser.wait()方法中提及等待时间。一旦达到最大等待时间,量角器将根据您的等待条件抛出Timeout异常。并尝试使用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

答案 1 :(得分:0)

在量角器中,默认 getPageTimeout:timeout_in_millis 设置为 10秒。您的页面加载时间超过10秒,因此显示超时错误消息。

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