Jak mogę znaleźć element za pomocą klasy CSS z XPath?
Na mojej stronie jest div
z class
o nazwie Test
.
Jak mogę go znaleźć z XPath
?
6 answers
Ten selektor powinien działać, ale będzie bardziej wydajny, jeśli zastąpisz go odpowiednim znacznikiem:
//*[contains(@class, 'Test')]
Lub, ponieważ wiemy, że szukanym elementem jest div
:
//div[contains(@class, 'Test')]
Ale ponieważ to również pasuje do przypadków takich jak class="Testvalue"
lub class="newTest"
, Wersja @ Tomalak podana w komentarzach jest lepsza :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Jeśli chcesz być naprawdę pewien, że będzie pasować poprawnie, możesz również użyć funkcji normalize-space, aby wyczyścić bezpańskie białe znaki wokół nazwa klasy (jak wspomniano przez @ Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Zauważ, że we wszystkich tych wersjach, * powinno być najlepiej zastąpione dowolną nazwą elementu, którą chcesz dopasować, chyba że chcesz przeszukać każdy element w dokumencie pod kątem podanego warunku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 11:46:55
Najprostszy sposób..
//div[@class="Test"]
Zakładając, że chcesz znaleźć <div class="Test">
zgodnie z opisem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-14 14:51:06
Podaję to jako odpowiedź, Tak jak Tomalak podał jako komentarz do odpowiedzi medera dawno temu
//div[contains(concat(' ', @class, ' '), ' Test ')]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-11 00:10:11
The ONLY right way to do it with XPath :
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Funkcja normalize-space
usuwa początkowe i końcowe białe znaki, a także zastępuje sekwencje białych znaków pojedynczym spacją.
Uwaga
Jeśli nie potrzebujesz wielu z tych zapytań Xpath, możesz użyć biblioteki, która konwertuje selektory CSS do XPath, ponieważ selektory CSS są zwykle dużo łatwiejsze zarówno do odczytu, jak i zapisu niż zapytania XPath. Na przykład, w tym przypadku, można użyć zarówno div[class~="foo"]
i div.foo
aby uzyskać ten sam wynik.
Niektóre biblioteki, które udało mi się znaleźć:
- dla JavaScript : css2xpath & css-to-xpath
- dla PHP : komponent CssSelector
- dla Python : cssselect
- dla C# : css2xpath Reloaded
- dla GO : css2xpath
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-13 23:55:39
Pomocna funkcja może być wykonana z poprzednich odpowiedzi:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Następnie wystarczy połączyć wywołanie funkcji z zapytaniem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 17:25:51
Możesz znaleźć elementy takie jak ten przykład (wszystkie elementy css)
private By
allElementsCss = By.xpath(".//div[@class]");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 15:10:26