1
votes

Résultats de la recherche - convertissez la liste webElement en chaîne et retournez true si une chaîne est disponible dans cette liste

Je veux créer une méthode qui obtiendra la liste des éléments Web par xpath, la convertira en une liste de chaînes, puis vérifier si le mot recherché est présent dans cette liste de chaînes.

J'ai essayé le code ci-dessous: p>

Printed Chiffon Dress, Faded Short Sleeve T-shirts, Blouse, Printed Summer Dress, Printed Dress, Printed Summer Dress, Printed Dress, Printed Summer Dress, Faded Short Sleeve T-shirts

La méthode System.out.println () renvoie:

public void verifySearchResult () {

    List<WebElement> lst=ldriver.findElements(By.xpath(productNames));
    List<String> strings = new ArrayList<String>();
    for(WebElement e : lst)
    {
        strings.add(e.getText());
        System.out.println(strings);

    }
    if (strings.contains("shirt"))
    {
        System.out.println("OK");
    }
    else
    {
        System.out.println("NO OK");
    }


}

Résultat de if, else boucle est NON OK. Si j'utilise la méthode .contains, toute la chaîne de produit comme "Faded Short Sleeve T-shirts" renvoie True.

Des idées?


0 commentaires

3 Réponses :


2
votes

Si j'ai bien compris, vous voulez savoir quand l'un des textes des éléments Web contient le mot chemise . La méthode suivante retournera true pour:

  • Robe en mousseline imprimée
  • T-shirts délavés à manches courtes

à cause de T-shirts à manches courtes délavés et false pour:

  • Robe d'été imprimée
  • Robe imprimée
public boolean verifySearchResult () {
    List<WebElement> list = driver.findElements(By.xpath(productNames));
    for(WebElement e : list) {
        if (e.getText().contains("shirt")) {
            return true;
        }
    }
    return false;
}


0 commentaires

1
votes

J'utiliserais simplement xpath pour y parvenir, plutôt en parcourant la liste et en gaspillant les ressources.

public boolean verifySearchResult (String productNames,String product_partial_text) {

    int matchingProducts=ldriver.findElements(By.xpath(productNames + "[contains(.,'" + product_partial_text + "')]")).size();

    if (matchingProducts>=1)
    {
        System.out.println("OK");
        return true;
    }
    else
    {
        System.out.println("NO OK");
    }
    return false;
}


0 commentaires

0
votes

Les deux solutions sont excellentes. Je veux juste montrer à OP comment le faire avec Streams API

driver.findElements(By.xpath(productNames)).stream().map(x -> x.getText()).anyMatch(x.equals("shirt"));

Le code ci-dessus obtiendra List , créez Flux de celui-ci. La méthode map changera le type de liste de WebElement à String en fonction de la méthode getText () . p>

Ensuite, nous écrivons un Prédicat si N'IMPORTE QUELLE des String de la liste correspond au mot shirt .

La ligne entière renvoie true ou false


0 commentaires