web-dev-qa-db-fra.com

Comment remplir un champ caché avec Capybara?

J'ai déjà constaté que lorsque je veux définir une valeur pour un champ de texte, une zone de texte ou un champ de mot de passe, je peux utiliser id, nom ou étiquette comme something dans fill_in something, :with => some_value. Cependant, une telle approche échoue lorsque j'essaie de définir la valeur sur <input type="hidden"> champ (et je veux le faire parce que ce sont normalement des scripts côté client que je teste séparément). Comment pourrais-je définir un champ aussi caché avec Capybara? C'est 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
56
skalee

Vous devez localiser le champ caché 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 côté client en production, vous pouvez simplement dire à capybara de l'exécuter avec un pilote compatible javascript

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

Il existe de nombreuses façons d'obtenir le même résultat. Celui que j'aime le plus est:

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

Si vous utilisez poltergeist/phantomjs comme pilote et que jquery ne fonctionne pas pour vous, il y a toujours de bons js à l'ancienne:

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