Xpath: select div that contains class AND whose specific child element contains text

后端 未结 4 1823
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-13 04:02

With the help of this SO question I have an almost working xpath:

//div[contains(@class, \'measure-tab\') and contains(., \'someText\')]

Ho

相关标签:
4条回答
  • 2020-12-13 04:23

    To find a div of a certain class that contains a span at any depth containing certain text, try:

    //div[contains(@class, 'measure-tab') and contains(.//span, 'someText')]
    

    That said, this solution looks extremely fragile. If the table happens to contain a span with the text you're looking for, the div containing the table will be matched, too. I'd suggest to find a more robust way of filtering the elements. For example by using IDs or top-level document structure.

    0 讨论(0)
  • 2020-12-13 04:23

    You could use the xpath :

    //div[@class="measure-tab" and .//span[contains(., "someText")]]

    Input :

    <root>
    <div class="measure-tab">
      <td> someText</td>
    </div>
    <div class="measure-tab">
      <div>
        <div2>
           <span>someText2</span>
       </div2>
      </div>
    </div>
    </root>
    

    Output :

        Element='<div class="measure-tab">
      <div>
        <div2>
          <span>someText2</span>
        </div2>
      </div>
    </div>'
    
    0 讨论(0)
  • 2020-12-13 04:34

    You can use ancestor. I find that this is easier to read because the element you are actually selecting is at the end of the path.

    //span[contains(text(),'someText')]/ancestor::div[contains(@class, 'measure-tab')]
    
    0 讨论(0)
  • 2020-12-13 04:36

    You can change your second condition to check only the span element:

    ...and contains(div/span, 'someText')]
    

    If the span isn't always inside another div you can also use

    ...and contains(.//span, 'someText')]
    

    This searches for the span anywhere inside the div.

    0 讨论(0)
提交回复
热议问题