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

我有一个表格,其中每一行都有一个下载链接,其中包含(部分)自动生成的 id 元素.这样做的原因是实际的 href 元素总是#",所以 id 将下载分开.

I have a table where each row will have a download link with a (partly) auto-generated id element. The reason for this is that the actual href-element will allways be "#", so the id's separate the downloads.

我需要在 td.id 中找到该 id 元素的名称.即:我知道表格行有一个id元素,而且我知道部分名称,我需要得到确切的名称.

I need to find the name of that id element in the td. That is: I know the table row has an id element, and I know part of the name, and I need to get the exact name.

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

I'm accessing each row one at a time, so I only need to look within ONE td at a time. No need to look through the whole table.

当我知道名称时,我就知道如何找到一个元素.但是在只知道类型的情况下找到元素是另一回事.

I know well how to find an element when I know the name. But to find the element when I only know the type is another thing.

...
<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 中找不到任何可以让我按类型查找元素的方法.

I cannot find any method(s) in the webdriver that lets me find an element by type.

部分名称会起作用,因为 id 的名称为downloadJournalPost-xxx",其中只有 xxx 发生变化.但是链接文本是我能找到的唯一值,它可以让我搜索部分匹配.

Partial name would work, since the id's get the name "downloadJournalPost-xxx", where only xxx changes. But link text is the only value I can find which lets me search for a partial match.

更完整的标记.

<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>

推荐答案

打印你需要的元素的id attribute的List为 visibilityOfAllElementsLocatedBy() 诱导 WebDriverWait 并且您可以使用 Java8 stream()map() 并且您可以使用关注定位器策略:

To print the List of id attribute of the element you need to induce WebDriverWait for the visibilityOfAllElementsLocatedBy() and you can use Java8 stream() and map() and you can use either of the following Locator Strategies:

  • cssSelector:

List<String> myID = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("td.journalTable-journalPost>a.htext-small"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList());
System.out.println(myIDs);

  • xpath:

    List<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);
    

  • 相关文章