3

我在下面有以下 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>
4

2 回答 2

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 回答
0

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

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

这将选择任何span没有strike子元素的元素(并且是 a 的子元素,它是lia的子元素,是 a 的子元素,uldiv初始上下文节点的子元素)

并使用

div/ul/li/span[strike]

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

基于 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>
于 2012-10-17T19:12:22.937 回答