assertTextPresent在UL中找不到文本,为什么不呢?



如果我有一个列表:

<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>元素集中。

相关内容

  • 没有找到相关文章

最新更新