2013-04-12 42 views
0

如果我有一個列表:xpath - 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> 

我如何檢查上次「汽車」項目的存在呢?

我想使用assertTextPresent

我使用//ul//li//span[contains(text(),'Cars')][last()]爲目標,然而,這是選擇第一「汽車」行作爲包含文本的跨度是李裏

我也嘗試//span[last()][contains(text(),'Cars')],但這也選擇了第一個'汽車'不是最後一個。

我也試過//span[contains(text(),'Cars')][last()]但結果相同。

回答

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> 
1

假設通過「最後一個」汽車「項目」你的意思是<li><span class="C">Cars</span></li>,你幾乎說得對。您需要(//ul/li/span[contains(text(),'Cars')])[last()],這意味着「元素集合中包含」Cars「並且包含在中的最後一個元素包含在<ul>之內

相關問題