迭代表标题行中的列,并使用SeleniumJava打印文本

relj7zay  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(96)

我正在尝试遍历一个表格标题行的列列表,需要打印出元素(getText())的文本。当特定的表格标题行有许多列(td)时,如何完成此操作?下面是XPATH和列的屏幕截图(共54列):
表头行的XPATH表达式://*[@id="accuracyTableWrapper"]/table/thead/tr
表列的XPATH表达式://*[@id="accuracyTableWrapper"]/table/thead/tr/td(其中有54个示例)
截图:

如何有效地完成这项工作,以便正确地打印出每个td的文本?请让我知道任何建议。

xqk2d5yq

xqk2d5yq1#

下面的代码将打印td节点中的所有文本:

List<WebElement> tdList = driver.findElements(By.xpath("//*[@id=\"accuracyTableWrapper\"]/table/thead/tr/td"));
        for (WebElement element : tdList) {
            System.out.println(element.getText());
}
oxiaedzo

oxiaedzo2#

给定HTML...

元素似乎是动态元素,因此要打印理想的文本,您需要为visibilityOfAllElementsLocatedBy()引入WebDriverWait,并且可以使用以下locator strategies

  • 使用 cssSelector
List<WebElement> elements = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#accuracyTableWrapper > table > thead > tr td")));
for(WebElement element : elements)
{
  System.out.println(element.getText());
}
  • 使用 xpath
List<WebElement> elements = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id="accuracyTableWrapper"]/table/thead/tr//td")));
for(WebElement element : elements)
{
  System.out.println(element.getText());
}

使用Java8的stream()map(),您可以使用以下locator strategies

  • 使用 cssSelector
System.out.println(new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#accuracyTableWrapper > table > thead > tr td"))).stream().map(element->element.getText()).collect(Collectors.toList()));
  • 使用 xpath
System.out.println(new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id="accuracyTableWrapper"]/table/thead/tr//td"))).stream().map(element->element.getText()).collect(Collectors.toList()));

相关问题