Trouver des éléments par des attributs de données
Je suis d'améliorer mes tests avec RSpec
et capybara-webkit
, en essayant de supprimer tous les css
et xpath
sélecteurs comme
find('#edit_user > div:nth-child(7) > div > div > button').click
et je suis à la recherche de la meilleure option pour les remplacer.
J'allais utiliser le css class
des éléments de mais certains "pro" capybara testeur dit ce n'est pas la meilleure option.
Donc ma question est: puis-je utiliser le data
attributs dans mes tests?
Si j'ai un élément
<button name="button" type="submit" class="button last" data-test="edit.update">Update/button>
vais-je être capable de faire
find('edit.update').click
?
Et vous pensez que c'est une bonne idée? Si vous avez d'autres idées/infos sur ce sujet, n'hésitez pas à commenter!
OriginalL'auteur fabersky | 2015-12-04
Vous devez vous connecter pour publier un commentaire.
Pour localiser les éléments par leur données* attribut, vous devez utiliser un CSS sélecteur ou XPath.
Pour le CSS selector:
Pour XPath:
Si oui ou non c'est une bonne idée dépend vraiment de l'application. Vous voulez choisir quelque chose d'unique qui identifie l'élément. Si "éditer.mise à jour" n'est pas unique, il ne serait pas un bon choix à utiliser. Le
class
attribut serait bien si le bouton a une classe unique, qui "bouton" et "dernier" ne sont pas susceptibles de l'être.La meilleure approche est vraiment pour une utilisation statique
id
attributs comme ils devraient l'être unique dans la page, et sont moins susceptibles de changer. Lefind
méthode prend également en charge la localisation des éléments par id, ce qui signifie que vous n'avez pas à écrire CSS-sélecteurs, ou XPath.OriginalL'auteur Justin Ko
La réponse donnée par Justin Ko est correct, je voulais juste ajouter quelque chose de plus avancé, ce qui peut aider avec le test de lisibilité dans certaines situations. Vous pouvez ajouter vos propres "sélecteurs" à Capybara, donc si vous avez vraiment envie de sélectionner les choses par un test d'attribut (pas une bonne idée puisque vous ne voulez pas vraiment être l'ajout d'attributs juste pour le test) beaucoup de choses que vous pourriez faire
qui permettrait
cela peut faire des tests compréhensible tout en limitant également compliqué css ou le chemin des requêtes à un seul endroit dans votre code de test. Vous pouvez ensuite définir une méthode telle que
si vous préférez le look de find_by_dt...) pour trouver(:dt, ...)
Vous pouvez également ajouter des filtres et des descriptions à vos propres sélections pour plus de flexibilité, une meilleure description des erreurs, etc - voir https://github.com/jnicklas/capybara/blob/master/lib/capybara/selector.rb pour les haut-sélecteurs fournis par capybara
certains pensent que c'est juste une mauvaise pratique d'ajouter des choses juste pour le test. Cependant, j'ai rencontré de nombreuses situations où le changement d'un bout de code a l'ondulation des effets sur le code de test que j'ai passé des heures à la correction des tests, car il est basé sur un peu de css ou de texte. Je suis complètement d'accord avec Kent Dodds article sur les attributs data - pour le test ici: blog.kentcdodds.com/... . En bref, elle rend vos tests moins fragile. C'est une question de compromis.
OriginalL'auteur Thomas Walpole