2010-02-13 34 views
2

我一直在與Watir,Nokogir和Hpricot一起進行實驗。所有這些都使用top-> down方法,這是我的問題。即它們使用元素類型來搜索元素。我想在不知道元素類型的情況下使用文本找出元素。 例如如何獲得使用內部文本元素(Watir,Nokogir,Hpricot)

<element1> 
    <element2> Text2 </element2> 
    <element3> Text3 </element3> 
    text4 
</element1> 

我想通過搜索Text2和Text3來獲取element2和element1等。

請注意,我不知道元素是div還是tr/tds或鏈接等。我只知道文本。 Algorithem應該是這樣的: 遍歷所有元素,匹配內部文本,如果匹配讓我元素和父元素。

讓我知道這是可能的任何方式嗎?

回答

1

我沒有一個完整的答案,但您可以使用wiki(請參閱搜索內部HTML)中概述的文本()功能。

doc.search("*[text()='Text3']") 

將返回

#<Hpricot::Elements[{elem <element3> " Text3 " </element3>}, " Text3 "]> 

然後,您可以通過這些迭代,並檢查它們是實際的元素:

doc.search("*[text()='Text3']")[0].elem? 

將返回true。而[1]將返回false。然而,在這倒下是,如果你試圖找到text4,因爲這將返回:

#<Hpricot::Elements["\n  text4\n"]> 

即沒有實際的元素。因此,也許在這些情況下(你如何確定這些情況下,我不知道),你可以檢查它是否是一個元素,而如果爲假獲取父

doc.search("*[text()='text4']")[0].parent 

對不起,我沒有一個完整的答案,但思想「文本()」的東西現在值得一提。

1

Watir有XPath的支持。我對XPath並不熟悉,但我確信它會做你需要的。就像:

browser.element_by_xpath("some_xpath_magic").click 

我也建議您發佈您的問題在watir-general

相關問題