【发布时间】:2017-11-09 19:27:49
【问题描述】:
我正在使用量角器对 Angular 2 项目进行端到端测试,并且需要测试登录操作。这里的问题是,当单击登录按钮时,expect 语句仍然会获取登录页面的 URL,因为它应该是主页。如果我等待,那么测试成功。我在文档中的某处读到量角器等待进程自动完成,所以,
- 是什么导致了这个错误?
- 如何在不显式使用
wait()方法的情况下正确执行操作? - 量角器是否有类似于
fakeAsync、async或至少whenStable之类的单位 测试?
这是我的测试用例
it("User successfully login",()=>{
browser.get(browser.baseUrl + '/account/login').then(() => {
return expect(browser.getCurrentUrl()).toBe(browser.baseUrl + "/account/login")
}).then(()=>{
element(by.tagName('input[type=text]')).sendKeys('username');
element(by.tagName('input[type=password]')).sendKeys('password');
element(by.css('button[type=submit]')).click().then(()=>{
return expect(browser.getCurrentUrl()).toBe(browser.baseUrl + "/home");
});
});
});
注意:
- 我有指示避免使用
browser.wait()方法。 - 登录按钮通过 API 向后端发送 http 请求。
变通解决方案[基于 Ernst 的解决方案]:
我解决了这个问题。我不知道它是否适用于其他场景,或者它是否是正确的方法。我加了
browser.wait(EC.urlContains(browser.baseUrl + "/account/login"), 10000);
browser.waitForAngularEnabled(false);
browser.wait(EC.urlContains(browser.baseUrl + "/home");
就在 click() 事件之后,它现在似乎可以工作。
【问题讨论】:
标签: angular typescript protractor end-to-end