Webdriver Selenium: trouver tous les éléments avec id similaire
J'ai cette xpath: //*[@id="someId::button"]
Appuyant sur il affiche une liste déroulante de valeurs.
Maintenant, je sais que tous les éléments de la liste ont un id comme ceci :
//*[@id="someId--popup::popupItemINDEX"]
où l'INDICE est un nombre de 1 à quel que soit le nombre d'options.
Je sais aussi de la valeur que je dois cliquer.
Une question: étant donné que je vais toujours connaître l'id du bouton qui génère la liste déroulante, puis-je obtenir tous les éléments dans la liste déroulante avec un réutilisables méthode? (J'ai besoin d'interagir avec plus d'une liste déroulante)
La façon dont j'ai pensé c'est:
obtenir la racine de l'identification de départ, comme dans:
//*[@id="someId
puis ajouter le reste : --popup::popupItem
. J'ai aussi besoin d'ajouter de l'index et j'ai pensé que je pourrais utiliser un bloc try (dans l'ordre pour obtenir cependant des exceptions quand je donne un plus grand que prévu de l'indice) comme ceci:
for(int index=1;index<someBiggerThanExpectedNumber;index++){
try{
WebElement aux= driver.findElement(By.xpath(builtString+index+"\"]"));
if(aux.getText().equals(myDesiredValue))
aux.click();
}catch(Exception e){}
}
Noter que je suis en utilisant le webdriver api java et.
Je voudrais savoir si cela fonctionne et si il ya un moyen plus facile de le faire, étant donné les premières informations que j'ai.
EDIT: j'ai suggéré fonctionne, mais, pour une solution plus facile, l'on a accepté la réponse devrait être vu
source d'informationauteur CosminO
Vous devez vous connecter pour publier un commentaire.
En règle générale, essayez de sélectionner plusieurs éléments en une seule requête, si possible. Recherche pour de nombreux éléments un par un, obtenez sérieusement ralentir.
Si je comprends vos besoins, une bonne façon de le faire serait d'utiliser
Pour plus d'informations sur XPath, voir la spec. Il est étonnamment un très bon lire si vous ne pouvez ignorer la merde!
Qui recherche et clique sur un élément du texte égal à votre valeur désirée qui contient des "someId--popup::popupItem" dans son ID.
Qui trouve tous simplement tous les éléments qui contiennent "someId--popup::popupItem" dans leur pièce d'identité. Vous pouvez alors parcourir la liste pour rechercher votre élément souhaité.
Saviez-vous que vous pouvez appeler
findElement()
sur unWebElement
à la recherche juste ce sont les enfants?-
driver.findElement(By.id("someId")).findElements(By.className("clickable"))
Sans un coup d'oeil sur le code HTML de base, je suppose que je ne peux pas proposer la meilleure approche, mais j'ai quelques dans ma tête.
Avez-vous essayé d'utiliser JavascriptExecutor?
Si vous êtes prêt à écrire un peu de JavaScript alors ce serait simple qu'en java (je pense)
Tout ce que vous devez faire est d'avoir un peu de JavaScript ramper à travers les DOM sous-arbre, et retourne la liste des éléments du DOM correspondant à vos critères. WebDriver sera alors heureusement marshall ce que
List<WebElement>
dans le monde java.Le plus Sûr de la Méthode à utiliser ici est
S'il vous plaît Laissez-moi savoir est au-dessus de funda fonctionne ou pas.