2014-10-20 49 views
1

標籤文本我要HTML如何獲得使用的Watir

<div class="checklistbox HOTELS" name="HOTELS">      
    <label><input type="checkbox" value="1" filters="" />Cat</label> 
    <label><input type="checkbox" value="2" filters="" />Dog</label> 
    <label><input type="checkbox" value="3" filters="" />Pony</label> 
    <label><input type="checkbox" value="4" filters="" />black cat</label> 
</div> 

我怎樣才能從標籤文本,如果標籤上包含未選中的複選框?

browser.checkboxes(:xpath => '//*[@id="HOTELSCONTAINER"]/td[4]/div[2]/label/input').each do |l| 
    if l.set? == false 
     -- Get a label text -- 
    end 
end 

有答案:

@i = 0 
loop do 
    @i = @i + 1 
    if (browser.checkbox(:xpath => '//*[@id="HOTELSCONTAINER"]/td[4]/div[2]/label[' + @i.to_s + ']/input').exists?) 
     if browser.checkbox(:xpath => '//*[@id="HOTELSCONTAINER"]/td[4]/div[2]/label[' + @i.to_s + ']/input').set? == false 
       puts browser.element(:xpath => '//*[@id="HOTELSCONTAINER"]/td[4]/div[2]/label[' + @i.to_s + ']').text   
     end 
    else 
     break 
    end 
end 

回答

0

您可以:

  1. 發現,未被選中
  2. 導航到他們的父母的複選框,這將是標籤
  3. 檢查標籤元素的文本。

一種方法是使用一系列廢品/地圖:

labels = browser.div(class: 'HOTELS').checkboxes.reject(&:set?).map(&:parent).map(&:text) 
p labels 
#=> ["Cat", "Dog", "Pony", "black cat"] 

它可能是更易讀的地圖結合起來:

labels = browser.div(class: 'HOTELS').checkboxes.reject(&:set?).map { |box| box.parent.text } 
p labels 
#=> ["Cat", "Dog", "Pony", "black cat"] 
+0

如果你會看到的一端我的問題,你可以看到它的答案,但無論如何感謝!:) – 2014-10-20 13:46:50

+0

是的,我看到了。將答案作爲答案而不是問題中的一個部分添加將會更好。我添加了這個額外的答案,因爲它看起來更像Ruby和Watir-like(即不需要時避免xpath和手動循環)。 – 2014-10-20 14:13:51

+0

我完全同意你的看法,非常感謝你,你的變種要好得多。 – 2014-10-20 14:28:35