es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El método getText() imprime todas las cadenas en la lista en lugar de una sola cadena utilizando Selenium y Java.

Código HTML:

<div id="ajax_listOfOptions" style="display: block; top: 243px; left: 373px; z-index: 10009;">
    <div id="13020007" class="optionDivSelected">Infosys Ltd.</div>
    <div id="14094980" class="optionDiv">India Infrastructure Trust</div>
    <div id="13020033" class="optionDiv">Tata Consultancy Services Ltd.</div>
    <div id="12150008" class="optionDiv">Reliance Industries Ltd.</div>
    <div id="14030001" class="optionDiv">State Bank of India</div>
    <div id="14030055" class="optionDiv">HDFC Bank Ltd.</div>
    <div id="12520002" class="optionDiv">Hindustan Unilever Ltd.</div>
    <div id="14080001" class="optionDiv">Housing Development Finance Corporation Ltd.</div>
    <div id="14030056" class="optionDiv">ICICI Bank Ltd.</div>
    <div id="14060023" class="optionDiv">Bajaj Finance Ltd.</div>
</div>

Código de muestra:

List<webelement> li = driver.findElements(By.id("ajax_listOfOptions"));
for (WebElement wb : li) {
    if (wb.getText().contains("Tata"))
        System.out.print(wb.getText());
}

Esto debería imprimir solo la cadena que contiene “Tata” (es decir, Tata Consultancy Services), pero el código está imprimiendo todas las cadenas de la lista.

Nota: La lista contiene cadenas pobladas con sugerencias automáticas de Ajax.

Salida:
Infosys Ltd.
India Infrastructure Trust
Tata Consultancy Services Ltd.
Reliance Industries Ltd.
State Bank of India
HDFC Bank Ltd.
Hindustan Unilever Ltd.
Housing Development Finance Corporation Ltd.
ICICI Bank Ltd.
Bajaj Finance Ltd.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para imprimir solo la cadena que contiene “Tata”, necesitamos modificar el código para filtrar los elementos web utilizando xpath o selectores css. Así es como podemos modificar el código:

    Para xpath:

    WebElement list = driver.findElement(By.id("ajax_listOfOptions"));
    List<webelement> options = list.findElements(By.xpath(".//div[contains(text(),'Tata')]"));
    
    for (WebElement option : options) {
        System.out.println(option.getText());
    }
    

    Para selector css:

    WebElement list = driver.findElement(By.id("ajax_listOfOptions"));
    List<webelement> options = list.findElements(By.cssSelector("div[id*='']")
        .stream()
        .filter(e -> e.getText().contains("Tata"))
        .collect(Collectors.toList());
    
    for (WebElement option : options) {
        System.out.println(option.getText());
    }
    

    Ambos códigos imprimirán solo la cadena que contiene “Tata”:

    Tata Consultancy Services Ltd.

Comments are closed.