首页 > 解决方案 > 需要在外部使用该计数器变量,因为如果我调用该函数没有得到输出返回

问题描述

checkGridData(name: string, searchObj: ElementArrayFinder) {
    if (name != "") {
      let counter = 0;
      let beforesplit = name;
      let aftersplit = beforesplit.split("|");
      var countval = searchObj.count();
      return searchObj.count().then((count) => {
        for (let i = 0; i < aftersplit.length; i++) {
          let countval = searchObj.count();
          // expect(count).toBe(expectedRecords[i]);
          for (let j = 0; j < count; j++) {
            searchObj.get(j).getText().then(function (text) {
              if (text.indexOf(aftersplit[i]) !== -1) {
                expect(text).toContain(aftersplit[i]);
                ++counter
                //console.log("counter inside loop is" + counter)                 
              }
              return counter;

            });
          }
        }
      });
    }
  }

我是量角器的新手。我在下面写了一个函数

我在另一个函数中调用它。

var abc = this.CheckGridData(ProductData.AddEquipment.EquipmentSelection, ProductObj.ele_equipmentvalidation) 
    console.log("Counter value returned:" + abc)

我收到了这个错误

返回的计数器值:ManagedPromise::5760 {[[PromiseStatus]]: "pending"}

我试图做承诺,但我不知道如何解决承诺。如何在上面的 for 循环内部解决,以便我可以使用它并了解这个概念?我尝试了各种网站,但我不明白如何解决。

标签: loopspromiseprotractor

解决方案


因为函数 CheckGridData返回一个promise,所以变量abc是一个promise。

要消耗承诺的最终价值,您必须使用then()如下:

checkGridData(name: string, searchObj: ElementArrayFinder) {

  if (name != "") {
    let counter = 0;
    let beforesplit = name;
    let aftersplit = beforesplit.split("|");

    return searchObj.getText().then((texts) => {
      // texts is an string array of text of all elements of searchObj
      for (let i = 0; i < aftersplit.length; i++) { 
        if(texts.includes(aftersplit[i])) {
          ++counter;
        }
      }
      return counter;
    };
  }

}

var abc = this.CheckGridData(ProductData.AddEquipment.EquipmentSelection, 
                             ProductObj.ele_equipmentvalidation)

abc.then(function(count){
  console.log(count);
})

推荐阅读