如何在Protractor中绕过重定向

时间:2017-05-24 15:16:02

标签: javascript protractor angular2-routing

我使用Angular 2,我正在编写Protractor测试。我的问题是,当用户输入用户名和密码并单击登录按钮页面重定向到中间页面,并且该中间页面重定向到另一个页面,该页面提供并验证JWT(登录按钮后用户不需要做任何事情直到页面到达仪表板)但是量角器无法进行重定向。有没有办法让Protractor进入睡眠状态,直到我伸出仪表板?或者有什么方法可以建议吗?

browser.sleep(10000)无效。因为浏览器睡眠时量角器停留在登录页面上直到失败。

错误讯息:

Expected Function to equal 'http://localhost:4200'.
Expected :"http://localhost:4200"
Actual   :{}

1 个答案:

答案 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

因为"承诺将在所有同步任务完成后解决"