有没有办法使用 findElements 并将结果限制为前 x 项



我有一个表,它包含的列数可能会有很大差异(20 列最多 10,000 列(。 我有一个获取表数据的方法,以便我可以比较数据值,但我通常只需要出现在前几列中的值。 要从我正在使用的行中获取列数据:

List<WebElement> columns = rows.get(rnum).findElements(By.tagName("td"));

这将获取表中行号 rnum 的列(td 元素(。

我的问题是:有没有办法限制 findElements 只返回前 xx 个结果? 也许只返回前 100 列? 该方法在有 20 列时效果很好,但当有 10000 列时需要很长时间。 或者,有没有更好的方法来迭代行数据的 TD 元素,以便在找到所需的列时可以中断循环?

您可以首先使用索引到达第 20 个元素,然后可以使用 xpath 中的preceding来获取该元素之前的所有元素。在这种情况下,它将为您提供前 19 个元素。

您可以像这样操作:

List<WebElement> columns = rows.get(rnum).findElements(By.xpath("//td[20]//preceding::td"));

您可以使用它获取任意数量的元素,您只需要在 xpath 中提及该值作为索引。

如果您有以下列表中的n

List<WebElement> columns = rows.get(rnum).findElements(By.tagName("td"));

并且您只想访问前 50 列。在Java中,您可以通过两种方式实现。

解决方案-1:我们可以使用子列表函数来获取前 50 个元素

List<WebElement> firstFiftyCols = columns.subList(0, 50);

解决方案 2:使用 Java 8 流

List<WebElement> firstFiftyCols = columns.stream().limit(50).collect(Collectors.toList());

解决方案-3:借助xpath选择第一个N节点

List<WebElement> firstFiftyCols = rows.get(rnum).findElements(By.xpath("/td[position() >= 1 and not(position() > 50)]"));

注:I尝试过此 XPath 并检查列是否小于 50,然后返回列表直到最后一列。

将 50 替换为要访问的列数。

最新更新