You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript在Protractor中遍历ElementArrayFinder获取元素文本?

在Protractor(TypeScript)中遍历ElementArrayFinder获取所有元素文本的正确方式

嘿,其实你最开始构思的那段简洁代码本身是完全正确的!直接用Promise.all配合map就能完美实现你要的遍历ElementArrayFinder获取每个元素文本的需求,代码如下:

// 简洁且正确的实现
const cellsTxt = await Promise.all(cells.map(cell => cell.getText()));

为什么这个写法可行?

ElementArrayFinder的map方法会遍历每个子ElementFinder,把每个元素转换成调用getText()后的Promise对象,Promise.all则会等待所有这些Promise都完成,最终返回一个包含所有元素文本的字符串数组,完全匹配你的需求。

你之前冗长代码的问题

你之前写的代码里有个明显的小失误:最后一行你写了cellsTxt = await Promise.all(cellsTxt);,但cellsTxt一开始是空数组,你应该传入的是用来收集Promise的cellsTxtPromise数组才对。修正后的版本是这样的:

let cellsTxt: string[] = [];
const cellsTxtPromise: Promise<string>[] = [];
cells.forEach((cell: ElementFinder, i: number) => {
  cellsTxtPromise[i] = cell.getText();
});
cellsTxt = await Promise.all(cellsTxtPromise);

不过这个写法完全没必要,用map的版本更简洁易读,也更符合异步代码的最佳实践。

另外你提到这个问题后来发现是由其他代码导致的,那只要确保cells这个ElementArrayFinder是正确定位到目标元素的,上面的简洁写法就能正常运行啦~

内容的提问来源于stack exchange,提问作者Olivvv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:17:07