Как заполнить скрытое поле капибарой?
Я уже обнаружил, что когда я хочу установить значение в текстовое поле, текстовую область или поле пароля, я могу использовать 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'>
spec:
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
3 ответов:
вам нужно найти скрытое поле и установить его значение. Есть несколько способов, это, наверное, самый простой
find(:xpath, "//input[@id='my_hidden_field_id']").set "my value"Если вы выполняете сценарий client_side в производстве, вы можете просто сказать capybara, чтобы запустить его с javascript-совместимым драйвером
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'");
Comments