我是Protractor的新手(顺便提一下Javascript),我正在编写一些测试来练习。到目前为止,我的目标是检查当我点击网站的主页按钮时,重定向会将我正确地引导到预期的地址。
我写了这个:
var HomeTopBanner = function() {
this.homeUrl = browser.params.homePageObject.homeUrl;
this.topBanner = element(by.css('.navbar-inner'));
this.homeButton = this.topBanner.element(by.css('.icon-home'));
}
describe('Home button', function(){
var homeTopBanner = new HomeTopBanner();
var newUrl = '';
it('clicks on the Home button', function(){
homeTopBanner.homeButton.click();
browser.getCurrentUrl().then(function storeNewUrl(url) {
newUrl = url;
});
})
it('checks that the home button leads to the homepage', function(){
expect(newUrl).toEqual(homeTopBanner.homeUrl);
})
});
这有效,但我的问题是:
为什么我需要将“GetCurrentUrl”和“expect(newUrl)”部分分开?我更愿意将它们都放在相同的规范中,但如果我这样做,在期望的比较期间,newUrl =''
我认为这与一个承诺的browser.getCurrentUrl()有关,但是有更好的方法吗?
答案 0 :(得分:0)
是的,getCurrentUrl以字符串形式返回带有url的promise,如protractor api docs中所述。您必须等到返回URL才能使用它。现在为了结合两个规范,你可以在getCurrentUrl返回的函数内编写expect语句,如下所示,如果你想要的话也不需要使用newUrl变量 -
it('clicks on the Home button', function(){
homeTopBanner.homeButton.click().then(function(){
browser.getCurrentUrl().then(function(url) {
expect(url).toEqual(homeTopBanner.homeUrl);
});
});
})
在点击操作之后还可能存在另一个问题,即由于量角器异步且快速而捕获了上一个URL。在这种情况下,您可以在click()函数返回的promise中编写getCurrentUrl()函数。这是一个例子 -
{{1}}
希望这有帮助。