Protractor- Generic等待URL更改

时间:2015-12-18 15:07:20

标签: javascript testing asynchronous automation protractor

在之前的问题中,我看到等待url更改的好方法是使用:

browser.wait( function() {
    return browser.getCurrentUrl().then(function(url) {
        return /myURL/.test(url);
    });
}, 10000, "url has not changed");`

但是我想尝试一种方法,我可以将myURL作为变量传递(如果我需要将其与其他网站一起使用)并且不起作用。

我在我的Page Object文件中尝试这个:

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 个答案:

答案 0 :(得分:11)

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

原始回答:

不要在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);

答案 1 :(得分:3)

对于那些想要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);

如果您想通过e2e测试验证这一点。

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

});