如何解决量角器过滤器多次调用
我有一些行的航班信息网格,其中包含航班号之类的属性。现在,我想基于目标航班号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
但是我无法解释原因。...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。