我使用Angular 2,我正在编写Protractor测试。我的问题是,当用户输入用户名和密码并单击登录按钮页面重定向到中间页面,并且该中间页面重定向到另一个页面,该页面提供并验证JWT(登录按钮后用户不需要做任何事情直到页面到达仪表板)但是量角器无法进行重定向。有没有办法让Protractor进入睡眠状态,直到我伸出仪表板?或者有什么方法可以建议吗?
browser.sleep(10000)
无效。因为浏览器睡眠时量角器停留在登录页面上直到失败。
错误讯息:
Expected Function to equal 'http://localhost:4200'.
Expected :"http://localhost:4200"
Actual :{}
答案 0 :(得分:0)
您需要在每个承诺上使用.then
,否则承诺将在所有同步任务完成后解决。
browser.sleep(10000).then(() => {
browser.getCurrentUrl().then(url => {
expect(url).toEqual('http://localhost:4200');
});
})
理想情况下,您希望在继续之前使用browser.wait()
等待网址符合预期。这样,它就不会等待10000毫秒,但它会在网址匹配时完成等待。
let timeout = 10000;
browser.wait(() => {
return browser.getCurrentUrl().then(url => {
return url === 'http://localhost:4200';
});
}, timeout).thenCatch(err => {
throw err;
});
当然,这只是对您未完成/需要做的事情的猜测,因为您需要发布您的代码。
编辑:进一步解释。如果你运行这个:
console.log('Got here 1');
browser.sleep(0).then(() => {
console.log('Got here 2');
]);
console.log('Got here 3');
您可能希望输出为:
Got here 1
Got here 2
Got here 3
但输出实际上是:
Got here 1
Got here 3
Got here 2
因为"承诺将在所有同步任务完成后解决"