Comment fill_in travail dans Rspec/Capybara?
Je suis Michael Hartl du Tutoriel Ruby on Rails. Lorsque j'utilise rspec/capybara, le fill_in méthode qui me rend confus. J'ai le texte suivant afficher le code:
<%= f.label :name %>
<%= f.text_field :name %>
C'est mon code de test:
fill_in "Name", with: "Example User"
Il semble que l'étiquette et text_field sont tous deux nécessaires pour fill_in pour localiser le champ de saisie. Si je l'ai décollage f.label
ou modifier <%= f.text_field :name %>
être <%= f.text_field :another_name %>
, le test va me donner ElementNotFound
erreur. Quelqu'un peut-il expliquer comment le fill_in travaille ici? A l'entrée du champ et de l'étiquette à la fois nécessaire pour fill_in
méthode?
OriginalL'auteur Joey Hu | 2014-09-27
Vous devez vous connecter pour publier un commentaire.
Il est a déclaré que
fill_in
recherche de terrainname
,id
ou le texte de l'étiquette. Selon ActionView::Assistants::FormHelper section de rails guides, le code de la vue qui vous vous demandez doit être traduite dans le code html suivant:Comme vous le voyez,
label
produit le "Nom" du texte, ce qui vous demandez de l'intérieur de votrefill_in
expression. Maisid
etname
propriétés deinput
champ sont un peu différentes, donc vous devez avoir l'aide deid
en fonction de sélecteur pour obtenir le même résultat:fill_in "user_name", with: 'Example User'
Donc, pour résumer,
label
champ n'est pas obligatoire, mais vous devriez regarder pour votre code html soigneusement et sélectionnez les paramètres appropriés pourfill_in
expression.eh bien, pas vraiment. Donner un coup d'oeil à
html
extrait de dans ma réponse - labelfor
attribut a la même valeur que l'entrée duid
, de sorte qu'ils sont liés ensemble, indépendamment de la position réelle sur la page.OriginalL'auteur twonegatives
Juste pour ajouter à ce twonegatives posté. Voici ce que le capybara docs dire pour le fill_in() méthode:
http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Actions:fill_in
Quand je supprime le Nom de l'étiquette, je peux utiliser une des options suivantes et les tests passent toujours:
En ruby, certains caractères ne peuvent pas être utilisés dans un nom de symbole, à moins que tout symbole est cité.
Capybara doit récupérer tous les champs de texte (ou zones de texte) de la page, puis obtenir les valeurs des attributs id et name(facile à faire avec quelque chose comme Nokogiri) puis de vérifier si la valeur est égale à la premier argument de fill_in() (après la conversion, le premier argument une Chaîne de caractères via to_s()).
OriginalL'auteur 7stud
J'ai donné mes 2 cents ici: Capybara de ne pas trouver les éléments de formulaire.
Si vous appelez les Rails text_field helper avec un trait de soulignement (:prenom), le DOM est rendu en tant que "nom" et son que le Capybara aurez besoin. Pas besoin d'un attribut id.
Vue:
<%= form.text_field :first_name %>
Test:
fill_in "First name", with: 'Elaine'
OriginalL'auteur urubuz