Défilement automatique d'un bouton dans la vue avec Capybara et le Sélénium
Parfois le mois dernier (juin 2013), plusieurs de nos Capybara tests a commencé à défaut, principalement parce que les boutons ils sont en essayant de cliquer sur ne sont pas en vue. Idéalement, j'aimerais comprendre ce qui a changé. Nous sommes actuellement sur le sélénium-webdriver 2.33 mais j'ai essayé de revenir à 2,29 et cela ne fonctionne toujours pas. Nous sommes en cours d'exécution à l'encontre de Firefox uniquement pour le moment et c'est peut-être en raison d'une nouvelle version de Firefox.
Sauf que, je ne peux pas comprendre comment faire défiler les boutons dans la vue. De ce que je comprends, je peux utiliser scrollIntoView mais vous ne savez pas comment l'appeler dans le Capybara étape. J'ai essayé de variations sur:
Capybara.current_session.driver.execute_script("arguments[0].scrollIntoView(true;)", find_button(button).native)
Mais avec pas de chance parce que find_button lui-même ne fonctionne pas.
Remarque: nous sommes à la sélection des basé sur le texte du bouton. La sélection basée sur l'ID est possible, mais il faudra beaucoup de changements à notre INTERFACE utilisateur de tests, donc nous aimerions éviter.
Quelle version de Firefox? Vous pouvez essayer de désinstaller Firefox et puis installer une version spécifique de Firefox et de désactivation de la mise à niveau sur elle afin qu'elle reste à la version que vous attendez.
OriginalL'auteur Kyle Baley | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude d'avoir un module
JavascriptDriver
que j'utilise pour inclure le Sélénium fonctionnalité dans un test, et là, j'ai de définir une méthode d'aide:Et puis dans votre test, vous pouvez utiliser ce code par le passage d'un normal Capybara élément:
Essayez-le avec la
visible: false
option. Mise à jour de ma réponse.Merci man, vous avez vraiment sauvé ma vie! BTW, cela fonctionne aussi pour le défilement horizontal 🙂
Cela fonctionne! BTW, si l'élément est caché sous un en-tête statique comme bootstrap en-tête, il ne fonctionnera pas. Dans mon cas, j'ai dû mettre
scrollBy(0, -50);
juste aprèsarguments[0].scrollIntoView(true);
OriginalL'auteur Gray Kemmey
C'est un bug de défilement qui a montré dans le Sélénium et le Chrome. Le correctif est https://stackoverflow.com/a/11048669/1935918
OriginalL'auteur dankohn
Depuis votre page n'est pas de défilement, vous pouvez utiliser la même approche que la lié réponse dans l'autre réponse, mais avec une variation de cibler votre élément déroulant. Par exemple, si votre défilement de l'élément a un id de "défilement":
Personnellement, je déteste avoir à faire défiler pour les tests, donc si quelqu'un arrive avec une meilleure solution pour le Capybara + Sélénium, je serais ravi de le voir.
OriginalL'auteur Sia