目前有部分端到端测试,输入用户名/密码并点击“登录”。
它成功完成了,但在“谢谢你登录”页面结束,而不是重定向到“帐户门户”或“仪表板”,就像我通过浏览器登录一样。
此项目的新功能,但我们正在使用OAuth。
主要问题:这听起来像是需要进行http模拟吗?
进一步详情:
spec.js
describe('login page', function() {
browser.driver.get('http://url.path/login');
it('should render login page', function() {
// Checking the current url
var currentUrl = browser.driver.getCurrentUrl();
expect(currentUrl).toMatch('/login');
});
it('should sign in', function() {
// Find page elements
var userNameField = browser.driver.findElement(By.id('username'));
var userPassField = browser.driver.findElement(By.id('password'));
var userLoginBtn = browser.driver.findElement(By.id('loginbtn'));
// Fill input fields
userNameField.sendKeys('test@user.com');
userPassField.sendKeys('1234');
// Ensure fields contain what we've entered
expect(userNameField.getAttribute('value')).toEqual('test@user.com');
expect(userPassField.getAttribute('value')).toEqual('1234');
// Click to sign in - waiting for Angular as it is manually bootstrapped.
userLoginBtn.click().then(function() {
browser.waitForAngular();
expect(browser.driver.getCurrentUrl()).toMatch('/success');
}, 10000);
});
});
如果我快速点击测试窗口,我可以看到它成功到达“成功”页面 - 但它没有重定向到仪表板(当您通过浏览器手动登录时,它会重定向)。如何继续此测试以保持登录状态并像用户一样访问仪表板?
//项目的新手,角度和量角器。
编辑 - 总结一下:
(当用户通过浏览器手动登录时,他们看不到 / thankyou 页面 - 它是一个快速重定向到 / dashboard 。量角器无法到达仪表板页面。
答案 0 :(得分:7)
您的帖子缺少信息,但我会尝试做出假设:
我怀疑你的#34;感谢你重新登录"页面在超时后进行javascript重定向。
因此,点击"登录"后,浏览器会加载"感谢您重新登录"页面,由于.then()
的第二个参数不执行任何操作,browser.waitForAngular()
失败,因为该页面上没有角度。
您应该尝试使用具有合理超时的browser.driver.wait()
之类的内容来检测网址更改(此处描述:https://github.com/angular/protractor/issues/610)并在浏览器到达browser.waitForAngular()
后触发/success
页。
答案 1 :(得分:2)
您是否尝试过使用明确的等待?
return browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return /success/.test(url);
});
}, 10000);
您的代码就是这样:
// Click to sign in - waiting for Angular as it is manually bootstrapped.
userLoginBtn.click();
return browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return /success/.test(url);
});
}, 10000);