0

如果我有一个清单:

<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()],但结果相同。

4

2 回答 2

1

如果您试图找出最后的文本是否<li>是“汽车”,那么:

//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>
于 2013-04-12T20:42:49.100 回答
1

假设你的意思是“最后一个“汽车”项目<li><span class="C">Cars</span></li>,你几乎是对的。你想要(//ul/li/span[contains(text(),'Cars')])[last()],这意味着“元素集合中的最后一个元素,这些元素是<span>s 包含“汽车”并包含在<li>s 中包含的<ul>s 中。

于 2013-04-13T00:15:39.153 回答