我刚刚更新到量角器2.0,我在项目中发现了一些问题。
expect()
失败,因为给定的文字为''
,似乎期望在sendKeys()
完成之前完成。
elem.clear().sendKeys('Message');
expect(elem.getAttribute('value')).toBe('Message');
我得到的错误是:
预期''成为'消息'。
在更新到量角器2.0之前有效,我知道其中一个beaking changes is related with then() and promises:
要启用更新并消除混淆,请删除 element()。然后函数,除非有一个动作结果。这个 功能是完全没必要的,因为它总是会解决 本身,但删除可能会导致重大变化。换句话说,一个 在动作发生之前,ElementFinder现在不再是一个承诺 调用。
但是在我的项目的其他测试中,它可以工作,我认为问题可能与我在循环中所期望的相关。这里整个代码
describe('message', function() {
it('Should fill out visible message fields', function(){
getDisplayedElements(element.all(by.model('message')))
.then(function(displayedMessageInputs){
_.each(displayedMessageInputs, function(elem){
elem.clear().sendKeys('Message');
expect(elem.getAttribute('value')).toBe('Message');
});
});
});
});
如果我使用then()函数它可以工作但是......我不喜欢它!
elem.clear().sendKeys('Message')
.then(function(){
return elem.getAttribute('value');
})
.then(function(inputValue){
expect(inputValue).toBe('Message');
});
答案 0 :(得分:1)
您展示它的第二种方式是正确的方法。 Promise用于清楚地组织异步回调行为。除非Promise在您预期之前解析,否则无法捕获sendKeys异步回调。此外,看起来它实际上是返回一个Promise,在这种情况下,似乎使用该函数提供的内容是明智的。如果你不喜欢使用两个游戏,你总是可以期待:
elem.clear().sendKeys('Message')
.then(function(){
expect(elem.getAttribute('value')).toBe('Message');
});