【发布时间】:2015-11-03 05:05:35
【问题描述】:
在测试我的 Angular 应用程序时,我无法让量角器按预期运行。我的规范文件如下所示:
describe('app login', function() {
it('should allow admin user to log in', function() {
browser.get('http://localhost:3008');
//we can find the log in link
expect(element(by.id('login-link')).getText()).toContain('Log in');
//open login dialog
element(by.id('login-link')).click();
browser.ignoreSynchronization = true;
browser.sleep(1000);
//enter credentials
element(by.id('login-username')).sendKeys('User1');
element(by.id('login-password')).sendKeys('Password1');
browser.sleep(1000);
//log in
var el = element(by.id('login-btn'));
//WORKS IF BELOW LINE IS COMMENTED OUT
el.click();
browser.sleep(1000);
//display confirms login
expect(element(by.id('user-display')).getText()).toContain('User1');
});
});
请注意,我在开始时遇到同步错误,这就是为什么我将 ignoreSynchronization 标志设置为 true 以及所有这些 browser.sleeps 的原因。
现在事情是这样的:如果我删除 el.click() 语句(以及最终的期望调用),测试将顺利进行。但是,一旦包含该行,我就会得到 NoSuchElementError: No element found using locator: By.id("login-username")。请注意,这个元素 不是 我实际上试图点击的那个元素,这是奇怪的一部分。
【问题讨论】:
-
你能展示你的html吗?
-
为什么需要将
ignoreSynchronization设置为true?你如何引导角度以及ng-app的定义位置?谢谢 -
@alecxe:我还没弄清楚为什么我需要 ignoreSynchronization!否则它永远不会同步。我知道这可能与 http 调用(没有任何调用)或 $timeout 有关。我也无法追踪其中任何一个,但我不太确定,因为除了检查代码库之外,我不知道有任何方法可以找到它。 ng-app 是在 html 元素上定义的。
标签: angularjs protractor