2013-06-25 9 views
5

私たちはテストにwatirを使用しており、特定の条件を満たすdivのグループを選択する方法は不思議ですか?我々の場合には(簡体字)のHTMLは次のようになります。Watirでdivのコレクションをループする

<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> 

我々はまた、OverridenDayのクラスを持っているmonth_cell親のdivに含まれている「月」で始まるIDを持つすべてのdiv要素をループしたいと思います。これを行うには、Watirブラウザクラスと組み合わせて使用​​できるXpathまたは正規表現がありますか?

答えて

10

一般

あなたは、単一の要素を得るために同様の方法で要素のコレクションを取得することができます。基本的に要素型メソッドを複数形にする必要があります。たとえば、

#Singular method returns first matching div 
browser.div 

#Pluralized method returns all matching divs 
browser.divs 

単一の要素と同じロケータを使用してコレクションを使用できます。

発生した問題の解決策

を、あなたが行うことができます:あなたは、一致するdiv要素のすべてを含む単一のコレクションを作成する必要がある場合

#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" 

、あなたはCSSを使用する必要がありますかxpathセレクタ。 XPathを使用

divs = browser.elements(:css => 'div.month_cell.OverridenDay div[id^=month]') 
divs.each do |e| 
    puts e.id 
end 
#=> "month-2013-05-0" 

:このため

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" 
+0

ありがとうを、非常にCSSセレクタを(ワチール-webdriverをで、要素のみの方法は、CSS-ロケータをサポートしていることに注意)を使用

役に立った – larryq

関連する問題