Selektor CSS (identyfikator zawiera część tekstu)

92

Mam pytanie. Mam takie elementy:

<a> element z id = someGenerated Some: Same: 0: name

<a> element z id = someGenerated Some: Same: 0: sename

<a> element z id = someGenerated Some: Same: 1: name

<a> element z id = someGenerated Some: Same: 1: sername

Potrzebuję selektora CSS, aby uzyskać nazwy. Problem w tym, że nie wiem, jak to zdobyć. Próbowałem a[id*='Some:Same']- zwróciło wszystkie <a>elementy. Po uzyskaniu elementów, których id kończy się na nazwę. Ale nie podoba mi się ten pomysł. Myślę, że da się to zrobić jakimś innym selektorem.

TarasLviv
źródło
Czy mógłbyś dodać prawdziwe przykłady <a>tagów, które chcesz wybrać, i tych, których nie chcesz. Łatwiej będzie pomóc zobaczyć prawdziwy kod.
andyb
Nie mogę dodać prawdziwego przykładu z powodu polityki poufności :(
TarasLviv
Ale mogę to wyjaśnić w inny sposób. Atrybuty Id zawierają dalej: niektóre wygenerowane znaki + kilka znaków statycznych +: elementIndexInTable: + nazwa kolumny w tabeli
TarasLviv
A jakie są kryteria dla tych, których chcesz?
Tarken

Odpowiedzi:

144

Spróbuj tego:

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

W ten sposób otrzymasz wszystkie aelementy zawierające id

Niektórzy: to samo

i mieć identyfikator kończący się na

Nazwa

CosminO
źródło
Cóż, id * nie działał dla mnie i powiedział, że nie można go ocenić na element sieciowy. Użyłem go do znalezienia elementu iframe, który ma id like <constant><variable><constant>name. //driver.findElements(By.xpath("//iframe[contains(@id*,'FrameID')]")).size();gdzie FrameID jest częścią początkową. W każdym razie załatwił //a[contains(@id,'Some:Same') and contains(@id,'name')]mi sprawę. Więc dawaj +1 swojemu koledze.
anujin
2
Powinieneś usunąć selektor XPath z tej odpowiedzi, nie dodaje niczego i tylko mętnieje wody
Liam
1
@CosminO Czy potrzebujesz *następnej id?
cokedude
@cokedude operator * = oznacza, że ​​musi zawierać co najmniej wartość po operatorze. Działa w połączeniu z drugim warunkiem, że musi kończyć się czymś innym, używając operatora $ = Zobacz to, aby uzyskać szczegółowe wyjaśnienie w3schools.com/css/css_attribute_selectors.asp Krótka odpowiedź. Znak * nie znajduje się obok id, jest obok = i tworzy operator o specjalnym znaczeniu
CosminO
21
<div id='element_123_wrapper_text'>My sample DIV</div>

Operator ^ - Dopasuj elementy, które zaczynają się od podanej wartości

div[id^="element_123"] {

}

Operator $ - Dopasuj elementy, które kończą się podaną wartością

div[id$="wrapper_text"] {

}

Operator * - Dopasuj elementy, które mają atrybut zawierający daną wartość

div[id*="wrapper_text"] {

}
Edicarlos Lopes
źródło
8

Jedyny selektor, jaki widzę, to a[id$="name"](wszystkie linki z identyfikatorem kończące się na „nazwa”), ale nie jest tak restrykcyjny, jak powinien.

LeBen
źródło