我有这样的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 中的其他地方。我必须能够通过它的属性和它的 parent 来识别它。
我不确定该怎么做,我真的很喜欢一些建议。
在 watir-webdriver 中,如果我写:
b.element(:class => "card").element(:class => "title", :text => "BBBBBBBBB")
然后,据我所见,什么都找不到,因为 element(:class => "card") 将在第 3 行匹配第一个 card 元素,然后匹配 BBB...text 将失败,因为它是唯一的 AAA...在第一张卡下可用。
我想做类似的事情
b.elements(:class => "card").each { |elem| ...etc }
找到我要找的子元素,但是当我找到子元素的时候,我就不能轻易使用了。例如,我希望能够调用可见?在上面,但是结果很难从那个代码块中得到。我可以有一个分配给可见的局部变量吗?结果,或者我可以从 block 内抛出错误,但这并不是我真正想要的。
我真正追求的是:
b.elements(:class => "card").element(:class => "title", :text => "BBBBBBBBB").othermethods...
所以第一个方法调用找到所有具有卡片类的元素,然后在第二个方法中它找到那些卡片下具有类“title”和文本“BBBBBBBBB”的第一个元素。我知道一张卡片下只有一个带有“标题”类和文本“BBBBBBBBB”的元素。
但是这个功能不存在。有没有简单的方法来实现同样的事情?我真的很感激这里的一些指导。提前致谢。
最佳答案
如果 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
。
关于html - 瓦蒂尔 : How do I find an element where the class of that element and the class of one of its parents identifies it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14627344/