2014-10-20 63 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