如果我有一个列表:
<html>
<head>
</head>
<body>
<ul>
<li><span class="A">Vans</span></li>
<li><span class="B">Cars</span></li>
<li><span class="B">Trucks</span></li>
<li><span class="C">Vans</span></li>
<li><span class="C">Cars</span></li>
<li><span class="C">Trains</span></li>
<li><span class="C">Cars</span></li>
<li><span class="C">Bikes</span></li>
</ul>
</body>
</html>
如何查看最后一个"Cars"项是否存在?
我正在尝试使用assertTextPresent
我使用//ul//li//span[contains(text(),'Cars')][last()]
作为目标,但是这是选择第一个 'Cars'行,因为包含文本的span在li
我也尝试了//span[last()][contains(text(),'Cars')]
,但这也选择了第一个'Cars'而不是最后一个。
我也试过//span[contains(text(),'Cars')][last()]
,但结果相同。
如果您试图找出最后一个<li>
的文本是否为"Cars",则:
//ul//li[last()][.="Cars"]
使用使用libxml2 (XPath 1.0)的Nokogiri进行测试:
require 'nokogiri'
doc = Nokogiri.HTML('<html><head></head><body>
<ul>
<li><span class="A">Vans</span></li>
<li><span class="B">Cars</span></li>
<li><span class="B">Trucks</span></li>
<li><span class="C">Vans</span></li>
<li><span class="C">Cars</span></li>
<li><span class="C">Trains</span></li>
<li><span class="C">Cars</span></li>
<li><span class="C">Bikes</span></li>
</ul>
</body></html>')
puts doc.at_xpath('//ul//li[last()]')
#=> <li><span class="C">Bikes</span></li>
puts doc.at_xpath('//ul//li[last()][.="Cars"]')
#=> nil
puts doc.at_xpath('//ul//li[last()][.="Bikes"]')
#=> <li><span class="C">Bikes</span></li>
假设你所说的"最后一个"Cars"项目"指的是<li><span class="C">Cars</span></li>
,那么你几乎是对的。您需要(//ul/li/span[contains(text(),'Cars')])[last()]
,它的意思是"包含"Cars"的<span>
元素集中的最后一个元素,并且包含在<li>
元素集中,包含在<ul>
元素集中。