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.
4 Réponses :
Il existe un Vous avez également 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 linkText a> méthode: driver.findElement(By.partialLinkText("Partial Text"))
partialLinkText : driver.findElement(By.linkText("Some Text"))
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 ...
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.
Je connais linkText et partialLinkText, ces méthodes sont pour les liens uniquement, pas pour les éléments avec d'autres balises
Essayez d'utiliser des méthodes dans XPath.
driver.findElement(By.xpath("//button[text()='Some Text']"));
J'espère que cela fonctionnera!
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.
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;
}
}
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.