Protractor e2e 测试登录重定向
Protractor e2e Tests Login Redirection
目前有部分端到端测试,输入 username/password 并点击 'sign in'。
它成功完成了,但在 "thanks you're logged in" 页面结束,而不是像我通过浏览器登录时那样被重定向到 'account portal' 或 'dashboard' .\
这个项目的新手,但我们正在使用 OAuth。
主要问题:这听起来像是需要 http mocking 吗?
更多详情:
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);
});
});
如果我快速单击测试 window,我可以看到它成功到达 'success' 页面 - 但它不会重定向到仪表板(它在您手动登录时重定向,通过浏览器)。我如何才能继续此测试以保持登录状态并像用户一样访问仪表板?
// 新项目,angular and and protractor.
编辑 - 总结一下:
- 我希望量角器在 /登录 页面上开始测试
- 量角器应找到并填写用户名和密码字段,然后单击“登录”
- 量角器登录成功,看到一个/thankyou页面,然后立即重定向到用户的/dashboard页面
- 也许我漏掉了一步,我们需要在 Protractor 测试中手动重定向吗?
(当用户通过浏览器手动登录时,他们看不到 /thankyou 页面 - 这是一个快速重定向到 /dashboard . Protractor 未到达仪表板页面。
您的 post 缺乏信息,但我会尝试做出假设:
我怀疑您的 "thanks you're logged in" 页面在超时后进行了 javascript 重定向。
所以在你点击 "Login" 之后,浏览器加载 "thanks you're logged in" 页面,由于 .then()
的第二个参数什么都不做,browser.waitForAngular()
失败,因为没有 angular 在那个页面上。
您应该尝试使用类似 browser.driver.wait()
的东西,并设置合理的超时时间来检测 url 更改(此处描述:https://github.com/angular/protractor/issues/610)并在浏览器获取后触发 browser.waitForAngular()
到 /success
页。
您是否尝试过使用显式等待?
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);
目前有部分端到端测试,输入 username/password 并点击 'sign in'。
它成功完成了,但在 "thanks you're logged in" 页面结束,而不是像我通过浏览器登录时那样被重定向到 'account portal' 或 'dashboard' .\
这个项目的新手,但我们正在使用 OAuth。
主要问题:这听起来像是需要 http mocking 吗?
更多详情:
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);
});
});
如果我快速单击测试 window,我可以看到它成功到达 'success' 页面 - 但它不会重定向到仪表板(它在您手动登录时重定向,通过浏览器)。我如何才能继续此测试以保持登录状态并像用户一样访问仪表板?
// 新项目,angular and and protractor.
编辑 - 总结一下:
- 我希望量角器在 /登录 页面上开始测试
- 量角器应找到并填写用户名和密码字段,然后单击“登录”
- 量角器登录成功,看到一个/thankyou页面,然后立即重定向到用户的/dashboard页面
- 也许我漏掉了一步,我们需要在 Protractor 测试中手动重定向吗?
(当用户通过浏览器手动登录时,他们看不到 /thankyou 页面 - 这是一个快速重定向到 /dashboard . Protractor 未到达仪表板页面。
您的 post 缺乏信息,但我会尝试做出假设:
我怀疑您的 "thanks you're logged in" 页面在超时后进行了 javascript 重定向。
所以在你点击 "Login" 之后,浏览器加载 "thanks you're logged in" 页面,由于 .then()
的第二个参数什么都不做,browser.waitForAngular()
失败,因为没有 angular 在那个页面上。
您应该尝试使用类似 browser.driver.wait()
的东西,并设置合理的超时时间来检测 url 更改(此处描述:https://github.com/angular/protractor/issues/610)并在浏览器获取后触发 browser.waitForAngular()
到 /success
页。
您是否尝试过使用显式等待?
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);