programing

Capybara에서 확인란을 어떻게 확인합니까?

i4 2023. 7. 15. 09:41
반응형

Capybara에서 확인란을 어떻게 확인합니까?

저는 Rspec과 Capybara를 사용하고 있습니다.

다음을 확인하기 위한 단계를 작성하려면 어떻게 해야 합니까?checkbox해봤습니다check값으로는 하지만 내 것을 찾을 수 없습니다.checkbox사실 다른 값을 가진 동일한 ID를 가지고 있기 때문에 어떻게 해야 할지 모르겠습니다.

코드는 다음과 같습니다.

 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">

다음과 같은 이점이 있었습니다.

# Check
find(:css, "#cityID[value='62']").set(true)

# Uncheck
find(:css, "#cityID[value='62']").set(false)

동일한 ID의 요소를 여러 개 만들지 않는 것이 좋습니다. 따라서 우아하게 확인란을 쉽게 선택/선택 취소할 수 있습니다.

check 'cityID'
uncheck 'cityID'

동일한 ID를 가진 여러 요소를 피할 수 없지만 특정 값을 가진 확인란을 선택해야 하는 경우 다음을 사용하여 확인할 수 있습니다.

find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)

Capybara 입력 조작에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

Capybara 테스트를 실행할 때, 당신은 다음을 얻었습니다.page물건.확인란을 선택하거나 선택 취소하는 데 사용할 수 있습니다.@buruzaemon이 이미 언급했듯이:

이름, ID 또는 레이블 텍스트별로 확인란을 찾아 선택합니다.

HTML에 다음과 같은 확인란이 있다고 가정합니다.

<label>  
  <input type="checkbox" value="myvalue" name="myname" id="myid">
  MyLabel
</label>

다음을 통해 확인할 수 있습니다.

page.check('myid')
page.check('MyLabel')
page.check('myname')

선택 취소는 동일한 용도입니다.page.uncheck방법.

우선 요소에 독특한 점을 부여해야 할 것 같습니다.

그러나 Capybara 및 확인란과 관련하여 Capybara:노드::Actions#check instance 메서드를 사용하면 이름, ID 또는 레이블 텍스트별로 확인란을 찾아 확인할 수 있습니다.

상자가 텍스트(예: '옵션 3')와 연결된 경우 다음과 같이 표시됩니다.capybara 3.0.3당신은 그냥 할 수 있습니다

check 'Option 3'

레이블 요소 뒤에 숨겨진 사용자 지정 확인란에 문제가 있습니다.필요한allow_label_click: true.

블로그 게시물과 관련하여,

check 'checkbox[name]', allow_label_click: true

라벨에 "약관에 동의합니다"와 같은 링크가 있는 경우, 위의 코드는 페이지를 열 것이며, 이는 사용자가 원하는 것이 아닙니다.

대신 이렇게 하세요.

find(:css, "#checkbox_id", visible: false).execute_script('this.checked = true')

이것이 오래된 질문이라는 것을 알지만, 저는 이 문제를 직접 해결해 왔고, 위의 모든 것을 시도해 본 결과, 이것이 마침내 저에게 효과가 있었습니다.

find("input[type='checkbox'][value='#{cityID.id}']").set(true)

이것이 누군가에게 도움이 되기를 바랍니다.Capybara 2.4.4를 사용하고 있습니다.

오래된 주제이지만 또 다른 해결책은 다음과 같습니다.

check('Option 3', allow_label_click: true)

또한 찾을 때 문제가 있을 경우 :sys 대신 :xpath를 사용할 수도 있습니다.

find(:xpath, '//*[@id="filename"])"set(true)

Chrome(그리고 확실히 다른 브라우저)에서 "요소를 검사"할 수 있으며, 관심 있는 요소를 마우스 오른쪽 버튼으로 클릭하면 xpath가 무엇인지 모를 경우 '복사 xpath'가 있습니다.

또한 이 예에서는 모든 확인란이 선택되어 있지 않은지 확인할 수 있습니다.

all('input[type=messages] 및 각 do |messages| 확인란 .should_not_checked end

.set(true)가 작동하지 않아서 .click:

find(...).click

저는 이것이 더 우아해 보인다고 믿습니다.

find_by_id("cityID").set(true)

레일 7에서 테스트됨.잘 작동합니다.

확인란 선택 방법

  check 'name_of_checkbox'
check find(".whenever input")[:id]

저는 이것이 Capybara가 그 입력에 연결된 이벤트 청취자를 기다리게 할 것이라고 생각합니다. 때때로 기다리지 않으면 골치 아픈 일입니다.입력에 ID가 없는 경우 다른 속성을 선택합니다(ID가 있어야 함)...

언급URL : https://stackoverflow.com/questions/8297624/how-to-check-a-checkbox-in-capybara

반응형