2
votes

Sélectionnez élément par texte dans Selenium

Cela peut sembler si simple mais pourquoi il n'y a pas de méthode pour trouver un élément par son texte interne sans utiliser xpath? par exemple, il existe un élément:

driver.findElement(By.innerText("Some Text");

et Selenium ne fournit aucune méthode pour le sélectionner par texte interne. Quelque chose comme:

<button>Some Text</button>

Quelle est l'autre façon de trouver élément par texte interne? Je connais bien xpath, mais je ne peux pas l'utiliser à cause des restrictions du projet.


0 commentaires

4 Réponses :


5
votes

Il existe un linkText a> méthode:

driver.findElement(By.partialLinkText("Partial Text"))

Vous avez également partialLinkText :

driver.findElement(By.linkText("Some Text"))

Pour des exemples, voir comment-localiser-élément-par-lien-texte-et-partiel -link-text-locator

Modifier: Comme @Cajova_Houba l'a mentionné, cela ne fonctionne que pour les éléments d'ancrage


2 commentaires

les méthodes répertoriées sélectionneront les éléments qui ont une balise, les méthodes ne fonctionneront pas pour les autres éléments


@NodirNasirov vous avez raison! Voir la dernière ligne dans la réponse ... C'est une bonne question ici car j'ai voté pour ... Je pense que vous devriez suggérer cette fonctionnalité au sélénium via GitHub ... En ce qui concerne ma réponse, certains utilisateurs de dépassement de pile peuvent la trouver utile. .. Henc ma réponse ...



-1
votes

Cela ne semble pas possible pour tous les éléments, selon Documentation Selenium . Vous pouvez essayer d'utiliser

By.partialLinkText("partial link text")

ou

By.linkText("link text")

Mais cela fonctionne pour les éléments d'ancrage ( ) uniquement.


1 commentaires

Je connais linkText et partialLinkText, ces méthodes sont pour les liens uniquement, pas pour les éléments avec d'autres balises



0
votes

Essayez d'utiliser des méthodes dans XPath.

driver.findElement(By.xpath("//button[text()='Some Text']"));

J'espère que cela fonctionnera!


1 commentaires

Si vous lisez la question, j'ai dit que je connaissais bien xpath et que le projet a des limites, l'utilisation de xpath est interdite.



0
votes

Je pense que cela fonctionne en java.

        WebElement chosenElement;
        List<WebElement> elements = driver.findElements(By.tagName("button"));
        for(WebElement element:elements){
            if(element.getText().equals("Some Text")){
                chosenElement = element;
                break;
            }
        }


1 commentaires

J'avoue que je n'ai jamais vu une page avec des milliers de boutons mais je vais vous croire sur parole qu'ils existent. Je ne sais pas combien de temps il faut à findElements pour trouver tous les éléments de la page, mais je pense que la boucle java traiterait plusieurs milliers d'éléments sans retard notable.