如何用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
相关产品推荐
相关产品推荐

