在以下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)>'
答案 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