0

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

所以问题是假设我有一个页面,我单击一个链接,它会将我重新路由到另一个页面,在那里它会做某事,然后将我路由回我要去的地方。

所以在 chrome 中,我确实点击了链接,然后获取了 url。网址 === 预期网址。

虽然在野生动物园

单击链接获取 url url === 重新路由 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()

4

3 回答 3

1

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

  1. Sleep 没有function,请参阅文档。我认为它现在可以工作了,因为您只需要等待 1 秒钟。
  2. 其次,您expect在比较中使用了 an 。当一个expect失败时,它会拒绝一个承诺,并会因为错误的原因杀死你的测试。

有了你最初的问题和代码,你几乎有了答案。你只需要像这样实现它

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

wait等待状态true变为。在这种情况下,您要等到currentUrl等于expectedUrl。如果不是,它将执行getCurrentUrl()您给定的最大超时成为true。如果您给出的最大超时时间已过,它将失败。有关更多信息并添加自定义超时消息,请参阅文档

于 2017-05-06T18:28:20.397 回答
0

我们需要知道您将获得更好的帮助的输出/错误,但请尝试解决承诺:

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

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

于 2017-05-05T16:19:59.543 回答
-1

嘿伙计们,谢谢你们给了我好主意。基本上使用了第一个答案,但使用了 .sleep 而不是 wait

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);
    });
});
于 2017-05-05T19:51:51.073 回答