Comment utiliser fill_in avec find à Capybara (si possible)


90

J'aimerais faire ce qui suit mais je ne peux pas en raison de la nature de fill_in attend un localisateur comme premier argument.

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10"

J'ai aussi essayé de faire

element = find(:css, "input[id$='donation_pledge_hundreds']")   
fill_in element.<method> , :with => "10"

mais il n'y a aucune méthode qui renvoie des données pour identifier l'élément à fill_in.

Des idées sur la meilleure façon de trouver un champ via une regex à utiliser avec fill_in?

Réponses:


160

Aller de mémoire n'est peut-être pas correct à 100%, mais je pense que si vous avez une référence à l'élément lui-même, vous utiliseriez à la setplace de fill_in:

find(:css, "input[id$='donation_pledge_hundreds']").set("10")

Cependant, pour votre exemple spécifique, vous fill_indevriez pouvoir trouver l'élément tel que vous connaissez son ID:

fill_in 'donation_pledge_hundreds', with: "10"

Bon homme, c'est celui-là. Ce champ particulier est utilisé dans différents contextes (authentifié / non authentifié) et prend donc un identifiant de champ différent. donation_pledge_hundreds est la partie commune du champ id, comparant ainsi la fin du nom du champ $ =
fourmis

8
Soyez prudent en utilisant 'set' plutôt que les autres méthodes intégrées, car il ne déclenche pas d'événements après avoir changé la valeur.
Dan Caddigan

@DanCaddigan et c'est pourquoi il semble que f3ck3d up: / comment faites-vous alors?
Ben

Vous pouvez utiliser find(:css, "...").set("10").send_keys(:return)pour appuyer sur retour après. Il déclenche les événements pertinents. Je ne l'ai pas testé mais vous pouvez aussi find(:css, "...").set("10").trigger(:blur)si c'est votre truc.
gondalez

5

Au lieu d'une méthode, vous pouvez utiliser des crochets pour renvoyer :nameou :id, par exemple, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" la même approche peut être utilisée avec select- select my_type, from: find('select[name$="[type]"]')[:name]


3
find("input[id$='donation_pledge_hundreds']").set "10"

Il est à noter que vous pouvez enchaîner vos découvertes.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"

2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"

Les réponses au code uniquement sont déconseillées. Veuillez ajouter quelques explications sur la façon dont cela résout le problème ou en quoi cela diffère des réponses existantes. De l'avis
Nick

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.