Alternative de contenant dans cssSelector ? Selenium WebDriver
Je suis en utilisant le sélénium 2 (WebDriver).
Je suis de la localisation d'un bouton et en cliquant sur le script:
driver.findElement(By.cssSelector("button:contains('Run Query')"));
ou
driver.findElement(By.cssSelector("css=.gwt-Button:contains('Run Query')"))
dont le html, c'est comme :
<button type="button" class="gwt-Button" id="ext-gen362">Run Query</
button>
Que l'id est généré dynamiquement, je ne peux pas faire usage de l'ID.
Est-il possible d'utiliser cssSelector avec quelque chose comme la contient ? Est-ce possible?
OriginalL'auteur Nick Kahn | 2013-01-30
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire cela avec les sélecteurs CSS, car il n'y a pas une telle chose comme
:contains()
en CSS. C'était une proposition qui a été abandonnée il y a des années.Si vous souhaitez sélectionner l'élément de texte, vous devez utiliser un XPath sélecteur. Quelque chose comme
ou
XPath est pas moins fiable que n'importe quelle autre méthode de localisation. Il n'y a aucune règle qui dit que vous devez utiliser la même méthode d'emplacement à chaque fois. Si vous êtes obligés d'utiliser XPath dans quelques locators, c'est une performance qui devrait être acceptable.
OriginalL'auteur Ross Patterson
Une autre option est l'utilisation de jQuery, si elle est présente sur la page, quelque chose comme:
OriginalL'auteur Arran
CSS ne suffiront pas à obtenir ce dont vous avez besoin; vous ne peut pas filtre par le texte. Vous pouvez soit utiliser js pour obtenir l'id de l'élément, ou une boucle sur tous les boutons dans votre code jusqu'à ce que vous trouver celui avec le bon texte. Si c'était en python:
Vous pouvez facilement généraliser et de faire une fonction d'assistance, trop.
OriginalL'auteur outofculture
Je suis dans le même bateau, actuellement à l'aide de XPath sélecteurs "contient" pour trouver des éléments spécifiques du contenu du texte. Certains sont
<td>
et certains sont<td><a>
profond à l'intérieur de grandes tables (colonnes spécifiques, mais la ligne inconnue à l'avance). C'est très lent (4 à 5 secondes juste de trouver une entrée de la table avec Firefox 20), de sorte que j'espérais utiliser CSS pour être plus rapide. Souvent, le texte sera par lui-même (complet) et d'autres fois ce sera un nom de fichier à la fin d'un chemin, j'aimerais ignorer. Quelqu'un aurait-il des suggestions pour le plus rapide XPath motif de recherche, étant donné qu'il est connu de la colonne, mais inconnu de ligne, et peut-être un<td>
ou<td><a>
(parfois dans la même table). Serait une comparaison d'égalité beaucoup plus rapide que contient(), pour la majorité des cas où le texte, je suis à la recherche est complète (et non à la fin de tout autre texte)? Je pense qu'il y a une "commence par" la recherche, mais est-il une "se termine par" recherche? Je sais que l'utilisation d'un "id" serait même plus rapide, mais malheureusement, ce HTML n'a aucun Id d'ici, et ils ne peuvent pas être ajoutés. Je suis à la recherche pour trouver le<tr>
contenant ce texte afin que je puisse localiser un élément de plus dans la même ligne et obtenir son texte ou cliquez sur un lien. Il ne fait pas de mal à trouver un petit sous-ensemble de lignes et de vérifier leur texte, mais j'aimerais éviter de faire des recherches séparées pour les<td>
et<td><a>
si c'est possible.OriginalL'auteur Phil Perry
Vous ne pouvez pas utiliser contient mais l'utilisation d'une wild-card au lieu.
Je ne pense pas.
OriginalL'auteur Jinesh
OriginalL'auteur Shubham