【问题标题】:Finding an element that has : specific attribute and a child with specific text查找具有 : 特定属性和具有特定文本的子元素的元素
【发布时间】:2012-12-10 09:41:45
【问题描述】:

对于下面的代码示例,我需要检查一个带有 type="a" 的 tr 和一个带有文本“3”的 td 是否存在:

<table>
    <tr type="a">
     <td>1</td>
    </tr>
    <tr type="b">
     <td>1</td>
    </tr>
    <tr type="a">
     <td>3</td>
    </tr>
</table>

试过这个:

    b.tr( :xpath =>"//tr[@type='a']").td( :text =>'3').exists?

但它不起作用(xpath 表达式仅返回 2 个现有的第一个 tr)。

有什么想法吗? 如果我需要的 tr 存在,是否有一个 xpath 表达式将返回 true ?

【问题讨论】:

    标签: xpath watir-webdriver


    【解决方案1】:

    或者,这也可以在没有 xpath 的情况下完成:

    b.trs.count{ |tr|
      tr.attribute_value('type') == 'a' and tr.td(:text, '3').present? 
    } > 0
    

    有点冗长,但我认为它比 xpaths 更容易阅读。

    【讨论】:

    • 完美运行!谢谢。
    【解决方案2】:

    使用

    boolean(/*/tr[@type='a']/td[. = 3])
    

    当存在一个td 其字符串值等于数字3 并且其父trtype 属性的字符串值为“a”时,此XPath 表达式的计算结果为true(),其中(tr)是 XML 文档顶部元素的子元素。

    否则 XPath 表达式的计算结果为 false()

    【讨论】:

      【解决方案3】:
      b.tr(:xpath =>"//tr[@type='a']", :index => 1).td(:text =>'3').exists?
      

      b.tr(:xpath =>"(//tr[@type='a'])[2]").td(:text =>'3').exists?
      

      【讨论】:

      • 不确定为什么要使用索引..?这只是一个代码示例,我不确定我要查找的内容是否有索引 2
      【解决方案4】:

      我不确定这是否有帮助,但此代码返回 xpath 表达式返回的元素数量的计数,因此您可以检查计数是否为 0,然后没有匹配项,否则它将返回匹配项的数量:

      var doc = document.evaluate("//table/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
      doc.snapshotLength
      

      var doc = document.evaluate("//table[@id='tableId']/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
      doc.snapshotLength
      

      如果你有你的表的 id。

      希望这对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-21
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多