量angular器:如何在点击一个button后等待页面完成?

在testing规范中,我需要点击网页上的一个button,然后等待新的页面完全加载。

emailEl.sendKeys('jack'); passwordEl.sendKeys('123pwd'); btnLoginEl.click(); // ...Here need to wait for page complete... How? ptor.waitForAngular(); expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg'); 

根据你想要做什么,你可以尝试:

browser.waitForAngular();

要么

 btnLoginEl.click().then(function() { // do some stuff }); 

解决诺言。 如果你能在之前做到这一点会更好。

注意:我注意到expect()在比较之前等待内部的承诺(即getCurrentUrl)被解决。

你不需要等。 量angular器自动等待angular度准备就绪,然后执行控制stream程中的下一个步骤。

我只是看了一下源代码 – 量angular器只在less数情况下等待Angular(比如调用element.all或设置/获取位置)。

所以量angular器不会等待Angular在每个命令之后稳定下来。

另外,有时在我的testing中,我有一个angular度摘要周期和点击事件之间的竞赛,所以有时我必须这样做:

 elm.click(); browser.driver.sleep(1000); browser.waitForAngular(); 

使用睡眠等待执行进入AngularJS上下文(由click事件触发)。

我通常只是添加一些控制stream程,即:

 it('should navigate to the logfile page when attempting ' + 'to access the user login page, after logging in', function() { userLoginPage.login(true); userLoginPage.get(); logfilePage.expectLogfilePage(); }); 

logfilePage:

 function login() { element(by.buttonText('Login')).click(); // Adding this to the control flow will ensure the resulting page is loaded before moving on browser.getLocationAbsUrl(); } 

在这种情况下,您可以使用:

页面对象:

  waitForURLContain(urlExpected: string, timeout: number) { try { const condition = browser.ExpectedConditions; browser.wait(condition.urlContains(urlExpected), timeout); } catch (e) { console.error('URL not contain text.', e); }; } 

页面testing:

 page.waitForURLContain('abc#/efg', 30000); 

使用这个我认为这样更好

  *isAngularSite(false);* browser.get(crmUrl); login.username.sendKeys(username); login.password.sendKeys(password); login.submit.click(); *isAngularSite(true);* 

对于你使用isAngularSite的这个设置应该把它放在你的protractor.conf.js中:

  global.isAngularSite = function(flag) { browser.ignoreSynchronization = !flag; }; 
 browser.waitForAngular(); btnLoginEl.click().then(function() { Do Something }); 

解决诺言。