在前面的问题中,我已经看到等待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);

09-25 17:40