카피 바라 테스트를위한 드롭 다운의 선택 값 가져 오기
웹 사이트에 대한 테스트를 작성해야합니다. 드롭 다운 상자에서 선택한 값을 얻으려고합니다. 지금까지 나는 다음을 수행하여 드롭 다운의 내용을 얻을 수 있습니다.
find_field('restrictions__rating_movies').text
반환-영화 허용 안 함 G PG M R13 R15 R16 R18 R RP16 모든 영화 허용
선택한 개체의 값을 얻을 수 있습니다.
find_field('restrictions__rating_movies').value
반환-1000
드롭 다운 상자에서 선택한 항목의 텍스트를 얻으려고하기 때문에 이것은별로 도움이되지 않습니다.
<select class="" id="restrictions__rating_movies" name="restrictions[][rating_movies]">
<option value="0">Don't Allow Movies</option>
<option value="100">G</option>
<option value="200">PG</option>
<option value="300">M</option>
<option value="325">R13</option>
<option value="350">R15</option>
<option value="375">R16</option>
<option value="400">R18</option>
<option value="500">R</option>
<option value="600">RP16</option>
<option value="1000" selected="selected">Allow All Movies</option></select>
이 경우 '모든 영화 허용'값을 가져와야합니다. 위의 두 가지 예를 여러 가지 조합으로 시도했습니다.
have_select
Rspec과 함께 Capybara를 사용 하는 경우 matcher가 있습니다.
expect(page).to have_select('my-select', selected: 'Option 2')
find_field('restrictions__rating_movies').find('option[selected]').text
선택한 옵션의 가치를 얻는 아주 간단한 방법은 다음과 같습니다.
find("#restrictions__rating_movies").value
선택한 선택 옵션 값을 반환합니다.
주어진 옵션으로 필드를 선택한 경우에만 어설 션해야하는 경우 간단한 대답은 다음과 같습니다.
#Find a select box by (label) name or id and assert the given text is selected
When /^select box "([^"]*)" is selected with "([^"]*)"$/ do |dropdown, selected_text|
assert page.has_select?(dropdown, selected: selected_text)
end
그러나 질문의 제목은 "드롭 다운에 대한 선택 값 가져 오기" 입니다. 그리고 선택을 주장 할뿐만 아니라 선택한 필드의 텍스트와 값도 검색하려는 유사한 문제가 발생했습니다. API에 대한 직접적인 방법을 찾지 못했습니다. 내가 찾은 가장 쉬운 방법은 다음과 같습니다.#all("option").find &:selected?
When /^ select box "([^"]*)" is selected with "([^"]*)"$/ do |dropdown, selected_text|
sb = find_field(dropdown)
sb_selected = sb.all("option").find &:selected?
msg = "Selected: #{sb_selected.text.inspect} - value:#{sb_selected.value.inspect}"
assert page.has_select?(dropdown, selected: selected_text), msg
end
이것은 어설 션이 실패 할 때보다 포괄적 인 오류 메시지를 제공합니다.
여러 선택 항목이있는 경우에서와 같이 #find 대신 #select를 사용할 수 있습니다 #all("option").select &:selected?
. 배열을 반환합니다.
이 답변은 이전 답변과 마찬가지로 'option [selected]'트릭에 의존하지 않으므로 Javascript로 선택하더라도 작동합니다 (이전 답변이 전혀 작동하지 않는 이유였습니다).
테스트 대상 :
capybara (2.2.1)
capybara-webkit (1.1.0)
cucumber (1.3.14)
cucumber-rails (1.4.0)
현재 선택된 텍스트를 찾고자한다면 예상과 비교할 수 있도록 어떤 것인지 가정하지 않고 JS로 선택하더라도 다음과 같이 작동합니다 ( 'option [selected]'가 없음 ).
먼저 선택 값을 찾은 다음 해당 값을 가진 옵션의 텍스트를 찾습니다.
def selected(selector)
value = find(selector).value
text = find(selector).find("option[value='#{value}']").text
end
이 작품이 좋을까요?
within("//select[@id='restrictions__rating_movies']") do
find_field("//option[@selected='selected']").text
end
참고 URL : https://stackoverflow.com/questions/11498575/get-select-value-of-dropdown-for-capybara-testing
'Program Tip' 카테고리의 다른 글
속성 별 Android 정렬 배열 목록 (0) | 2020.12.13 |
---|---|
Rails : Font Awesome 사용 (0) | 2020.12.13 |
svn 로컬 사본에서 수정 된 파일 목록 (0) | 2020.12.13 |
Python으로 월요일 날짜 찾기 (0) | 2020.12.13 |
슬라이스를 가변 입력으로 어떻게 전달할 수 있습니까? (0) | 2020.12.12 |