promise - Protractor promise

标签 promise protractor

我带着 Protractor 和 Jasmine 才一周大。我正在尝试 Promise。我的测试是尝试获取元素的原始文本并用新文本重命名它。下面是我正在尝试的代码,但输出不符合预期:

    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-New Name”,但它被设置为“未定义”。

根据我到目前为止的理解,脚本被解析并创建了一系列 promise ,引用自 https://github.com/angular/protractor/issues/909 。因此,对于上面的代码,promise 将按照 .getText()、.then()、.perform() referenced 的顺序排列。 、.sendKeys()、.getText()、.then()、expect()。

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

还有人有“延迟对象”的任何好的教程或链接吗?我查看了很多链接,但找不到任何可以帮助我理解这个概念的内容。

最佳答案

问题在于,当您调用 sendKeys() 时,getText() Promise 将不会得到解决。它将在 sendKeys() 返回的 Promise 解析之前解析,但那时为时已晚:参数 (newElementName) 已经传递了一个未定义的值。

您需要做的是在调用 sendKeys() 之前先解决第一个 promise 。另外,请记住 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);

关于promise - Protractor promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853316/

相关文章:

arrays - Protractor:将 ElementArrayFinder getTexts 存储在数组中并从方法返回数组

javascript - 元素不可见错误

javascript - Protractor.js 测试用例,用于 angular2 中的水平滚动和垂直滚动

javascript - Protractor - 如何在配置文件中排除 spec 文件?

javascript - 使用生成器 + promise 在 Firefox SDK 附加组件中/与 Firefox SDK 附加组件进行 "simulated synchronous"通信

Javascript 类似于 Java 8 上的 "Promise.all"(可能使用 lambda)

javascript - 从 Promise.all 返回不会从包装函数返回

node.js - 通过多次调用计算异步函数的执行时间

javascript - 触发 AngularJS $http promise 的错误条件?

javascript - PageObjects + 非 Angular 页面 - 如何加入它们?