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.