Angularjs 如何让量角器在继续之前等待登录?
我的应用程序有一个非角度输入页面,我正在尝试首次登录:Angularjs 如何让量角器在继续之前等待登录?,angularjs,protractor,Angularjs,Protractor,我的应用程序有一个非角度输入页面,我正在尝试首次登录: describe('Authentication', function() { it('should authenticate a user', function() { browser.driver.get('https://example.com') browser.driver.findElement(by.id('username')).sendKeys("user"); browser.driver.
describe('Authentication', function() {
it('should authenticate a user', function() {
browser.driver.get('https://example.com')
browser.driver.findElement(by.id('username')).sendKeys("user");
browser.driver.findElement(by.id('password')).sendKeys("mypass");
browser.driver.findElement(by.tagName('input')).click()
var url = browser.getLocationAbsUrl()
browser.driver.sleep(1)
browser.waitForAngular()
return
})
})
但是,这会产生一个错误:
Failed: Error while waiting for Protractor to sync with the page: "window.angular is undefined. This could be either because this is a non-angular page or bec
ause your test involves client-side navigation, which can interfere with Protractor's bootstrapping. See http://git.io/v4gXM for details"
我能做些什么来解决这个问题?我会说等待登录页面,直到它正确显示,然后执行操作。例如
- 以登录页面中的某个元素为目标并等待它李>
- 等待url更改等
我以前写过一些助手,以便在e2e测试中完成这项工作:
waitForUrlToChangeTo: function (urlToMatch) {
var currentUrl;
return browser.getCurrentUrl().then(function storeCurrentUrl(url) {
currentUrl = url;
})
.then(function waitForUrlToChangeTo() {
browser.ignoreSynchronization = true;
return browser.wait(function waitForUrlToChangeTo() {
return browser.getCurrentUrl().then(function compareCurrentUrl(url) {
browser.ignoreSynchronization = false;
return url.indexOf(urlToMatch) !== -1;
});
});
}
);
},
login : function (username, password, url) {
browser.get('#/login');
element(by.model('username')).sendKeys(username);
element(by.model('password')).sendKeys(password);
element(by.buttonText('LOGIN')).click();
return this.waitForUrlToChangeTo(url);
}
然后在测试中:
describe('when I login with valid credentials', function() {
it('should redirect to dashboard', function() {
helper.login('user', 'pass', '#/dashboard').then(function() {
expect(browser.getTitle()).toMatch('Dashboard');
});
});
});
非角度,在执行该页面上的命令之前,需要设置
browser.ignoreSynchronization=false
。另外,仅供参考,sleep
的单位是毫秒,而不是秒。您正在使用当前添加的browser.ignoreSynchronization=false
等待0.001秒,并收到相同的错误对不起,我的意思是true
…我在等待量角器与页面同步时收到相同的错误`Failed:error:“window.angular未定义。这可能是因为这是一个非角度页面,也可能是因为您的测试涉及客户端导航,这可能会干扰量角器的引导。详情请参阅“`
describe('when I login with valid credentials', function() {
it('should redirect to dashboard', function() {
helper.login('user', 'pass', '#/dashboard').then(function() {
expect(browser.getTitle()).toMatch('Dashboard');
});
});
});