3

以下のhtmlコードを使用して、3月にストライクタグがなく、4月、6月、7月にストライクタグがあることを確認するためにwatirを使用しています。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>
4

2 に答える 2

0

使用(最初のコンテキストノードがdiv要素の親であると想定)

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

spanこれにより、子を持たない要素が選択されますstrike(そして、最初のコンテキストノードの子であるaの子であるliaulの子であるaの子です)div

そして使用

div/ul/li/span[strike]

これによりspan、子を持つ要素が選択されますstrike(そして、最初のコンテキストノードの子であるaの子であるliaulの子であるaの子です)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>

2つの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>
于 2012-10-17T19:12:22.937 に答える
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でも機能するはずですが、何らかの理由で例外が発生しています。

于 2012-10-17T20:44:33.070 に答える