Program Tip

카피 바라 테스트를위한 드롭 다운의 선택 값 가져 오기

programtip 2020. 12. 13. 10:26
반응형

카피 바라 테스트를위한 드롭 다운의 선택 값 가져 오기


웹 사이트에 대한 테스트를 작성해야합니다. 드롭 다운 상자에서 선택한 값을 얻으려고합니다. 지금까지 나는 다음을 수행하여 드롭 다운의 내용을 얻을 수 있습니다.

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_selectRspec과 함께 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

출처 : http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_select%3F-instance_method

그러나 질문의 ​​제목은 "드롭 다운에 대한 선택 값 가져 오기" 입니다. 그리고 선택을 주장 할뿐만 아니라 선택한 필드의 텍스트와 값도 검색하려는 유사한 문제가 발생했습니다. 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

반응형