我如何通过CSS类与XPathfind一个元素?
在我的网页中,有一个名为Test的类。 我怎样才能findXPath?
这个select器应该可以工作,但是如果用合适的标记replace它,效率会更高。
//*[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 ')]
请注意,在所有这些版本中,最好将*replace为您实际希望匹配的任何元素名称,除非您希望在给定条件下search文档中的每个元素。
最简单的方法..
//div[@class="Test"]
假设你想要find<div class="Test">
如上所述。
我只是提供这个答案,就像Tomalak很久以前提供给我们的回答
//div[contains(concat(' ', @class, ' '), ' Test ')]
唯一正确的方法是使用XPath执行此操作:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
函数normalize-space
引导和结尾空格,并用一个空格replace空白字符序列。
注意
如果不需要这些Xpath查询,可能需要使用将CSSselect器转换为XPath的库,因为CSSselect器通常比XPath查询更易于读取和写入。 例如,在这种情况下,可以使用div[class~="foo"]
div.foo
div[class~="foo"]
和div.foo
来获得相同的结果。
一些图书馆,我已经能够find:
- 对于JavaScript : css2xpath & css-to-xpath
- 对于PHP : CssSelector组件
- 对于Python : cssselect
- 对于C# : css2xpath重装上阵
- 对于GO : css2xpath
在XPath,CSS,DOM和Selenium文档中可以find更一般的XPath,CSS,DOM和Selenium解决scheme:Rosetta Stone 。
具体而言,您的答案可以在项目ID和名称中find 。
一个有用的function可以从以前的答案中作出:
function matchClass($className) { return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]"; }
然后将函数调用连接到您的查询。
你可以find这样的例子(所有的CSS元素)
private By allElementsCss = By.xpath(".//div[@class]");