Capybara에서 찾기와 함께 fill_in을 사용하는 방법 (가능한 경우)


90

다음을 수행하고 싶지만 fill_in의 특성으로 인해 로케이터를 첫 번째 인수로 기대할 수 없습니다.

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10"

나는 또한 시도했다

element = find(:css, "input[id$='donation_pledge_hundreds']")   
fill_in element.<method> , :with => "10"

그러나 fill_in 할 요소를 식별하기 위해 데이터를 반환하는 메서드는 없습니다.

fill_in과 함께 사용하기 위해 정규식을 통해 필드를 찾는 가장 좋은 방법에 대한 아이디어가 있습니까?

답변:


160

메모리에서 이동하면 100 % 정확하지 않을 수 있지만 요소 자체에 대한 참조가 있으면 다음 set대신 사용할 것입니다 fill_in.

find(:css, "input[id$='donation_pledge_hundreds']").set("10")

그러나 특정 예의 경우 fill_inID를 알고있는 요소를 찾을 수 있어야합니다.

fill_in 'donation_pledge_hundreds', with: "10"

착한 사람, 바로 그 거예요. 해당 특정 필드는 다른 컨텍스트 (인증 됨 / 인증되지 않음)에서 사용되므로 다른 필드 ID를 사용합니다. donation_pledge_hundreds는 필드 ID의 공통 부분이므로 필드 이름의 끝을 비교합니다. $ =
— ants

8
값을 변경 한 후 이벤트를 트리거하지 않으므로 다른 내장 메서드보다 'set'을 사용하는 데주의하십시오.
— Dan Caddigan 2014

@ DanCaddigan 그리고 그것이 f3ck3d 위로 보이는 이유입니다 : / 그럼 어떻게합니까?
— Ben

find(:css, "...").set("10").send_keys(:return)나중에 Return을 누르는 데 사용할 수 있습니다 . 관련 이벤트를 트리거합니다. 나는 그것을 테스트하지 않았지만 그것이 find(:css, "...").set("10").trigger(:blur)당신의 일이라면 당신도 할 수 있습니다 .
— gondalez

5

대신 방법, 당신은 반환 브래킷을 사용할 수 있습니다 :name또는 :id예를 들어, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" 동일한 접근 방식을 사용할 수 있습니다 select- select my_type, from: find('select[name$="[type]"]')[:name]


3
find("input[id$='donation_pledge_hundreds']").set "10"

발견 한 내용을 연결할 수 있다는 점은 주목할 가치가 있습니다.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"

2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"

코드 전용 답변은 권장되지 않습니다. 이것이 문제를 어떻게 해결하는지 또는 이것이 기존 답변과 어떻게 다른지에 대한 설명을 추가하십시오. 관련 리뷰
— Nick

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