Programing

숨겨진 필드를 카피 바라로 채우는 방법?

lottogame 2020. 12. 29. 06:39
반응형

숨겨진 필드를 카피 바라로 채우는 방법?


텍스트 필드, 텍스트 영역 또는 암호 필드에 값을 설정하고 싶을 때에서와 같이 ID, 이름 또는 레이블을 사용할 수 있다는 것을 이미 발견 something했습니다 fill_in something, :with => some_value. 그러나 이러한 접근 방식은 값을 <input type="hidden">필드 로 설정하려고 할 때 실패 합니다 (그리고 별도로 테스트하는 일반적으로 채워지는 클라이언트 측 스크립트이기 때문에 수행하고 싶습니다). 카피 바라로 어떻게 이런 숨겨진 필드를 설정할 수 있습니까? 가능합니까?

HTML :

<input id='offer_latitude' name='offer[latitude]' type='hidden'>
<input id='offer_longitude' name='offer[longitude]' type='hidden'>

투기:

describe "posting new offer" do
  it "should add new offer" do
    visit '/offer/new'
    fill_in 'offer[latitude]', :with => '11.11'
    fill_in 'offer[longitude]', :with => '12.12'
    click_on 'add'
  end
end

제공합니다 :

1) posting new offer should add new offer
   Failure/Error: fill_in 'offer[latitude]', :with => '11.11'
   Capybara::ElementNotFound:
     cannot fill in, no text field, text area or password field with id, name, or label 'offer[latitude]' found

숨겨진 필드를 찾아 값을 설정해야합니다. 몇 가지 방법이 있습니다. 이것이 아마도 가장 간단한 방법 일 것입니다.

find(:xpath, "//input[@id='my_hidden_field_id']").set "my value"

프로덕션에서 client_side 스크립트를 실행하는 경우 capybara에게 자바 스크립트 호환 드라이버로 실행하도록 지시 할 수 있습니다.

page.execute_script("$('hidden_field_id').my_function()")

동일한 결과를 얻는 방법에는 여러 가지가 있습니다. 내가 가장 좋아하는 것은 :

first('input#id.class', visible: false).set("your value")

드라이버로 poltergeist / phantomjs를 사용하고 jquery가 작동하지 않는 경우 항상 좋은 구식 js가 있습니다.

page.execute_script("document.getElementById('#some-id').value = 'some-value'");

참조 URL : https://stackoverflow.com/questions/10804897/how-to-fill-hidden-field-with-capybara

반응형