Sélecteur CSS (l'identifiant contient une partie du texte)

92

J'ai une question. J'ai des éléments quelque chose comme ça:

<a> élément avec id = someGenerated Some: Identique: 0: nom

<a> élément avec id = someGenerated Some: Idem: 0: nom de famille

<a> élément avec id = someGenerated Some: Identique: 1: nom

<a> élément avec id = someGenerated Some: Idem: 1: nom de famille

J'ai besoin d'un sélecteur CSS pour obtenir les noms. Le problème est que je ne sais pas comment l'obtenir. J'ai essayé a[id*='Some:Same']- il a renvoyé tous les <a>éléments. Après je peux obtenir des éléments dont l'identifiant se termine par un nom. Mais je n'aime pas cette idée. Je pense que cela peut être fait avec un autre sélecteur.

TarasLviv
la source
Pourriez-vous s'il vous plaît ajouter quelques exemples réels de <a>balises que vous souhaitez sélectionner et celles que vous ne voulez pas. Il sera plus facile d'aider à voir le vrai code.
andyb
Je ne peux pas ajouter d'exemple réel, en raison de la politique de confidentialité :(
TarasLviv
Mais je peux l'expliquer d'une autre manière. Les attributs d'ID contiennent suivant: quelques caractères générés + quelques caractères statiques +: elementIndexInTable: + nom de colonne dans la table
TarasLviv
Et quels sont les critères pour ceux que vous voulez?
Tarken

Réponses:

144

Essaye ça:

a[id*='Some:Same'][id$='name']

Cela vous donnera tous les aéléments avec un identifiant contenant

Certains: même

et que l'identifiant se termine par

Nom

CosminO
la source
Eh bien, id * n'a pas fonctionné pour moi et il a dit ne peut pas être évalué à un élément Web. Je l'ai utilisé pour trouver un iframe qui a un identifiant comme le <constant><variable><constant>nom. //driver.findElements(By.xpath("//iframe[contains(@id*,'FrameID')]")).size();où FrameID est la partie de début. Quoi qu'il en soit, a //a[contains(@id,'Some:Same') and contains(@id,'name')]fait l'affaire pour moi. Donc +1 à toi, mon pote.
anujin
2
Vous devriez supprimer le sélecteur XPath de cette réponse, il n'ajoute rien et ne fait que brouiller les eaux
Liam
1
@CosminO Avez-vous besoin du *prochain id?
cokedude
@cokedude l'opérateur * = signifie qu'il doit contenir au moins la valeur après l'opérateur. Cela fonctionne en conjonction avec la deuxième condition qu'il doit se terminer par autre chose en utilisant l'opérateur $ = Voir ceci pour une explication détaillée w3schools.com/css/css_attribute_selectors.asp Réponse courte. Le * n'est pas à côté de id, il est à côté de = et il forme un opérateur avec une signification particulière
CosminO
21
<div id='element_123_wrapper_text'>My sample DIV</div>

The Operator ^ - Correspond aux éléments commençant par une valeur donnée

div[id^="element_123"] {

}

The Operator $ - Correspond aux éléments qui se terminent par une valeur donnée

div[id$="wrapper_text"] {

}

L'opérateur * - Correspond aux éléments qui ont un attribut contenant une valeur donnée

div[id*="wrapper_text"] {

}
Edicarlos Lopes
la source
8

Le seul sélecteur que je vois est a[id$="name"](tous les liens dont l'identifiant se termine par "nom") mais ce n'est pas aussi restrictif qu'il le devrait.

LeBen
la source