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.