使用ExpectedCondition修复Protractor 2.0中的等待

时间:2015-03-21 14:43:17

标签: angularjs protractor

由于Protractor 2.0发生了重大变化,我必须重构我的at()功能。我在非角度页面上使用它来等待页面加载,并返回true,因此它是可以预期的(如果这是一个单词)。

因为2.0不再返回定位器的承诺,所以它会中断我的等待(等待立即触发)。因此,我转向新的预期条件......这很好。 我的问题是,我是否正确使用了这个,还是有更好的解决方案?

页面对象定位器:

this.pageLoaded = $('div#splash[style="display: none;"]');

适用于Protractor 1.8.0(在2.0.0中断):

this.at = function() {
    var that = this;
    return browser.wait(function() {
        return browser.isElementPresent(that.pageLoaded);
    });
};

我的Protractor 2.0.0工作解决方案:

this.at = function() {
    var that = this;
    return browser.wait(function() {
        return protractor.ExpectedConditions.presenceOf(that.pageLoaded);
    });
};

例如,我会这样称呼:

expect(mainPage.at()).toBeTruthy();

1 个答案:

答案 0 :(得分:2)

看起来Protractor 2.0 changelog中有另一个重大变化,指的是WebDriver 2.45中的一个问题,它需要等待参数:

  

由于WebDriverJS的变化,等待没有超时,现在默认等待0毫秒而不是无限期等待。

     

在:

     

browser.wait(FN); //会无限期地等待

     

后:

     

browser.wait(fn,8000)//修复,添加显式超时

     

这将在下一版本的WebDriverJS中恢复。

在我们的量角器测试中,我们总是引用一个公共助手类var helper = require("..\helpers.scenario.js")。为了解决这个问题,我们只是在helper类中包装了browser.wait并传递了一个超时。

wait: function(f) {
    return browser.wait(f, 30000);
},

然后我们使用find-replace从browser.wait更改为helper.wait