量角器野生动物园重定向

时间:2017-05-05 15:39:41

标签: safari protractor safaridriver

我在使用Protractor运行safariDriver时遇到问题。 在chrome和phantom上一切正常。

所以问题就是让我说我​​有一个页面我点击一个链接然后它重新路由到另一个页面,然后它做了一些事情,然后把我带回到我要去的地方。

所以在Chrome中我点击链接然后获取网址。 url ===期望网址。

在safari中

点击链接获取网址url ===重新路由网址,但尚未到达我要去的地方。我试过做browser.wait(function(){return browser.getCurrentUrl})不起作用。

这是一个片段。

waitAndGetUrl: function(){
  return  browser.wait(function(){
        return browser.getCurrentUrl().then(function(url){
                 return url 
               });
    }, 1000)
}

describe("should click on link and add cookie", function(){
    it('click the fragment link', function(){
        testPageActions.clickOnFragmentLink();
        expect(testPageActions.waitAndGetUrl()).toContain(fragmentPath);
    });

    it('should grab have the cookie set', function(){
        expect(testPageActions.getCookie()).toBe(Cookie);
    });

});

ps我也尝试过使用browser.sleep()

3 个答案:

答案 0 :(得分:1)

我认为你自己的答案是不正确的。

  1. 睡眠没有function,请参阅docs。我认为它现在可以工作,因为你只是等待1秒钟。
  2. 其次,您在比较中使用了expect。当expect失败时,它会拒绝承诺,并会因为错误的原因而杀死你。
  3. 随着你的初步问题和代码,你几乎得到了答案。你只需像这样实现它

    waitAndGetUrl: function(expectedUrl){    
        return browser.wait(function(){
            return browser.getCurrentUrl().then(function(currentUrl){
                return expectedUrl === currentUrl;
            });
        }, 3000);
    }
    

    wait等待条件成为true。在这种情况下,您要等到currentUrl等于expectedUrl。如果不是,它将执行getCurrentUrl(),表示您已达到true的最大超时时间。如果你给出的最大超时结束,它将失败。有关详细信息和添加自定义超时消息,请参阅docs

答案 1 :(得分:0)

我们需要知道您可以更好地帮助的输出/错误,但尝试解决这个承诺:

it('click the fragment link', function(){
    testPageActions.clickOnFragmentLink();
    testPageActions.waitAndGetUrl().then(function(url) {
        expect(url).toContain(fragmentPath);
    };
});

如果clickOnFragmentLink()返回一个承诺,那么你也必须做同样的事情。

答案 2 :(得分:-1)

嘿伙计们,谢谢你们们给了我很好的想法。 基本上使用了第一个答案,但使用了.sleep而不是等待

describe("should click on link and add cookie", function(){
    it('click the fragment link', function(){
        var link = element(by.css(fragmentLinkCss));
        link.click().then(function(){
            browser.sleep(function(){
                browser.getCurrentUrl().then(function(url){
                    expect(url).toContain(fragmentPath);
                })
            }, 1000)
        });
    });

    it('should grab have the cookie set', function(){
        expect(testPageActions.getCookie()).toBe(Cookie);
    });
});