Capybara에서 확인란을 확인하는 방법은 무엇입니까?


126

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">

6
입력 값은 동일한 ID를 가져서는 안됩니다. 이름은 같지만 다른 ID를 가져야합니다.
SamStephens

답변:


156

나는 다음이 나를 위해 일한 것을 발견했다.

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

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

1
그것을 듣고 기뻐! 아마도 당신은이 대답을 '수락 됨'으로 표시하고 아마 찬성했을 것입니다 ... :)
Jon M

@ Jon MI에는 빈 괄호가있는 이상한 ID가 있으므로 확인 예제의 find(:css, "#cityID[value='62']").set(true)경우 작동하지만 find(:css, "#cityID[][value='62']").set(true)찾을 수 없으며 실패합니다. 빈 대괄호 ID로 동일한 기능을 어떻게 실행합니까?
TangibleDream

1
@TangibleDream은 명확히하기 위해-확인란의 ID가 '[]'이라고 말하고 있습니까?
Jon M

1
CSS 선택기를 사용 하여이 작업을 수행 할 수있는 방법을 찾지 못했습니다! 대괄호를 벗어날 방법이 있어야하지만 찾을 수 없었습니다. 나는 XPath 파인더에 의지해야했다 :find(:xpath, ".//input[@id='Extrapainful[]'][@value='12345']").set(true)
Jon M

3
이 답변을 표시 할 수 있습니까 ... 작동한다는 것을 알고 있지만 카운터는 직관적으로 사용할 수있는 간단한 API의 일부가 아닌 답변을 표시합니다 : check ( 'name, id or text here') (아래 답변 참조)
Code Novitiate

137

이 같은 여러 요소를 생성하는 것이 좋습니다 아니다 ID를 , 그래서 (그리고뿐만 아니라 그것을 위해) 당신은 쉽게 / 선택 해제 체크 할 수 확인란 우아한와

check 'cityID'
uncheck 'cityID'

하나는 동일한 ID로 여러 요소를 방지하고 여전히 체크 박스를 체크 할 필요가없는 경우 특정 값을 , 그는 이렇게 함께 할 수있는

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

카피 바라 입력 조작 에 대한 자세한 내용은 여기를 참조하십시오.


2
유효한 HTML이 아니기 때문에 동일한 ID를 가진 여러 요소를 만들지 않는 것이 좋습니다. 레일을 사용하여 도우미를 올바르게 구성하면 문제가되지 않습니다.
ihaztehcodez

1
확인란 / 선택 취소는 id, name 또는 관련 레이블 요소 값만 허용한다고 추가하고 싶습니다. 여기에서 자세한 내용을 읽을 수 있습니다.
Nesha Zoric

58

capybara 테스트를 실행할 때 page객체 를 얻었습니다 . 이를 통해 모든 확인란을 선택 / 선택 취소 할 수 있습니다. @buruzaemon이 이미 언급했듯이 :

이름, 아이디 또는 레이블 텍스트로 확인란을 찾아서 확인합니다.

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

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

이것을 확인할 수 있습니다 :

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

체크 해제는 사용 page.uncheck방법 과 동일 합니다.


1
확실한 답변, CSS 선택기를 사용하여 허용되는 답변보다 깔끔한 것으로 보입니다 (확인 방법이 표지 아래에서 수행되는 경우에도 해당)
agmin

1
네, 이것이 가장 좋은 대답입니다. 더 깨끗하고 사용자 작업과 매우 유사합니다. 여분의 ID로 양식을 오염시키지 않으며 테스트를 쉽게 읽을 수 있습니다.
B 세븐

나는 이것이 더 깨끗하다는 데 동의합니다. 흥미롭게도, 수용된 답변은이 check방법이 Capybara에서 구현 되는 방법과 크게 다르지 않습니다 . def check(locator, options={}) find(:checkbox, locator, options).set(true) end
bigtunacan 2016 년

고마워, 이것은 문서에 따르면 같은 대답입니다 : rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/… "체크 박스를 찾아서 체크 표시하십시오. 체크 박스는 이름을 통해 찾을 수 있습니다, ID 또는 라벨 텍스트. "
Mike Vallano


10

상자는 텍스트, 예를 들어 '옵션 3'과 연결되어있는 경우, 다음의로 capybara 3.0.3방금 할 수있는

check 'Option 3'

1
이 응답은 8 년 된 구문이 아니라 최상위에 있어야합니다.
sloneorzeszki

실제로 저자가 설명하는 시나리오, @samuel의 대답은 바로 자신이다
VP.

6

나는 이것이 더 오래된 질문이라는 것을 알고 있지만, 나는이 문제를 직접 해결하고 위의 모든 것을 시도해 보았으며, 이것이 마침내 나를 위해 일한 것입니다.

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

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


4

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

check('Option 3', allow_label_click: true)


1

찾기에 문제가 있으면 : css 대신 : xpath를 사용할 수도 있습니다.

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

Chrome (및 다른 브라우저)에서 '요소 검사'를 수행 한 다음 관심있는 요소를 마우스 오른쪽 버튼으로 클릭하면 xpath가 무엇인지 모르는 경우 '복사 xpath'가 있습니다.


1

이 예제에서 모든 확인란을 선택하지 않았는지 확인할 수도 있습니다.

all ( 'input [type = checkbox]'). each do | checkbox | checkbox.should_not be_checked 끝


1

.set (true)가 작동하지 않아서 .click을 호출해야했습니다.

find(...).click


(1) 나는 click그 자체로는 유효한 capybara 명령 (또는 적어도 그것이 문서에없는 것처럼 보입니다)이라고 생각하지 않으며, (2) 그렇다면 확인란을 토글 할 것입니다. 확실하지가 또는 해제했다 만든다
NotAnAmbiTurner

1

라벨 요소 뒤에 숨겨져있는 맞춤 확인란과 관련된 문제가 있습니다. 필요한allow_label_click: true .

이 참조하면 블로그 게시물 ,

check 'checkbox[name]', allow_label_click: true

감사합니다! 이것은 Boostrap 4 사용자 정의 확인란 필드와 완벽하게 작동했습니다. 또한 선택을 해제해야하는 경우 다음을 수행 할 수 있습니다. 'checkbox [name]'을 선택 취소하고 allow_label_click : true
pastullo

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

capybara가 해당 입력에 연결된 이벤트 리스너를 기다릴 것이라고 생각합니다. 대기하지 않으면 때로는 고통 스럽습니다 .... 해당 입력에 ID가 없으면 다른 속성을 선택하십시오. (하나 있어야 함) ...


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.