Javascript 为什么browser.wait会导致量角器不精确地等待异步任务
我使用最新的量角器版本在全angular2应用程序中运行测试。我有一个函数,它导航到登录页面,执行登录过程,然后调用browser.wait,直到出现登录后出现的元素。然后,我的实际测试以“失败:等待异步角度任务在11秒后完成超时”而失败。 但是,如果我不等待登录过程完成,测试就会通过。很明显,我在browser.wait函数中遗漏了一些东西。sleep(x)会导致相同的行为 我的代码如下所示: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
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()。然而,超时并没有解决我的问题,因为等待条件实际上已满!我已登录并正确重定向,但量角器似乎仍在等待某个异步任务,因此无法继续。是和否,似乎有某个任务挂起,这导致超时,但这与等待或睡眠有关。我已经尝试增加超时时间,但没有帮助。。。