如何使用内部文本获取元素(Watir,Nokogir,Hpricot)

时间:2010-02-13 21:03:29

标签: watir hpricot

我一直在和Watir,Nokogir和Hpricot一起探险。所有这些都使用top-gt; down方法,这是我的问题。即他们使用元素类型来搜索元素。我想在不知道元素类型的情况下使用文本找出元素。 e.g。

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

我想通过搜索Text2和Text3来获取element2和element1等。

请注意,我不知道元素是div还是tr / tds或链接等。我只知道文本。 Algorithem应该是这样的: 遍历所有元素,匹配内部文本,如果匹配则获取元素和父元素。

如果可能的话,让我知道吗?

2 个答案:

答案 0 :(得分:1)

我没有完整的答案,但您可以使用wiki中概述的text()功能(请参阅搜索内部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"]>

即。不是实际的元素。所以也许在这些情况下(你如何确定我不知道的这些实例)你可以检查它是否是一个元素,如果为false则得到父元素

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

抱歉,我没有完整的答案,但认为“text()”的东西现在值得一提。

答案 1 :(得分:1)

Watir有XPath支持。我对XPath并不熟悉,但我很确定它可以满足您的需求。类似的东西:

browser.element_by_xpath("some_xpath_magic").click

我还建议您在watir-general发布您的问题。