Protractor- 通用等待URL改变

11
在之前的问题中,我看到等待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");
};

不知道这是否可能,如果可能的话,如何做到呢?

2个回答

12

更新(2016年7月):使用Protractor 4.0.0,您可以使用内置的预期条件urlIsurlContains来解决此问题。


原始回答:

不要在then函数中传递myUrl,它可以从页面对象函数作用域中获取:

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);

嗨,谢谢回复。 尝试了两种方法,结果是这样的: 消息: 类型错误:myUrl.test 不是一个函数 堆栈跟踪: 类型错误:myUrl.test 不是一个函数 at - James Be
@JamesBe 噢,没问题,你正在使用正则表达式匹配,所以你传入预期条件的 URL 必须是一个正则表达式。已更新答案。 - alecxe
@JamesBe 你也可以传入一个字符串,并通过 new Regexp(myUrl) 创建一个正则表达式对象。 - alecxe
传奇!谢谢alecxe! - James Be
可以替换 "myUrl.test(url)" 的部分为任何能够在 myUrl 和 url 匹配时返回 true 的表达式,例如 myUrl.include(url)。 - emery

6

对于那些想要了解Protractor 4.0.0到5.3.0的示例的人

您可以像这样使用“ExpectedConditions”...

var expectedCondition = protractor.ExpectedConditions;
// Waits for the URL to contain 'login page'.
browser.wait(expectedCondition.urlContains('app/pages/login'), 5000);

如果您想通过端到端测试来验证此内容。
it('should go to login page', function() {
    loginPage.login();
    const EC = protractor.ExpectedConditions;

    browser.wait(EC.urlContains('app/pages/login'), 5000).then(function(result) {
        expect(result).toEqual(true);
    });

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接