10
votes

Champs de formulaire Autofilling de Webrat

J'apprends comment écrire des tests avec concombre / webrat. L'un de mes scénarios de test est défini sur la validation des formulaires de test (champ de sortie (s) vide). Insuffisamment, des champs que je ne remplis pas avec Fill_in sont définis sur l'attribut nom du champ. Cela ne se produit que lorsque j'exécute un concombre, lors de l'utilisation d'un navigateur, cela ne se produit pas.

L'étape que j'utilise est simple: xxx

après avoir exécuté le scénario qui Utilise l'étape ci-dessus, je peux voir que le champ de texte "nom" est défini sur "Nom" au lieu d'être vide. C'est également le cas si je remplis dans ce champ avec un espace vide ou nil : xxx

Le formulaire que je teste est assez simple. : xxx

aucune idée pourquoi cela se produit?


4 commentaires

+1 pour un problème intéressant. Je ne peux pas attendre que quelqu'un figure celui-ci.


Que se passe-t-il si vous remplissez le nom, mais pas la description? Je me demande si vous avez touché un cas d'Edge avec l'étiquette, l'attribut et la valeur tout en étant "NOM"


@Mark, si je remplis le nom mais pas la description, il remplacerait le champ Description avec la "description" littérale qui correspond à la valeur du nom de ce champ.


Quel adaptateur utilisez-vous? Mécaniser?


3 Réponses :


1
votes

Une chose que vous pouvez essayer est de vous assurer que l'autocomplete est désactivé sur ce champ (Autocomplete = "Off") pour voir si cela affecte le résultat.

<form action="/item/create" method="post">
  <div>
    <label for="ItemName">Name</label>
    <input type="text" name="name" id="ItemName" autocomplete="off" />
  </div>
  <div>
    <label for="ItemDescription">Description</label>
    <textarea name="description" id="ItemDescription"></textarea>
  </div>
  <input type="submit" value="Save" />
</form>


4 commentaires

Nous avons dû faire cela parce que l'autocomplete de Firefox remplissait des champs dans notre test. De plus, si vous avez un champ de mot de passe, il remplira votre mot de passe dans le cache de remplissage de formulaire, ainsi que remplir le champ de texte avant le mot de passe, quel que soit le nom de ce champ, avec le nom d'utilisateur dans le formulaire-remplissage cache


Dang, semble être difficile à suivre: / Pourriez-vous lancer Firefox dans un autre profil utilisateur ou incognito pour empêcher cela de se produire?


C'était dans notre suite de test quand elle a utilisé le sélénium. Je ne sais pas comment le dire de fonctionner dans un profil différent. Mais ce n'était pas nécessaire parce que le autocomplete = "OFF" Correction de nos problèmes et c'était un domaine que nous ne voulions de toute façon pas être autocompressé de toute façon.


Mais alors je n'utilise pas de sélénium ni (sans tête) Firefox. Webrat est le navigateur ici après tout. Et on dirait que cela ne respecte pas la tâche automatique. Je viens de l'essayer et cela passe toujours le champ avec la valeur de son attribut de nom. Et même si l'autocomplete n'a pas été désactivé, il ne devrait pas simplement saisir le nom et se remplir dans le champ avec elle.



0
votes

Pouvez-vous essayer quelque chose comme ça dans le pas?

donné% {je remplit "nom" avec ""}

ou même mieux, dans le fichier de fonctionnalité, utilisez

donné que je remplisse "Nom avec" ".

Je suggérerais également de déménager à Capybara, vous pouvez faire des choses comme ceci:

https://github.com/jnicklas/capybara/issues/issue/219 < / a>

qui vous permettra de configurer des profils de Firefox pour vos tests de sélénium.


1 commentaires

Merci Tyler. J'ai déjà essayé de passer une chaîne vide (et un nil) mais cela le remplirait toujours avec le nom de champ. Je vais certainement regarder Capybara, mais je n'utilise pas Firefox / sélénium. Seulement webrat à ce stade.



2
votes

Je suppose que vous utilisez Webrat avec l'adaptateur mécanique, est-ce correct? Si oui, je me suis retrouvé très frustré par le même problème. Il s'avère que c'est un bogue dans la façon dont Webrat passe comme des valeurs de champ pour mécaniser. Vous pouvez trouver des détails et un patch ici: https://wonbat.lighthouseApp.com/projects/10503/tickets/384-webret-does-not-pass-empty-form-fields-Correctement-a-mechanisez < / p>

Alternativement, si vous ne voulez pas utiliser une version corrigée de Webrat, une solution de contournement légèrement non optimale est à la place Fill_in avec WhitSpace ('') et assurez-vous que la validation d'entrée de votre application s'effectue ou ignore les espaces lorsque vous envisagez de déterminer si un le champ a été rempli correctement.

Malheureusement, il semble y avoir un certain nombre de problèmes tels que celui-ci, qui ont contribué à des correctifs qui n'ont pas été fusionnés dans le "officiel" Webrat CodeBase. J'ai envoyé par courrier électronique l'auteur environ un mois et demi pour lui demander s'il l'entrechait toujours et, sinon, à envisager de faire appel à quelqu'un qui le ferait, autant de personnes l'utilisent toujours. À ce jour, je n'ai pas encore reçu de réponse.


1 commentaires

Miquel, merci pour votre réponse et le patch. Il corrige le problème (Yep, je suis / utilisait MACHANIZE). Je dois mentionner que nous avons depuis passé à Capybarra, ce qui fait que la plupart durent le plus semble. Capybarra a été assez stable et la façon dont il gère les pilotes est assez soigné. J'ai également entendu dire que Webrat n'est plus maintenu, mais je ne peux pas confirmer cela.