В моей странице, есть div
с class
именем Test
.
Как я могу найти это с XPath
?
В моей странице, есть div
с class
именем Test
.
Как я могу найти это с XPath
?
Ответы:
Этот селектор должен работать, но будет более эффективным, если вы замените его подходящей разметкой:
//*[contains(@class, 'Test')]
Или, поскольку мы знаем, что искомый элемент является div
:
//div[contains(@class, 'Test')]
Но так как это также будет соответствовать случаям, подобным class="Testvalue"
или class="newTest"
, версия @ Tomalak, предоставленная в комментариях, лучше :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Если вы хотите быть действительно уверены, что оно будет соответствовать правильно, вы также можете использовать функцию normalize-space для очистки случайных пробельных символов вокруг имени класса (как упомянуто @Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Обратите внимание, что во всех этих версиях * лучше всего заменить на любое имя элемента, которому вы действительно хотите соответствовать, если только вы не хотите искать каждый элемент в документе для заданного условия.
//div[contains(concat(' ', @class, ' '), ' Test ')]
- у вас тоже будут частичные совпадения.
Самый простой способ ..
//div[@class="Test"]
Предполагая, что вы хотите найти, <div class="Test">
как описано.
//
не только /
.
Только правильный способ сделать это с помощью XPath:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Функция normalize-space
удаляет начальные и конечные пробелы, а также заменяет последовательности пробельных символов одним пробелом.
Если вам не нужны многие из этих запросов Xpath, вы можете использовать библиотеку, которая преобразует селекторы CSS в XPath, поскольку селекторы CSS обычно намного проще читать и писать, чем запросы XPath. Например, в этом случае вы можете использовать оба div[class~="Test"]
и div.Test
получить одинаковый результат.
Некоторые библиотеки, которые мне удалось найти:
Я просто представляю это как ответ, как Томалак давал в качестве комментария к ответу медика давным-давно
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
учета всевозможных пробелов?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
не выбирают детей?
Полезная функция может быть сделана из предыдущих ответов:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Затем просто включите вызов функции в ваш запрос.
Вы можете найти элементы, подобные этому примеру (все элементы CSS)
private By
allElementsCss = By.xpath(".//div[@class]");