2013-10-15 3 views
2

오이가 라디오 버튼을 "선택"하고 누군가가 나에게 정신 건강 체크를 해주기를 바라고 있습니다. 엄청난 양의 HTML 정크를 인용하지 않은 채 여기 관련 부분 (print.html에서 수집 한 부분)을 참조하십시오. 버튼으로 활성화되는 모달 div 안에 있습니다. 나는 그 버튼을 "클릭"할 수 있고 (Selenium에서 @javascript 시나리오로 실행하고있다.) 모달 창이 나타난다.오이/카피 바라가 라디오 버튼을 찾을 수 없습니다.

<div class="modal-body pagination-centered"> 
    <img src="/assets/payment.png" alt="Payment" /> 
    <form novalidate="novalidate" method="post" id="edit_cart_1" class="simple_form edit_cart" action="/carts/complete" accept-charset="UTF-8"> 
     <div style="margin:0;padding:0;display:inline"> 
      <input type="hidden" value="✓" name="utf8" /> 
      <input type="hidden" value="put" name="_method" /> 
     </div> 
     <div class="control-group hidden cart_property_id"> 
      <div class="controls"> 
       <input type="hidden" name="cart[property_id]" id="cart_property_id" class="hidden" /> 
      </div> 
     </div> 
     <div id="payment_fat_buttons" class="fat-buttons"> 
      <div class="vertical-button-wrapper"> 
       <input type="radio" value="cash" name="cart[payment_type]" id="cart_payment_type_cash_pay" data-property-id="1" /> 
       <label for="cart_payment_type_cash_pay">Cash</label> 
      </div> 
      <div class="vertical-button-wrapper"> 
       <input type="radio" value="credit" name="cart[payment_type]" id="cart_payment_type_credit_pay" data-property-id="1" /> 
       <label for="cart_payment_type_credit_pay">Credit</label> 
      </div> 
     </div> 
     <div style="display: none;" id="cart_room_number_area_pay"> 
      <div class="control-group string optional cart_room_number"> 
       <label for="cart_room_number_pay" class="string optional control-label">Room number</label> 
       <div class="controls"> 
        <input type="text" value="" size="50" name="cart[room_number]" id="cart_room_number_pay" class="string optional" /> 
       </div> 
      </div> 
     </div> 
     <input type="checkbox" value="1" style="display: none;" name="receipt" id="receipt" /> 
     <div class="sell-modal-footer"> 
      <input type="submit" value="Complete With Receipt" name="commit" id="cart_complete_with_receipt" data_disable_with="Processing..." class="btn btn-danger" /> 
      <input type="submit" value="Complete Sale" name="commit" data_disable_with="Processing..." class="btn btn-danger" /> 
     </div> 
    </form> 
</div> 

내가 생각할 수있는 다양한 방법으로 시도했다. 나는 그것이 모달 대화, 가시성 등을 함께 할 수있는 뭔가가있을 수 있습니다 생각

Unable to find radio button "cart_payment_type_cash_pay" (Capybara::ElementNotFound) 

: 그냥 나에게 오류를 제공

choose 'cart_payment_type_cash_pay' 
choose 'Cash' 

: 바로 레이블 또는 같은 ID에 의해 분명히 대부분의 .하지만 난 그냥 테스트를 위해 ID #payment_fat_buttons을 소개하고,이 같은 그것을 볼 때 :

find('#payment_fat_buttons').choose('Cash') 

는 그 DIV OK,하지만 아직도 라디오 버튼을 찾습니다. 나는 또한 그것을에서 점점 시도 : 전체 페이지의 XPath와 같은 범위 내에서 : 그것은 같은 역할을

within(:xpath, "//div[@id='payment_methods']") do 
    find(:xpath, ".//input[@id='cart_payment_type_cash_pay']").choose 
end 

또한 외부 DIV 있지만 라디오 버튼을 찾을 수 있습니다 - 나는 오류를 얻을 :

XPath는 또는 CSS 표현, 그냥 라디오 버튼 : 내가 어떤 임의의와 라디오 버튼 주변의 요소를 찾을 수 있습니다처럼
Unable to find xpath ".//input[@id='cart_payment_type_cash_pay']" (Capybara::ElementNotFound) 

일반적으로 보인다. 폼에있는 제출 단추를 아무런 문제없이 밀어 넣을 수도 있습니다. 나는 데이터 속성을 테스트로 떨어 뜨리려고했다. 아무런 차이가 없었다. 어떤 도움이라도 대단히 감사하겠습니다. 너무 단순 해 보이기 때문에 이것은 내 견과를 몰고 간다. 나는 시나리오의 큰 부분을 위해 그것을 선택해야한다. 그래서 내가 그것을 이해할 수 없다면, 나는 무언가를 까다 롭고 무서운 것에 의지해야 할 것이다. 사전에 많은 감사 ... Gemfile.lock에서

관련 버전 :

rails (3.2.13) 
cucumber (1.3.8) 
gherkin (2.12.2) 
cucumber-rails (1.4.0) 
capybara (2.1.0) 
selenium-webdriver (2.35.1) 
+1

이것은 내가 capybara로 붙어있을 때하는 일입니다. 실패한 기대 바로 전에'binding.pry'를 추가하십시오. 세션에서'current_url'을 실행하고, url에서 브라우저를 열고, 브라우저 콘솔에서 무슨 일이 일어나는지 조사하십시오. – phoet

+0

그것은 꽤 산뜻합니다. 그것은 내게 print.html에서 얻는 것과 똑같은 것을주는 것 같다. 그래서 여전히 난처한 상황. 하지만 그걸 속임수 가방에 넣을거야. 감사. – Steve

+0

FF와 Selenium의 FF 문제가 20 대 초반에 있었기 때문에 Firefox 18을 돌리고있었습니다. FF 25로 업데이트되었지만 이제는 정상적으로 작동합니다. 그러나 특정 요소를 찾는 데는 변화가 없습니다. – Steve

답변

7

나는 마지막으로이 하나를 알아 낸 . Capybara는 라디오 버튼을 찾지 못했습니다. 왜냐하면 내 스타일의 깊숙한 곳에 묻혀있는 것은 모양을 바꾸기 위해 숨긴 CSS이기 때문입니다. 나는 그것을에서 얻을 수 몰랐어요

find(:xpath, "//label[@for='the_radio_button_id']").click 

: 나는 것을 알게되면, 난 그냥 대신 라벨에 클릭을 수행하여 라디오 버튼을 찾는 모든 문제를 측면 단계 수 있다는 것을 알아 냈 그런 식으로 라디오 버튼을 클릭합니다. 그러나 어떤 경우에도 카피 바라가 스타일링이나 기타 문제로 인해 찾을 수없는 라디오 버튼을 클릭하는 방법에 대한 문제를 해결합니다. 희망은 다른 사람을 돕습니다.

+0

까다로운! 나는 같은 일에 붙 잡혔다.카피 바라가 감춰진 요소를 발견 할 수 없다는 것을 탐지 할 수 있었다면 사랑 스러울 것입니다. – LisaD

+0

정말 고마워요. 절 큰 시간을 구해 줬어요. –

관련 문제