我有一个表,其中每一行都有一个带有(部分)自动生成的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>
要打印元素的id属性列表,您需要为visibilityOfElementLocated引入WebDriverWait,您可以使用Java8 stream()
和map()
,您可以使用以下任一Locator Strategies:
cssSelector
:
List<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);
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);
在您首先找到元素之前,您无法检索它的属性值。
使用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"));
}