Tengo una tabla donde cada fila tendrá un enlace de descarga con una (en parte) generada automáticamente elemento de identificación. La razón de esto es que el elemento href-real Allways ser "#", por lo que los identificadores se separan las descargas.
Necesito encontrar el nombre de ese elemento id en la TD. Es decir: sé que la fila de la tabla tiene un elemento de identificación, y sé parte del nombre, y necesito para obtener el nombre exacto.
Estoy acceder a cada fila de a uno por vez, por lo que sólo tendrá que mirar dentro de un touchdown a la vez. No hay necesidad de mirar a través de toda la tabla.
Sé muy bien cómo encontrar un elemento cuando sé el nombre. Pero para encontrar el elemento cuando sólo sé el tipo es otra cosa.
...
<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>
...
No puedo encontrar ningún método (s) en el WebDriver que me permite encontrar un elemento por tipo.
nombre parcial funcionaría, desde la década de identificación consigue el nombre de "downloadJournalPost-xxx", donde xxx sólo cambios. Pero texto del enlace es el único valor que puedo encontrar que me permite buscar una coincidencia parcial.
EDIT: Más de marcado completa.
<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>
Para imprimir la lista de Identificación del atributo del elemento que necesita para inducir WebDriverWait para el visibilityOfAllElementsLocatedBy()
y se puede utilizar Java8 stream()
y map()
y se puede utilizar cualquiera de las siguientes estrategias de localización :
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);