【问题标题】:Protractor- Generic wait for URL to change量角器 - 通用等待 URL 更改
【发布时间】:2016-03-25 08:02:52
【问题描述】:

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

如果这是可能的,有什么想法吗?如果可以,该怎么做?

【问题讨论】:

    标签: javascript testing asynchronous automation protractor


    【解决方案1】:

    更新(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);
    

    【讨论】:

    • 您好,感谢您的回复。两者都试了,得到了这个:Message: TypeError: myUrl.test is not a function Stacktrace: TypeError: myUrl.test is not a function at
    • @JamesBe 啊,当然,您正在使用正则表达式匹配,因此您传递到预期条件的 url 必须是正则表达式。更新了答案。
    • @JamesBe 你也可以传入一个字符串并通过new Regexp(myUrl)创建一个正则表达式对象。
    • 传奇!谢谢亚历克斯!
    • 而不是“myUrl.test(url)”,您可以包含任何在 myUrl 和 url 匹配时解析为 true 的内容,例如 myUrl.include(url)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多