【问题标题】:Protractor 2.0 is not waiting to sendKeys() . Promises issueProtractor 2.0 不等待 sendKeys() 。承诺问题
【发布时间】:2015-04-17 19:29:43
【问题描述】:

我刚刚更新到 protractor 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().then 函数,除非有操作结果。这个 函数是完全没有必要的,因为它总是会解析为 本身,但删除可能会导致重大更改。换句话说,一个 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');
});

【问题讨论】:

  • 您有没有机会在这里看到 Chrome 和 Firefox 之间的行为差​​异? (它在 Chrome 中失败但在 Firefox 中按预期工作?)

标签: javascript angularjs jasmine protractor angularjs-e2e


【解决方案1】:

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

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

【讨论】:

  • 感谢您的代码有效,但我有一个奇怪的行为。 1.“消息”被写入。 2.期望是通过。 3. 输入是 clear()。第三步真的很奇怪。知道为什么会这样吗?
  • 很抱歉,我不完全了解您现在面临的问题。我怀疑在承诺解决后,您可能需要设置(取决于您使用的测试框架)“完成”功能。在 mocha 中,这是一个传递给“it”的函数,一旦 promise 完成就可以调用它。在 jasmine 中,您可以设置一个 runs/waitsFor/runs 样式的异步行为测试。您也很可能需要在 afterEach 块中删除您正在修改的元素,除非您不关心测试之间的元素突变;我会担心的事情。
  • @BTC Protractor 和 webdriver 对链式 Promise 实现了一些魔法,因此原始问题中的两种形式应该可以等效地工作。在量角器中。 (见github.com/angular/protractor/blob/master/docs/control-flow.md
猜你喜欢
  • 2019-04-29
  • 2019-06-20
  • 2021-10-07
  • 2021-05-25
  • 2019-12-10
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多