Подтвердить что ты не робот

Как заполнить скрытое поле Capybara?

Я уже обнаружил, что когда я хочу установить значение в текстовое поле, поле текстовой области или пароля, я могу использовать id, name или label как something в fill_in something, :with => some_value. Однако такой подход терпит неудачу, когда я пытаюсь установить значение в поле <input type="hidden"> (и я хочу это сделать, потому что это обычно заполненные клиентские скрипты, которые я тестирую отдельно). Как я мог установить такое скрытое поле с Capybara? Возможно ли это?

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
4b9b3361

Ответ 1

Вам нужно найти скрытое поле и установить его значение. Есть несколько способов, это, наверное, самый простой

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

Если вы выполняете client_side script в процессе производства, вы можете просто сказать capybara, чтобы запустить его с помощью javascript-совместимого драйвера

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

Ответ 2

Существует много способов добиться того же результата. Тот, который мне больше всего нравится:

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

Ответ 3

Если вы используете poltergeist/phantomjs в качестве драйвера, а jquery не работает для ya, всегда есть хороший старомодный js:

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