【问题标题】:Using Watir to verify strike tag exists in html使用 Watir 验证 html 中是否存在罢工标签
【发布时间】:2012-10-17 18:23:02
【问题描述】:

我在下面有以下 html 代码,我正在使用 watir 尝试验证 3 月没有罢工标签,而 4 月、6 月和 7 月确实有罢工标签。我很确定 xpath 是我回答的关键,但未能提出正确的解决方案。任何帮助是极大的赞赏。

<div class="availability">
Available:
    <ul>
     <li><span class="month available">March</span></li>
     <li><span class="month unavailable"><strike>April</strike></span></li>
     <li><span class="month unavailable"><strike>May</strike></span></li>
     <li><span class="month unavailable"><strike>June</strike></span></li>
    </ul>
</div>

【问题讨论】:

    标签: ruby xpath watir


    【解决方案1】:

    如果你使用的是 watir-webdriver,你可以这样做:

    #Create an array of the strike elements
    months_with_strike = browser.elements(:tag_name, 'strike').collect(&:text)
    
    #Determine if the specified month is in the array
    months_with_strike.include?('March')
    #=> false
    months_with_strike.include?('April')
    #=> true
    

    或者,如果您只想检查单个元素:

    browser.element(:tag_name => 'strike', :text => 'March').exists?
    #=> false
    browser.element(:tag_name => 'strike', :text => 'April').exists?
    #=> true
    

    重要的是,您可以使用:tag_name 作为定位器来获取自定义元素。

    注意:我认为这也应该适用于 watir-classic,但由于某种原因,我遇到了例外情况。

    【讨论】:

      【解决方案2】:

      使用(假设初始上下文节点是div元素的父节点)

      div/ul/li/span[not(strike)]
      

      这会选择任何没有strike 子元素的span 元素(并且是li 的子元素,ul 的子元素是div 的子元素,即初始上下文节点的子节点)

      并使用

      div/ul/li/span[strike]
      

      这会选择任何具有strike 子代的span 元素(并且是li 的子代,ul 的子代,div 的子代,div 的子代初始上下文节点)

      基于 XSLT 的验证

      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output omit-xml-declaration="yes" indent="yes"/>
       <xsl:strip-space elements="*"/>
      
       <xsl:template match="/">
           <xsl:copy-of select="div/ul/li/span[not(strike)]"/>
      ==============  
           <xsl:copy-of select="div/ul/li/span[strike]"/>
       </xsl:template>
      </xsl:stylesheet>
      

      将此转换应用于提供的 XML 文档时:

      <div class="availability">
      Available:
          <ul>
           <li><span class="month available">March</span></li>
           <li><span class="month unavailable"><strike>April</strike></span></li>
           <li><span class="month unavailable"><strike>May</strike></span></li>
           <li><span class="month unavailable"><strike>June</strike></span></li>
          </ul>
      </div>
      

      计算两个 XPath 表达式,并将结果(选定节点)复制到输出,由视觉上独特的分隔符字符串分隔:

      <span class="month available">March</span>
      ==============  
      <span class="month unavailable">
         <strike>April</strike>
      </span>
      <span class="month unavailable">
         <strike>May</strike>
      </span>
      <span class="month unavailable">
         <strike>June</strike>
      </span>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 2018-05-28
        • 2013-04-20
        • 1970-01-01
        • 2015-03-22
        相关资源
        最近更新 更多