Protractor 2.0没有等待sendKeys()。承诺问题

时间:2015-04-17 11:23:03

标签: javascript angularjs jasmine protractor angularjs-e2e

我刚刚更新到量角器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');
});

1 个答案:

答案 0 :(得分:1)

您展示它的第二种方式是正确的方法。 Promise用于清楚地组织异步回调行为。除非Promise在您预期之前解析,否则无法捕获sendKeys异步回调。此外,看起来它实际上是返回一个Promise,在这种情况下,似乎使用该函数提供的内容是明智的。如果你不喜欢使用两个游戏,你总是可以期待:

elem.clear().sendKeys('Message')
.then(function(){
    expect(elem.getAttribute('value')).toBe('Message');
});