На моей веб-странице есть div с классом Test. Как я могу найти его с помощью XPath?
Как я могу найти элемент класса CSS с XPath?
Ответ 1
Этот селектор должен работать, но будет более эффективным, если вы замените его на подходящую разметку:
//*[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 ')]
Обратите внимание, что во всех этих версиях лучше всего заменить * на любое имя элемента, которое вы действительно хотите сопоставить, если вы не хотите искать каждый элемент в документе для данного условия.
Ответ 2
Самый простой способ.
//div[@class="Test"]
Предполагая, что вы хотите найти <div class="Test">
, как описано.
Ответ 3
Я просто предоставляю это в качестве ответа, поскольку Томалак предоставил в качестве комментария к медиуму ответ давным-давно
//div[contains(concat(' ', @class, ' '), ' Test ')]
Ответ 4
ТОЛЬКО правильный способ сделать это с помощью XPath:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Функция normalize-space
разделяет ведущее и конечное пробелы, а также заменяет последовательности пробельных символов на единое пространство.
Примечание
Если вам не нужны многие из этих запросов Xpath, вы можете использовать библиотеку, которая преобразует селектора CSS в XPath, поскольку селектора CSS обычно намного легче читать и писать, чем запросы XPath. Например, в этом случае вы можете использовать как div[class~="foo"]
, так и div.foo
, чтобы получить тот же результат.
Некоторые библиотеки, которые я смог найти:
- Для JavaScript: css2xpath и CSS к XPath
- Для PHP: Компонент CssSelector
- Для Python: cssselect
- Для С#: css2xpath Reloaded
- Для GO: css2xpath
Ответ 5
Более общие связанные решения XPath, CSS, DOM и Selenium можно найти в документе XPath, CSS, DOM и Selenium: Rosetta Stone.
В частности, ваш ответ можно найти в идентификаторе и имени элемента.
Ответ 6
Полезная функция может быть сделана из предыдущих ответов:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Затем просто выполните вызов функции в ваш запрос.
Ответ 7
вы можете найти элементы, подобные этому примеру (все элементы css)
private By
allElementsCss = By.xpath(".//div[@class]");