我一直在和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应该是这样的: 遍历所有元素,匹配内部文本,如果匹配则获取元素和父元素。
如果可能的话,让我知道吗?
答案 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发布您的问题。