量角器承诺

时间:2015-11-22 09:25:04

标签: promise protractor

我只有一周大的量角器和Jasmine。我正在尝试Promises。我的测试是尝试获取元素的原始文本并使用新文本重命名。下面是我正在尝试的代码,但输出并不像预期的那样:

    element(by.css("css of the element")).getText().then(function(oldText) {
    newElementName= oldText + "-New Name";
});

    browser.actions().doubleClick(element(by.css("css of the element")).perform();
    element(by.css("")).sendKeys(newElementName,protractor.Key.ENTER);

    element(by.css("")).getText().
          then(function(afterRename) {
            expect(afterRename).toEqual(newElementName);

我想要" newElementName"的价值成为" oldText-新名称"但它被设置为" undefined"。

根据我的理解,到目前为止,脚本已经过解析,并创建了一系列承诺,引自https://github.com/angular/protractor/issues/909。所以对于上面的代码,promises将按顺序.getText(),. then(),. perform()referenced ,. sendKeys(),. getText(),. then(),expect() 。

为什么.perform()和.sendkeys()在newElementName被解析之前执行? 注意:如果不双击元素,则无法编辑文本。

也有人为#34;延期对象提供任何好的教程或链接"?我查看了许多链接,但无法找到任何有助于我理解这一概念的内容。

1 个答案:

答案 0 :(得分:2)

问题是,当您致电getText()时,sendKeys()承诺无法解决。它将在sendKeys()结束的promise之前解析,但此时为时已晚:参数(newElementName)已经传递了未定义的值。

您需要做的是在调用sendKeys()之前解决第一个承诺。另外,请记住ElementFinder可以重复使用。

var theElement = element(by.css("css of the element"));
theElement.getText().then(function(oldText) {
  newElementName = oldText + "-New Name";
  browser.actions()
    .doubleClick(theElement)
    .sendKeys(newElementName, protractor.Key.ENTER)
    .perform();
  afterRename = theElement.getText();
});

expect(afterRename).toEqual(newElementName);