如何使用Selenium和Java提取表元素的id属性的动态值

问题描述 投票:4回答:2

我有一个表,其中每一行都有一个带有(部分)自动生成的id元素的下载链接。这样做的原因是实际的href元素总是“#”,所以id分隔下载。

我需要在td中找到该id元素的名称。那就是:我知道表行有一个id元素,我知道名字的一部分,我需要得到确切的名字。

我一次访问一行,所以我只需要一次查看一个td。无需查看整个表格。

我知道如何在知道名字时找到一个元素。但是当我只知道类型是另一回事时找到元素。

...
<tr>
 <td class="journalTable-journalPost"
  <a class="htext-small" href="#" id="downloadJournalPost-345">Download</a>
 </td>
</tr>
<tr>
 <td class="journalTable-journalPost"
  <a class="htext-small" href="#" id="downloadJournalPost-346">Download</a>
 </td>
</tr>
...

我找不到webdriver中允许我按类型查找元素的任何方法。

部分名称可以使用,因为id的名称为“downloadJournalPost-xxx”,其中只有xxx更改。但链接文本是我能找到的唯一值,可以让我搜索部分匹配。

编辑:更完整的标记。

<td class="journalTable-journalpost">
 <span class="hb-tekst--sekundar">In <!----><est-ikon class="ng-star-inserted">
  <div aria-hidden="true" class="hb-ikon hb-ikon--pil3-inn  ">
   <svg focusable="false">
    <use xlink:href="#ikon-pil3-inn"></use>
   </svg>
  </div></est-ikon><!----></span>
 <span class="hb-tekst--mellomTittel hb-avstandIngen"> Application and attachments</span>
 <a class="hb-tekst--liten" href="#" id="lastNedJournalPost-2892">Download journal post</a>
</td>
java selenium-webdriver xpath css-selectors webdriverwait
2个回答
4
投票

要打印元素的id属性列表,您需要为visibilityOfElementLocated引入WebDriverWait,您可以使用Java8 stream()map(),您可以使用以下任一Locator Strategies

  • cssSelectorList<String> myID = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("td.journalTable-journalPost>a.htext-small"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()); System.out.println(myIDs);
  • xpathList<String> myIDs = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//td[@class='journalTable-journalPost']/a[@class='htext-small' and text()='Download']"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()); System.out.println(myIDs);

2
投票

在您首先找到元素之前,您无法检索它的属性值。

使用findElements方法使用以下定位器获取所有链接

table tr td[class='journalTable-journalPost'] a

然后使用for-each迭代每个元素以获取每个元素的id。

示例代码:

List<WebElement> listOfLinks = driver.findElements(By.cssSelector("table tr td[class='journalTable-journalPost'] a"));

for(WebElement link: listOfLinks) {
     System.out.println("id:" + link.getAttribute("id"));
}
© www.soinside.com 2019 - 2024. All rights reserved.