量角器过滤器多次调用

问题描述

我有一些行的航班信息网格,其中包含航班号之类的属性。现在,我想基于目标航班号flightno来过滤行。 flightno的值是15984234。代码如下所示

let trTarget = element.all(by.css('[kendogridlogicalrow]')).filter(tr => {
  return tr.all(by.css("[data-kendo-grid-column-index='1']")).getText().then(cellstxt => {
    console.log(cellstxt + '++++')
    console.log('1')
    if (cellstxt.includes(FlightNo)) {
      console.log(cellstxt + '----')
      console.log('2')
      return true;
    } else {
      return false;
    }
  });
}).first()

trTarget.getText().then(cellstxt => {
  console.log(cellstxt + '&&&&')
  console.log('3')
})

这些代码被包装为函数locateTrWithId,该函数返回trTarget。

调用函数的地方,代码如下所示

let trTarget = this.locateTrWithId(flightno);
var ele = trTarget.all(by.tagName('a')).first()
browser.wait(EC.elementToBeClickable(ele),10000)
ele.getText().then(txt => {
  console.log(txt + '*****')
  console.log('4')
})
ele.close()

函数locateTrWithId正常工作,但是当我尝试打印一些详细信息时,我发现了一些有趣的东西,请参阅console.log结果

15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2
p&&&&
3
15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2
15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2
15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2
15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2
15984234*****
4
15983767++++
1
15984065++++
1
15984234++++
1
15984234----
2

如屏幕截图所示,过滤器的一部分被调用了五次,其中之一与从已过滤的trTarget(打印3)中获取文本的一部分一起执行,其他则独立执行

另一件事是在调用并执行函数locateTrWithId之后,获得return trTarget的文本(打印4),然后再次执行过滤器!

以下是相应HTML代码的一部分

<tr kendogridlogicalrow="" data-kendo-grid-item-index="0" role="row" class="ng-star-inserted">...</tr>
<tr kendogridlogicalrow="" data-kendo-grid-item-index="1" role="row" class="ng-star-inserted">...</tr>
<tr kendogridlogicalrow="" data-kendo-grid-item-index="2" role="row" class="ng-star-inserted">
  <td kendogridcell="" kendogridlogicalcell="" role="gridcell" aria-selected="false" data-kendo-grid-column-index="0" colspan="1" aria-colindex="1" class="ng-star-inserted">...</td>
  <td kendogridcell="" kendogridlogicalcell="" role="gridcell" aria-selected="false" data-kendo-grid-column-index="1" colspan="1" aria-colindex="2" class="ng-star-inserted"><a href="#/admin/manifest-detail/30707" class="ng-star-inserted"> 15984234</a>
  </td>

</tr>

请对此进行解释。非常感谢!

解决方法

我有一个避免多次调用filter的解决方案

private locateTrWithId(GridIndex: number,FlightNo: string) {
  let tbTarget = this.opr.locateTb(GridIndex);

  var tdswithhyperlink = tbTarget.all(by.tagName('a'))
  tdswithhyperlink.each(td => {
    browser.wait(EC.elementToBeClickable(td),10000)
  })
  return tbTarget.all(by.css('[kendogridlogicalrow]')).filter(tr => {
    tr.element(by.css("[data-kendo-grid-column-index='1']")).getText().then(txt => {
      console.log(txt + '++++')
      console.log('1')
    })
    return tr.all(by.css("[data-kendo-grid-column-index='1']")).getText().then(cellstxt => {
      if (cellstxt.includes(FlightNo)) {
        console.log(cellstxt + '++++')
        console.log('2')
        return true;
      } else {
        return false;
      }
    });
  }).first().element(by.tagName('a')).click()
}

在这里,我将click动作集成到了filter动作(因此,我删除了返回/已过滤的trTarget的get Text的部分)。执行结果是

15983767++++
1
15984065++++
1
15984234++++
1
15984234++++
2

但是我无法解释原因。...