rspec - rails - ¿Cómo llenar el campo oculto con Capibara?
rspec rails (3)
Hay muchas formas de lograr el mismo resultado. El que más me gusta es:
first(''input#id.class'', visible: false).set("your value")
Ya he encontrado que cuando quiero establecer el valor en el campo de texto, área de texto o campo de contraseña, puedo usar id, name o label como something
en fill_in something, :with => some_value
. Sin embargo, dicho enfoque falla cuando trato de establecer el valor en el campo <input type="hidden">
(y quiero hacerlo porque normalmente son scripts rellenos del lado del cliente que pruebo por separado). ¿Cómo podría establecer un campo oculto con Capibara? ¿Es posible?
HTML:
<input id=''offer_latitude'' name=''offer[latitude]'' type=''hidden''>
<input id=''offer_longitude'' name=''offer[longitude]'' type=''hidden''>
especulación:
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
da:
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
Necesita ubicar el campo oculto y establecer su valor. Hay un par de formas, esta es probablemente la más simple
find(:xpath, "//input[@id=''my_hidden_field_id'']").set "my value"
Si está ejecutando un script client_side en producción, podría decirle a capybara que lo ejecute con un controlador compatible con JavaScript
page.execute_script("$(''hidden_field_id'').my_function()")
Si está utilizando poltergeist / phantomjs como controlador y jquery no funciona para usted, siempre hay buenos js anticuados:
page.execute_script("document.getElementById(''#some-id'').value = ''some-value''");