由于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();
答案 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
。