在前面的问题中,我已经看到等待url更改的一种好方法是使用:
browser.wait( function() {
return browser.getCurrentUrl().then(function(url) {
return /myURL/.test(url);
});
}, 10000, "url has not changed");`
但是我正在尝试一种方法,可以将myURL作为变量传递(以防我需要将其与其他站点一起使用)并且无法正常工作。
我正在我的页面对象文件中尝试此操作:
this.waitUrl = function(myUrl) {
browser.wait( function(myUrl) {
return browser.getCurrentUrl().then(function(url, myUrl) {
return myUrl.test(url);
});
}, 10000, "url has not changed");
};
有没有想法,如果可能的话,怎么办?
最佳答案
更新(2016年7月):和Protractor 4.0.0可以使用 urlIs
和 urlContains
内置的“预期条件”解决。
原始答案:
不要在myUrl
函数内部传递then
,它可以在页面对象函数范围内使用:
browser.wait(function() {
return browser.getCurrentUrl().then(function(url) {
return myUrl.test(url);
});
}, 10000, "url has not changed");
我将其定义为“预期条件”:
function waitUrl (myUrl) {
return function () {
return browser.getCurrentUrl().then(function(url) {
return myUrl.test(url);
});
}
}
这样您就可以通过以下方式使用它:
browser.wait(waitUrl(/my\.url/), 5000);