Селектор CSS (id содержит часть текста)

92

У меня есть вопрос. У меня есть примерно такие элементы:

<a> элемент с id = someGenerated Some: Same: 0: name

<a> элемент с id = someGenerated Некоторые: То же: 0: фамилия

<a> элемент с id = someGenerated Some: Same: 1: name

<a> элемент с id = someGenerated Some: Same: 1: фамилия

Мне нужен селектор CSS для получения имен. Проблема в том, что я не знаю, как это получить. Я попробовал a[id*='Some:Same']- вернул все <a>элементы. После того, как я могу получить элементы, идентификатор которых заканчивается именем. Но мне эта идея не нравится. Я думаю, что это можно сделать с каким-нибудь другим селектором.

ТарасЛьвов
источник
Не могли бы вы добавить несколько реальных примеров <a>тегов, которые вы хотите выбрать, и тех, которые вам не нужны. Так будет легче увидеть реальный код.
Andyb
Я не могу добавить реальный пример из-за политики конфиденциальности :(
TarasLviv
Но я могу объяснить это по-другому. Атрибуты идентификатора содержат следующее: некоторые сгенерированные символы + некоторые статические символы +: elementIndexInTable: + имя столбца в таблице
TarasLviv
А каковы критерии для тех, кого вы хотите?
Tarken

Ответы:

144

Попробуй это:

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

Это даст вам все aэлементы с идентификатором, содержащим

Некоторые: То же

и иметь идентификатор, заканчивающийся на

название

CosminO
источник
Что ж, id * у меня не сработал, и он сказал, что не может быть оценен как веб-элемент. Я использовал его, чтобы найти iframe, у которого есть идентификатор, подобный <constant><variable><constant>имени. //driver.findElements(By.xpath("//iframe[contains(@id*,'FrameID')]")).size();где FrameID - начало. В любом случае, //a[contains(@id,'Some:Same') and contains(@id,'name')]помогло мне. Так что +1 тебе, приятель.
anujin
2
Вы должны удалить селектор XPath из этого ответа, он ничего не добавляет и только мутит воду
Лиам
1
@CosminO Тебе нужно *следующее id?
cokedude
@cokedude оператор * = означает, что он должен содержать как минимум значение после оператора. Он работает вместе со вторым условием, что он должен заканчиваться чем-то еще с помощью оператора $ = См. Это для более подробного объяснения w3schools.com/css/css_attribute_selectors.asp Краткий ответ. Символ * находится не рядом с id, а рядом с = и образует оператор со специальным значением
CosminO
21
<div id='element_123_wrapper_text'>My sample DIV</div>

Оператор ^ - сопоставление элементов, начинающихся с заданного значения

div[id^="element_123"] {

}

Оператор $ - сопоставляет элементы, заканчивающиеся заданным значением

div[id$="wrapper_text"] {

}

Оператор * - сопоставление элементов, имеющих атрибут, содержащий заданное значение.

div[id*="wrapper_text"] {

}
Эдикарлос Лопес
источник
8

Единственный селектор, который я вижу, это a[id$="name"](все ссылки с идентификатором, заканчивающимся «именем»), но он не так строг, как должен.

LeBen
источник