我在使用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()
答案 0 :(得分:1)
我认为你自己的答案是不正确的。
function
,请参阅docs。我认为它现在可以工作,因为你只是等待1秒钟。expect
。当expect
失败时,它会拒绝承诺,并会因为错误的原因而杀死你。随着你的初步问题和代码,你几乎得到了答案。你只需像这样实现它
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)
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);
});
});