Cómo extraer los valores dinámicos de los atributos id de los elementos de una tabla utilizando selenio y Java

Hfrav:

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

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=186183&siteId=1
Recomendado
Clasificación