量角器当页面崩溃时重新加载它

时间:2019-01-04 07:52:01

标签: angularjs protractor wait sleep

让我解释一下情况,我目前正在使用Protractor测试AngularJS网站,我根本没有开发它。

问题在于,绝对随机地有时未渲染该网站。只是空白,标题不同:

  • 如果标题为“ VideoGame”->则呈现网站
  • 如果标题为“ VideoGame-env-DEV”->那么该网站未呈现

不知道为什么,这也不是我的问题。

但是,当使用量角器进行测试时,它显然崩溃了。

所以我想用一个临时解决方案绕过这个问题:

    function specialRefreshFunction() {

    cpt=0;
    browser.get('https://blablabla');
    browser.waitForAngular();
    var title = browser.getTitle();
    while (title != "VideoGame") {
        cpt=cpt+1;
        //sleep(1000);
        //browser.sleep(1000);
        browser.get('https://blablabla');
        browser.waitForAngular();
        //browser.navigate().refresh();
        console.log("fail  "+cpt);
    }

    console.log("Correct title  " + title);}

我的解决方案不起作用。我是NodeJS和Protractor的新手,因此代码可能是胡说八道。

  • W10 64位
  • 最新的Chromedriver
  • 量角器5.4.2
  • NodeJS 10.15.0
  • 角度6.1.10

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以选择browser.wait

let EC = protractor.ExpectedConditions;
browser.wait(
    EC.presenceOf($('#some-element')),
    10000,
    'Element did not appear after route change'
).then(function() {}, function() {
    browser.refresh();
});

在此特定示例中,量角器将等待10秒,以使元素#some-element出现在页面上。 browser.wait返回一个Promise,因此您可以处理两种情况-当出现元素或未出现元素时。只需放置一些特定的选择器而不是页面上显示的$('#some-element'),您就可以认为页面已加载

但是,如果仅依靠标题值,则可以使用titleContains

var EC = protractor.ExpectedConditions;
// Waits for the title to contain 'foo'.
browser.wait(EC.titleContains('foo'), 5000);

答案 1 :(得分:0)

尝试创建这样的自定义承诺:

public vierifyPageTitle() {
    return new Promise((resolve, reject) => {
        const refreshUserData = setInterval(() => {
            return browser.getTitle().then((title) => {
                if (title === 'VideoGame') {
                    clearInterval(refreshUserData);
                    resolve(title);
                }
            }, (err) => {
                browser.refresh();
                reject(err);
            });
        }, 1000);
    });
}

如果标题不符合预期,则每1000毫秒刷新一次。