Javascript 量角器e2e测试登录重定向
目前有部分端到端测试,输入用户名/密码并单击“登录” 它成功地做到了这一点,但在“感谢您登录”页面结束,而不是像我通过浏览器登录那样重定向到“帐户门户”或“仪表板”\ 这个项目很新,但我们使用的是OAuth 主要问题:这听起来像是需要http模拟吗? 进一步详情: 规格jsJavascript 量角器e2e测试登录重定向,javascript,angularjs,oauth,protractor,e2e-testing,Javascript,Angularjs,Oauth,Protractor,E2e Testing,目前有部分端到端测试,输入用户名/密码并单击“登录” 它成功地做到了这一点,但在“感谢您登录”页面结束,而不是像我通过浏览器登录那样重定向到“帐户门户”或“仪表板”\ 这个项目很新,但我们使用的是OAuth 主要问题:这听起来像是需要http模拟吗? 进一步详情: 规格js describe('login page', function() { browser.driver.get('http://url.path/login'); it('should render login
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);
});
});
如果我快速点击测试窗口,我可以看到它成功进入“成功”页面,但它不会重定向到仪表板(当您通过浏览器手动登录时,它会重定向)。如何继续此测试以保持登录状态并像用户一样访问仪表板
//新的项目,角度和量角器
编辑-稍微总结一下:
- 我想让量角器在/login页面上开始测试
- 量角器应该找到并填写用户名和密码字段,然后单击登录
- 量角器成功登录,查看a/thankyou页面,然后立即重定向到用户/仪表板页面
- 也许我遗漏了一个步骤,我们需要在量角器测试中手动重定向吗
(当用户通过浏览器手动登录时,他们看不到/Thankyu页面-这是一个快速重定向到/dashboard的页面。量角器无法到达dashboard页面。您的帖子缺少信息,但我将尝试做一个假设: 我怀疑您的“谢谢您登录”页面会在超时后使javascript重定向 因此,在您单击“登录”后,浏览器将加载“谢谢您登录”页面,并且由于
.then()
的第二个参数不起任何作用,browser.waitForAngular()
会失败,因为该页面上没有角度
您应该尝试使用类似于
browser.driver.wait()
的东西,并在浏览器进入/success
页面后,在合理的超时时间内检测url更改(此处描述:)并触发browser.waitForAngular()
。您尝试过使用显式等待吗
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);
当我从您链接的页面上的解决方案运行代码时,量角器显示:“失败:未定义不是函数”。看起来在“compareCurrentUrl”函数中失败了。在这里可以找到我如何使用该函数的示例,这很有帮助,但返回行应更改为:返回url==[所需url];