量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 });
解决诺言。