2012-10-17 35 views
3

我有下面的html代碼,我使用watir來驗證3月沒有罷工標籤,而4月,6月和7月有罷工標籤。我很確定xpath是我的答案的關鍵,但未能提出正確的解決方案。任何幫助是極大的讚賞。使用Watir來驗證罷工標籤是否存在於html

<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> 

回答

0

如果您正在使用的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,但由於某種原因我收到異常。

+0

完美。謝謝! – sleestak

0

使用(假設初始上下文節點的div元素的父元素)

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

這將選擇不具有一個strike子任何span元件(以及是一個子liul的孩子,它是div的孩子,它是初始上下文節點的孩子)

並使用

div/ul/li/span[strike] 

這將選擇具有strike孩子(並且是li是一個ul的孩子是一個div的孩子是一個孩子的孩子的任何span元素初始上下文節點)

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>