xpath - assertTextPresent没有在UL中找到文本,为什么不呢?

时间:2013-04-12 18:44:54

标签: xpath selenium assert

如果我有一个清单:

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

2 个答案:

答案 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>