2013-06-25 2 views
5

में divs के संग्रह के माध्यम से लूपिंग हम परीक्षण के लिए वॉटर का उपयोग कर रहे हैं और सोच रहे हैं कि किसी विशेष मानदंड को पूरा करने वाले divs के समूह का चयन कैसे करें? हमारे मामले में (सरलीकृत) एचटीएमएल इस तरह दिखता है:वाटिर

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

हम एक आईडी 'माह' कि month_cell माता पिता divs भी OverridenDay की कक्षाओं है में निहित हैं के साथ शुरू करने के साथ सभी divs के माध्यम से लूप करना चाहते हैं। क्या कोई एक्सपैथ या नियमित अभिव्यक्ति है जिसे हम वॉटर ब्राउज़र क्लास के साथ संयोजन में उपयोग कर सकते हैं?

उत्तर

10

जनरल

आप एक ही तत्व हो रही करने के लिए एक समान तरीके से तत्वों का एक संग्रह प्राप्त कर सकते हैं। आपको मूल रूप से तत्व प्रकार विधि को बहुवचन करने की आवश्यकता है। उदाहरण के लिए:

#Singular method returns first matching div 
browser.div 

#Pluralized method returns all matching divs 
browser.divs 

संग्रह एक ही तत्व के रूप में एक ही तत्व के रूप में उपयोग किया जा सकता है।

समाधान

आपकी समस्या के लिए, आप कर सकते हैं:

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

आप एक ही संग्रह है कि मिलान divs के सभी शामिल हैं बनाने की जरूरत है, तो आप एक सीएसएस का उपयोग करने की आवश्यकता होगी या xpath चयनकर्ता।

एक सीएसएस-चयनकर्ता (ध्यान दें कि watir-webdriver में, केवल तत्व विधि सीएसएस-लोकेटर का समर्थन करता है) का उपयोग करना:

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

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" 
तो इस बात के लिए बहुत
+0

धन्यवाद, बहुत उपयोगी। – larryq