【问题标题】:Stop search after matching certain element (XPath)匹配特定元素后停止搜索(XPath)
【发布时间】:2018-10-24 10:34:59
【问题描述】:

我需要将元素与blockresult 匹配,直到第一次出现具有类block 但不是result 的元素。

XPath:

//div[contains(@class, 'result') and contains(@class ,'block')][following-sibling::div[contains(@class, 'block') and not(contains(@class,
'result'))]]

示例 1(在这种情况下有效):

<div class="block result"></div> <!-- match this -->
<div class="block result"></div> <!-- match this -->
<div class="block"></div>
<div class="block result"></div> <!-- DONT match this -->
<div class="block result"></div> <!-- DONT match this -->

示例 2(此处不匹配)

<div class="block result"></div> <!-- match this -->
<div class="block result"></div> <!-- match this -->

... 所以它与第二个示例中的任何内容都不匹配。我可以将以下选项设为可选,以便在两种情况下都匹配吗?

【问题讨论】:

    标签: xpath


    【解决方案1】:

    编辑:

    您可以将所有包含“块”的列表放入列表中,并在使用 getAttribute("class") 检查是否包含“结果”直到不包含为止。

    List<WebElement> aux = driver.findElements(By.xpath("//div[contains(@class ,'block')]"));
    
    for(WebElement a : aux) {
    
        if(a.getAttribute("class").contains("result")) {
    
            System.out.println(a.getText()); //Save in other list
    
    
        }else {
    
            break;
    
        }
    
    }
    

    【讨论】:

    • contains 是安全的,因为该元素可能包含其他类。另外,我相信/ 是给孩子的,而不是兄弟姐妹
    • 据我所知[@class = 'block result] 匹配&lt;div class="block result other1 other2"&gt;&lt;/div&gt; PS:我编辑了它。试试这个新的。
    • 不,不会的。 = 表示is equal to
    • 我提供了其他解决方案。它有效,但我不知道它是否适合您。
    【解决方案2】:

    不漂亮,但应该可以...

    //div[contains(concat(' ', @class, ' '), ' block ') and contains(concat(' ', @class, ' '), ' result ') and not(preceding-sibling::div[contains(concat(' ', @class, ' '), ' block ') and not(contains(concat(' ', @class, ' '), ' result '))])]
    

    它应该匹配具有 blockresult 类的 div,但前提是它们前面没有包含 block 类且没有 result 类的同级 div。

    查看这个问题的答案,了解我为什么使用concat()

    How can I match on an attribute that contains a certain string?

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多