在要检查的 属性 是异步的流中查找元素

Find elements in stream where the property to check is async

使用 webdriver 我 select 网格第一列的元素,并想检查带有文本 Task 499 的元素是否是结果的一部分。
CSS 不允许 select 或引用文本内容,这将允许首先获得有问题的一个元素。

const firstColumnSelector = const By.cssSelector(
    'app-element::shadow #myGrid::shadow div.bwu-datagrid-cell.l0');

bool lastRowVisible = driver.findElements(firstColumnSelector)
    .contains((e) => e.text == 'Task 499' && e.displayed);

这不起作用,因为 e.text returns Future<String> 而不是 Stringe.displayed returns Future<bool> bool
contains() 也只接受 bool 但不接受 Future<bool>.

这可以用asyncMap()

解决
const firstColumnSelector = const By.cssSelector(
    'app-element::shadow #myGrid::shadow div.bwu-datagrid-cell.l0');

bool lastRowVisible = driver.findElements(firstColumnSelector)
    .asyncMap((e) async => await e.text == 'Task 499' && await e.displayed)
    .contains(true);