Vous avez donné la réponse dans votre commentaire, l'élément n'était pas visible.
Réponse courte: find_link(selector, visible: :all).click
Comme capybara montre dans le documentation:
By default Capybara will only locate visible elements. This is because a real user would not be able to interact with non-visible elements.
localisent uniquement les éléments visibles est une conception intelligente de capybara, il évite de penser qu'un utilisateur serait en mesure de trouver l'élément.
Le find_link
method documentation ne vous aide pas beaucoup lors de la recherche pour les liens cachés, car il montre que ces options: wait, href, id, title, alt, class
:
#find_link([locator], options = {}) ⇒ Capybara::Node::Element
Mais vous voyez sur l'finding documentation il y avait une option visible
:
find_link('Hello', :visible => :all).visible?
find_link(class: ['some_class', 'some_other_class'], :visible => :all).visible?
Cette option visible
provient de la méthode #all
, where you can see here. Il peut avoir ces valeurs:
true - only finds visible elements.
false - finds invisible and visible elements.
:all - same as false; finds visible and invisible elements.
:hidden - only finds invisible elements.
:visible - same as true; only finds visible elements.
Ainsi, dans votre cas, vous pouvez utiliser visible: false
, si vous pensez vraiment à cacher, ou visible: :all
si vous ne se soucient pas de la visibilité.
Puisque l'élément sur lequel vous essayez de cliquer n'a pas de contenu, a-t-il réellement une taille sur la page? Sinon, il sera considéré comme non visible. En outre, l'utilisation de sélecteurs spécifiques va rendre vos tests vraiment cassants, au moins l'un des sélecteurs d'identifiants ne devrait pas être nécessaire car l'autre devrait toujours identifier de manière unique un élément, et la plupart des classes que vous spécifiez sont probablement inutiles. –
@ThomasWalpole, je comprends qu'il devrait être quelque chose comme 'find ('# bucket_resources_containers> #user_base_widget> div> div> a'). Click', mais trouve seulement le premier élément div' '# bucket_resources_containers'. –
@ThomasWalpole Les éléments n'étaient pas visibles. Tout fonctionne bien. –