我如何通过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:

  • 对于JavaScriptcss2xpathcss-to-xpath
  • 对于PHPCssSelector组件
  • 对于Pythoncssselect
  • 对于C#css2xpath重装上阵
  • 对于GOcss2xpath

在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]");