如果我有一个清单:
<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>
如何查看最后一个“汽车”项目?
我正在尝试使用assertTextPresent
我正在使用//ul//li//span[contains(text(),'Cars')][last()]
作为目标,但这是选择第一个'汽车'行,因为包含文字的范围在li
我也试过//span[last()][contains(text(),'Cars')]
,但这也选择了第一个'汽车'而不是最后一个。
我也尝试了//span[contains(text(),'Cars')][last()]
但结果相同。
答案 0 :(得分:1)
如果你想知道最后<li>
的文字是&#34;汽车&#34;,那么:
//ul//li[last()][.="Cars"]
使用Nokogiri进行测试,它使用libxml2(XPath 1.0):
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>
答案 1 :(得分:1)
假设“最后一个”汽车“项目”你的意思是<li><span class="C">Cars</span></li>
,你几乎是正确的。您需要(//ul/li/span[contains(text(),'Cars')])[last()]
,这意味着“<span>
包含”Cars“的元素集合中的最后一个元素,包含在<li>
s中包含的<ul>
内。< / p>