2016-06-22 9 views
0

Ich habe eine Liste von Kontrollkästchen, die durch ihre IDs mit dem Seitenobjekt-Juwel definiert sind. Eine Probe folgt:Wie man über eine Reihe von Checkboxen mit dem Seitenobjekt iteriert?

checkbox  :main_product,      id:    '19437578_58659806' 
checkbox  :thumb_one,       id:    '19437579_58659811' 
checkbox  :thumb_two,       id:    '19437580_58659812' 
checkbox  :thumb_three,      id:    '19437581_58659813' 
checkbox  :thumb_four,      id:    '19437582_58659814' 
checkbox  :thumb_five,      id:    '19437583_58659815' 
checkbox  :thumb_six,       id:    '19437584_58659816' 
checkbox  :thumb_seven,      id:    '19437585_58659817' 
checkbox  :thumb_eight,      id:    '19437586_58659818' 
checkbox  :thumb_nine,      id:    '19437587_58659819' 
checkbox  :thumb_ten,       id:    '19437588_58659820' 
checkbox  :tt_one,       id:    '19437594_58659842' 
checkbox  :tt_two,       id:    '19437595_58659843' 
checkbox  :tt_three,       id:    '19437596_58659844' 
checkbox  :tt_four,       id:    '19437597_58659845' 
checkbox  :tt_five,       id:    '19437598_58659846' 
checkbox  :tt_six,       id:    '19437599_58659847' 
checkbox  :tt_seven,       id:    '19437600_58659848' 
checkbox  :tt_eight,       id:    '19437601_58659849' 
checkbox  :tt_nine,       id:    '19437602_58659850' 
checkbox  :tt_ten,       id:    '19437603_58659851' 

Die Art, wie ich es sehe; Es muss eine effizientere Möglichkeit geben, alle Checkbox-Elemente innerhalb eines bestimmten divs zu sammeln.

Ich bin Suche nach einem Weg zu tun, im Wesentlichen

checkbox_objects.each do |checkbox| 
    checkbox.check 
end 

Aber ich bin nicht sicher, wie checkbox_objects zu definieren. Kennt jemand einen Weg, alle Checkboxen in einem bestimmten Element zu sammeln und in ein Array zu setzen? Danke im Voraus.

Antwort

2

Die checkboxes Accessor-Methode (im Gegensatz zu checkbox) wird verwendet, um eine Array Checkboxen zu erstellen.

die Seite HTML Unter der Annahme ist so strukturiert, wie:

<div id="other"> 
    <input type="checkbox"> 
    <input type="checkbox"> 
</div> 
<div id="container"> 
    <input type="checkbox"> 
    <input type="checkbox"> 
</div> 

Sie einen Block angeben könnte, die alle Kontrollkästchen in sagen die div mit der ID "Container" ortet:

checkboxes(:thumb) { div_element(id: 'container').checkbox_elements } 

Alternativ können Sie feststellen, ein CSS-Selektor oder XPath prägnanter:

checkboxes(:thumb, css: 'div#container input[type="checkbox"]') 

Entweder mit ay, das Seitenobjekt erhält eine <name>_elements Methode, die die passenden Kästchen zurückgibt:

page.thumb_elements.each do |checkbox| 
    checkbox.check 
end 

Oder als one-liner:

page.thumb_elements.each(&:check)