Watir Checkbox循环

时间:2014-07-21 10:56:56

标签: ruby arrays checkbox rspec watir

在以下page我想测试并检查所有复选框。 但是在第一次复选框测试后我总是收到错误。

我的代码:

checkLArr = Array["L1", "L2", "L3", "L4", "L5", "L6", "L7"]
x = 0
for i in 0 .. 7 do
    checkbox = @browser.div(:class => 'check-handler')
    if checkbox.should exist and checkbox.input(:id => "#{checkLArr[x]}").should exist
       puts "GEIL jetzt wird geklickt"
       puts checkLArr[x]
       checkbox.click
       x += 1
    else
       puts "Geht nicht"
    end
 end

错误讯息:

expected #<Watir::Input:0x..faa4dba70 located=false selector={:id=>"L2", :tag_name=>"input"}> to exist
./lektorat_anfrage.rb:44:in `block (4 levels) in <top (required)>'
./lektorat_anfrage.rb:41:in `each'
./lektorat_anfrage.rb:41:in `block (3 levels) in <top (required)>'

1 个答案:

答案 0 :(得分:0)

<强>问题

主要问题在于:

checkbox = @browser.div(:class => 'check-handler')
checkbox.input(:id => "#{checkLArr[x]}").should exist

checkbox是页面上第一个带有&#39; check-handler&#39;的div。在实际页面上,每个复选框都在其自己的“检查处理程序”中。 DIV。 &#39; L2&#39;,&#39; L3&#39;等复选框不在第一个div中,因此抛出异常。

换句话说,代码正在寻找如下结构:

<div class="check-handler">
  <input type="checkbox" id="L1" />
  <input type="checkbox" id="L2" />
</div>

当HTML实际上是这样的时候:

<div class="check-handler">
  <input type="checkbox" id="L1" />
</div>
<div class="check-handler">
  <input type="checkbox" id="L2" />
</div>

<强>解决方案

从代码中,您似乎想要检查包含特定复选框的div元素。鉴于该复选框具有唯一ID,将更容易找到该复选框,然后将DOM向上导航到父div:

browser.checkbox(:id => "#{checkLArr[x]}").parent.click

我建议不要使用for循环,因为它会增加错误的机会(例如checkLArr的元素太少)。同样,在if语句中使用断言似乎很奇怪。我建议:

checkLArr = Array["L1", "L2", "L3", "L4", "L5", "L6", "L7"]
checkLArr.each do |id|
  input = browser.checkbox(:id => id)
  if input.exists?
    puts "GEIL jetzt wird geklickt"
    puts id
    input.parent.click
  else
    puts "Geht nicht"
  end
end