CSS-Selektor (ID enthält einen Teil des Textes)

88

Ich habe eine Frage. Ich habe Elemente wie diese:

<a> Element mit id = someGenerated Some: Same: 0: name

<a> Element mit id = someGenerated Some: Same: 0: Nachname

<a> Element mit id = someGenerated Some: Same: 1: name

<a> Element mit id = someGenerated Some: Same: 1: Nachname

Ich brauche CSS-Selektor, um Namen zu bekommen. Das Problem ist, dass ich nicht weiß, wie ich es bekommen soll. Ich habe es versucht a[id*='Some:Same']- es wurden alle <a>Elemente zurückgegeben. Nachdem ich Elemente erhalten kann, endet die ID mit dem Namen. Aber ich mag diese Idee nicht. Ich denke, dass es mit einem anderen Selektor gemacht werden kann.

TarasLviv
quelle
Könnten Sie bitte einige echte Beispiele für <a>Tags hinzufügen , die Sie auswählen möchten, und solche, die Sie nicht möchten. Es wird einfacher sein, den echten Code zu sehen.
Andyb
Ich kann wegen der vertraulichen Richtlinien kein wirkliches Beispiel hinzufügen :(
TarasLviv
Aber ich kann es anders erklären. ID-Attribute enthalten als nächstes: einige generierte Zeichen + einige statische Zeichen +: elementIndexInTable: + Spaltenname in Tabelle
TarasLviv
Und was sind die Kriterien für die, die Sie wollen?
Tarken

Antworten:

140

Versuche dies:

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

Dadurch erhalten Sie alle aElemente, deren ID enthalten ist

Einige: Das Gleiche

und die ID endet mit

Name

CosminO
quelle
Nun, id * hat bei mir nicht funktioniert und es wurde gesagt, dass es nicht zu einem Webelement ausgewertet werden kann. Ich habe es benutzt, um einen Iframe zu finden, der eine ID wie den <constant><variable><constant>Namen hat. //driver.findElements(By.xpath("//iframe[contains(@id*,'FrameID')]")).size();wo FrameID Teil beginnt. Sowieso //a[contains(@id,'Some:Same') and contains(@id,'name')]hat der Trick für mich getan. Also +1 zu dir Kumpel.
Anujin
2
Sie sollten den XPath-Selektor aus dieser Antwort entfernen, er fügt nichts hinzu und trübt nur das Wasser
Liam
1
@CosminO Benötigen Sie den *nächsten id?
Kokedude
@cokedude Der Operator * = bedeutet, dass er mindestens den Wert nach dem Operator enthalten muss. Es funktioniert in Verbindung mit der zweiten Bedingung, dass es mit etwas anderem enden muss, indem der Operator $ = verwendet wird. Eine ausführliche Erklärung finden Sie unter w3schools.com/css/css_attribute_selectors.asp Kurze Antwort. Das * steht nicht neben id, es steht neben = und es bildet einen Operator mit besonderer Bedeutung
CosminO
16
<div id='element_123_wrapper_text'>My sample DIV</div>

Der Operator ^ - Elemente abgleichen, die mit dem angegebenen Wert beginnen

div[id^="element_123"] {

}

Der Operator $ - Match-Elemente, die mit einem bestimmten Wert enden

div[id$="wrapper_text"] {

}

Der Operator * - Entspricht Elementen, deren Attribut einen bestimmten Wert enthält

div[id*="wrapper_text"] {

}
Edicarlos Lopes
quelle
8

Der einzige Selektor, den ich sehe, ist a[id$="name"](alle Links mit ID-Endung nach "Name"), aber er ist nicht so restriktiv wie er sollte.

LeBen
quelle