Javascript 量角器2.0未等待sendKeys()。承诺问题

Javascript 量角器2.0未等待sendKeys()。承诺问题,javascript,angularjs,jasmine,protractor,angularjs-e2e,Javascript,Angularjs,Jasmine,Protractor,Angularjs E2e,我刚更新到Gragorator 2.0,我在项目中发现了一些问题 expect()失败,因为给定的文本是'它似乎是在sendKeys()完成之前完成的 elem.clear().sendKeys('Message'); expect(elem.getAttribute('value')).toBe('Message'); 我得到的错误是: 预期“”为“消息” 在升级到量角器2.0之前,这一点很有效,我知道: 要启用更新并消除混淆,这将删除 元素()。然后函数,除非有操作结果。这 函数是完全不必

我刚更新到Gragorator 2.0,我在项目中发现了一些问题

expect()
失败,因为给定的文本是
'
它似乎是在
sendKeys()
完成之前完成的

elem.clear().sendKeys('Message');
expect(elem.getAttribute('value')).toBe('Message');
我得到的错误是:

预期“”为“消息”

在升级到量角器2.0之前,这一点很有效,我知道:

要启用更新并消除混淆,这将删除 元素()。然后函数,除非有操作结果。这 函数是完全不必要的,因为它总是解析为 本身,但移除可能会导致破坏性更改。换句话说,一个 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');
});

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

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

谢谢你的代码,但我有一个奇怪的行为。1.“消息”已写入。2.期待就是过去。3.输入已清除()。第三步真的很奇怪。你知道为什么会这样吗?对不起,我不太明白你现在面临什么问题。我怀疑,在承诺得到解决之后,您可能需要设置(取决于您使用的测试框架)一个“完成”的功能。在mocha中,这是一个传递给“it”的函数,一旦承诺得到解决,就可以调用它。在jasmine中,可以设置runs/waitsFor/runs样式的异步行为测试。您也很可能需要删除在每个块后修改的元素,除非您不关心测试之间的元素突变;我会关心的一些事情。@BTC量角器和webdriver实现了一些链接承诺的魔法,所以原始问题中的两种形式应该是等效的。在量角器中。(请看)你有没有可能在这里看到Chrome和Firefox在行为上的差异?(它是否在Chrome中失败,但在Firefox中却能正常工作?)