2013-06-25 30 views
5

Chúng tôi đang sử dụng watir để thử nghiệm và tự hỏi làm thế nào để chọn một nhóm các divs đáp ứng một tiêu chí cụ thể? Trong trường hợp của chúng tôi (giản thể) html trông như thế này:looping thông qua một bộ sưu tập của divs trong Watir

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

Chúng tôi muốn lặp qua tất cả các div với id bắt đầu bằng 'tháng' được chứa trong month_cell div cha mẹ mà cũng có các lớp học của OverridenDay. Có một biểu thức Xpath hay cụm từ thông dụng mà chúng ta có thể sử dụng cùng với lớp trình duyệt Watir để làm điều này không?

Trả lời

10

chung

Bạn có thể nhận được một tập hợp các yếu tố trong một cách tương tự để nhận được một yếu tố duy nhất. Về cơ bản, bạn cần phải đa dạng hóa phương thức kiểu phần tử. Ví dụ:

#Singular method returns first matching div 
browser.div 

#Pluralized method returns all matching divs 
browser.divs 

Bộ sưu tập có thể được sử dụng với cùng một định vị làm thành phần đơn lẻ.

Giải pháp

Đối với vấn đề của bạn, bạn có thể làm:

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

Nếu bạn cần để tạo ra một bộ sưu tập duy nhất mà bao gồm tất cả các divs phù hợp, bạn sẽ cần phải sử dụng một css hoặc bộ chọn xpath.

Sử dụng một css-selector (lưu ý rằng trong watir-webdriver, chỉ có các yếu tố phương pháp hỗ trợ 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" 

dùng 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

Cảm ơn rất nhiều cho việc này, rất Hữu ích. – larryq

Các vấn đề liên quan