量角器 - 如何获取新URL

时间:2015-08-19 09:11:31

标签: protractor

我是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()有关,但是有更好的方法吗?

1 个答案:

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

希望这有帮助。