我们正在使用watir进行测试,并想知道如何选择符合特定条件的一组div?在我们的例子中,(简化的)html看起来像这样:
<div class="month_main>
<div class="month_cell">
some divs
</div>
<div class="month_cell">
some_other_divs
</div>
<div class = "month_cell OverridenDay">
<div id = "month-2013-05-04"/>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我们想循环遍历所有div,其中id以'month'开头,包含在month_cell也包含类的父div中OverridenDay.是否有一个Xpath或正则表达式,我们可以与Watir浏览器类一起使用来执行此操作?
Jus*_* Ko 12
一般
您可以通过与获取单个元素类似的方式获取元素集合.您基本上需要复数元素类型方法.例如:
#Singular method returns first matching div
browser.div
#Pluralized method returns all matching divs
browser.divs
Run Code Online (Sandbox Code Playgroud)
可以使用与单个元素相同的定位符来使用集合.
解
对于您的问题,您可以:
#Iterate over divs that have the class 'month_cell OverridenDay'
browser.divs(:class => 'month_cell OverridenDay').each do |overridden_div|
#Within each div with class 'month_cell OverridenDay',
# iterate over any children divs where the id starts with month
overridden_div.divs(:id => /^month/).each do |div|
#Do something with the div that has id starting with month
puts div.id
end
end
#=> "month-2013-05-0"
Run Code Online (Sandbox Code Playgroud)
如果需要创建包含所有匹配div的单个集合,则需要使用css或xpath选择器.
使用css-selector(注意在watir-webdriver中,只有elements方法支持css-locators):
divs = browser.elements(:css => 'div.month_cell.OverridenDay div[id^=month]')
divs.each do |e|
puts e.id
end
#=> "month-2013-05-0"
Run Code Online (Sandbox Code Playgroud)
使用xpath:
divs = browser.divs(:xpath => '//div[@class="month_cell OverridenDay"]//div[starts-with(@id, "month")]')
divs.each do |e|
puts e.id
end
#=> "month-2013-05-0"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5590 次 |
| 最近记录: |