Watir:我如何找到该元素的类及其父元素的类识别它的元素?

时间:2013-01-31 13:51:04

标签: html ruby watir-webdriver

我有像

这样的HTML
<div class="header"><div class="title">AAAAAAAAA</div></div>
<div class="body">
  <div class="card"><div class="xxx"><div class="yyy"><div class="title">AAAAAAAAA</div></div></div></div>
  <div class="card"><div class="xxx"><div class="yyy"><div class="zzz"><div class="title">BBBBBBBBB</div></div></div></div></div>
</div>

我需要做什么(通过watir-webdriver)“让我获得带有'title'类的元素,并使用文本'AAAAAAAAA',它是一个带有'card'类元素的子元素”。在这个例子中,我想在第三行找到带有'title'类的div。

它还不足以说“给我带有文本'AAAAAAAAA'和'title'类的元素”,因为该元素可能存在于DOM的其他地方。我必须能够通过它的属性及其父母来识别它。

我不知道该怎么做,并且真的很喜欢一些建议。

在watir-webdriver中,如果我写:

b.element(:class => "card").element(:class => "title", :text => "BBBBBBBBB")

然后,从我所看到的,没有找到任何东西,因为元素(:class =&gt;“card”)将匹配第3行的第一个卡片元素,然后匹配BBB ...文本将失败了,因为它只有AAA ......在第一张卡片下可用。

我做了类似

的事情
b.elements(:class => "card").each { |elem| ...etc }

找到我之后的子元素,但是当我找到子元素时,我无法轻易使用它。例如,我希望能够看到可见的?在它上面,但结果很难摆脱该代码块。我可以有一个我指定可见的局部变量?结果,或者我可以从块中抛出错误,但它不是我真正想要的。

我真正追求的是:

b.elements(:class => "card").element(:class => "title", :text => "BBBBBBBBB").othermethods...

所以第一个方法调用找到所有带有类卡的元素,然后在第二个方法中找到那些具有类“title”和文本“BBBBBBBBB”的卡下的第一个元素。我知道卡片下只有一个带有“标题”类和文字“BBBBBBBBB”的元素。

但是此功能不存在。有没有一种简单的方法来实现同样的目标?我真的很感激这里的一些指导。提前谢谢。

1 个答案:

答案 0 :(得分:3)

如果Justin或Željko为您提出更好的解决方案(如果他们这样做,我想知道它是什么,我自己!),我不会感到惊讶,但这里有些东西,虽然丑陋,但应该足够了:

target_parent_div = b.divs(class: "card").find { |div| div.div(class: "title", text: "AAAAAAAAA").exists? }
target_element = target_parent_div.div(class: "title", text: "AAAAAAAAA")

...然后根据您的需要使用target_element