Capybara: Comment remplir un champ de saisie par son identifiant

87

J'ai ceci:

<input class="string optional" 
    id="course_group_courses_attributes_2_name" 
    name="course_group[courses_attributes][2][name]" 
    placeholder="Lengua" 
    size="15" 
    type="text" />
</div> 

Comment remplir ce champ par son identifiant?

Nerian
la source

Réponses:

125

fill_in accepte l'id comme premier paramètre:

fill_in 'course_group_courses_attributes_2_name', :with => 'some text'
raidfive
la source
9
Je pensais que oui, mais cela ne fonctionne pas. Il semble qu'il ne le remplit pas. Cela ne donne aucune erreur sur le fait de ne pas le trouver. Cela ne le remplit tout simplement pas.
Nerian
Vous pouvez peut-être inclure le code capybara en question et tout autre code associé.
raidfive du
J'ai découvert que le problème était en Mongoïde. Relâchez les bogues des candidats.
Nerian
@Nerian ah! heureux que vous l'ayez compris
raidfive
avons-nous la solution?
Zakos
32

Vous pouvez également le faire avec:

find('Id or class here').set('some text')
user2322409
la source
7

fill_inaccepte id sans le symbole # que j'ai trouvé déroutant au début. Notez également que si votre champ de saisie est dans un modal, vous devrez peut-être attendre la transition ou faire un fondu avant que le champ puisse être rempli.

Strangegroove
la source
4

Si vous utilisez simple_form gem, vous devez noter qu'il identifie automatiquement vos éléments de formulaire, par conséquent, l'identification manuelle des éléments vous-même est inutile!

Il y a; cependant, une convention de dénomination que simple_form suit pour identifier les éléments du formulaire.

object_attribute

Donc, si vous remplissez des informations pour, disons, un objet de contact comme suit:

= simple_form_for @contact do |f|
  = f.input :first_name
  = f.input :last_name

simple_form générera alors automatiquement des identifiants pour chaque élément de formulaire respectivement comme suit:

id="contact_first_name"
id="contact_last_name"

Maintenant, vous pouvez simplement utiliser cette convention de dénomination pour répondre à tous vos besoins de fill_in. J'espère que cela t'aides.

moeabdol
la source