問題描述
我有一個表格,其中每一行都有一個下載鏈接,其中包含(部分)自動生成的 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("http://td[@class='journalTable-journalPost']/a[@class='htext-small' and text()='Download']"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList());
System.out.println(myIDs);
這篇關于如何使用 Selenium 和 Java 提取表格元素的 id 屬性的動態值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!