html - 瓦蒂尔 : How do I find an element where the class of that element and the class of one of its parents identifies it?

标签 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 中的其他地方。我必须能够通过它的属性和它的 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/

相关文章:

html - 如何使黑框垂直和水平居中?

javascript - 使用 jQuery 使 html5 音频片段在悬停时产生共鸣

ruby-on-rails - 迭代 Rails 对象数组以创建键/值对

ruby - 如何在 Rails 3 中通过 http 传输视频

testing - Watir 安装问题

watir - 以静默模式启动 Firefox

ruby - Watir-webdriver,即使找到了 "cast"元素也无法对其进行子类型化

html - CSS 扩展 div

javascript - 如何隐藏被点击元素的祖父元素的第一个子元素?

ruby-on-rails - 关于Ruby中symbol和instance method的一些问题