61 votes

Comment remplir les champs cachés avec Capybara?

J'ai déjà constaté que lorsque je veux mettre en valeur à un champ de texte, zone de texte ou champ de mot de passe, je peux utiliser l'id, le nom ou l'étiquette en tant que something en fill_in something, :with => some_value. Cependant, une telle approche ne tient pas lorsque je tente de régler la valeur de <input type="hidden"> champ (et je veux le faire parce que ceux-ci sont normalement remplis de scripts côté client qui j'ai tester séparément). Comment pourrais-je définir un champ caché avec Capybara? Est-il possible?

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

donne:

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

83voto

DVG Points 7293

Vous devez localiser le champ masqué et définir sa valeur. Il y a plusieurs façons, c'est probablement la plus simple

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

Si vous exécutez un script client_side en production, vous pouvez simplement dire à capybara de l'exécuter avec un pilote compatible javascript.

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

4voto

penner Points 576

Si vous utilisez poltergeist / phantomjs en tant que pilote et que jQuery ne fonctionne pas pour vous, il y a toujours de bons vieux js:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X