问题描述
我有一些行的航班信息网格,其中包含航班号之类的属性。现在,我想基于目标航班号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。
函数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
但是我无法解释原因。...