我有下面的html代码,我正在使用watir来验证March没有一个打击标记,四月,六月和七月确实有打击标记。我非常确定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>
答案 0 :(得分:0)
使用(假设初始上下文节点是div
元素的父级):
div/ul/li/span[not(strike)]
这会选择没有span
孩子的任何strike
个元素(并且是li
的孩子,该孩子是ul
的孩子div
的子节点,它是初始上下文节点的子节点)
并使用:
div/ul/li/span[strike]
这会选择span
个strike
个子元素(并且是li
的子元素,该元素是ul
的子元素。 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>
答案 1 :(得分: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,但出于某种原因我会遇到异常。