首页 文章

如何通过带有XPath的CSS类找到元素?

提问于
浏览
215

在我的网页中,有一个 div ,其中 class 名为 Test .

如何用 XPath 找到它?

6 回答

  • 23

    我只是提供这个作为答案,正如Tomalak在很久以前作为对meder的回答的评论

    //div[contains(concat(' ', @class, ' '), ' Test ')]
    
  • -5

    以前的答案可以提供有用的功能:

    function matchClass($className) {
        return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
    }
    

    然后将函数调用连接到查询中 .

  • 15

    最轻松的方式..

    //div[@class="Test"]
    

    假设您要按照描述找到 <div class="Test"> .

  • 0

    使用XPath的 ONLY 正确方法:

    //div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
    

    函数 normalize-space 剥离前导和尾随空格,并且还用单个空格替换空白字符序列 .


    注意

    如果不需要许多这些Xpath查询,您可能希望使用将CSS选择器转换为XPath的库,因为CSS选择器通常比XPath查询更容易读取和写入 . 例如,在这种情况下,您可以使用 div[class~="foo"]div.foo 来获得相同的结果 .

    我能找到的一些图书馆:

  • 354

    你可以找到像这个例子的元素(所有的css元素)

    private By 
    allElementsCss = By.xpath(".//div[@class]");
    
  • 109

    此选择器应该可以工作,但如果用适当的标记替换它会更有效:

    //*[contains(@class, 'Test')]
    

    或者,因为我们知道所搜索的元素是 div

    //div[contains(@class, 'Test')]
    

    但由于这也会匹配 class="Testvalue"class="newTest" 等案例,因此评论中提供的@ Tomalak版本为 better

    //div[contains(concat(' ', @class, ' '), ' Test ')]
    

    如果您希望确定它将正确匹配,您还可以使用normalize-space函数清除类名周围的杂散空格字符(如@Terry所述):

    //div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
    

    请注意,在所有这些版本中,*最好由实际希望匹配的任何元素名称替换,除非您希望搜索文档中的每个元素以获取给定条件 .

相关问题