2014-07-21 5 views
-1

다음에 page 모든 체크 박스를 테스트하고 확인하고 싶습니다. 하지만 첫 번째 확인란을 선택한 후에는 항상 오류가 발생합니다.Watir 체크 박스 루프

내 코드 :

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

문제

가장 큰 문제는 라인이다 :

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

checkbox은 'check-handler'클래스가있는 페이지의 첫 번째 div입니다. 실제 페이지에서 각 확인란은 자체 'check-handler'div에 있습니다. 'L2', 'L3'등의 체크 박스는 첫 번째 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 요소를 확인하려는 것 같습니다. 그것은 실수의 가능성이 높아으로

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

내가 루프를 사용하지 않는 제안 : 체크 박스는 고유 한 ID를 가지고 있음을 감안할 때, 체크 박스를 발견하고 부모 DIV에 DOM을 탐색하기 쉬울 것입니다 (예 : 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