2017-01-25 2 views
3

Après que je me connecte via l'invention, je clique sur le bouton avec le javascript ci-joint qui rend le HTML visible.
<button id="btn_simple_search" class="btn btn-primary btn-md well_button" data-toggle="button">Search</button>
appels fonctionnent
$("#btn_simple_search").click(function(){ $("#simple_search").toggle(500); });Capybara/Poltergeist - Attendre la fin du JavaScript

Je voudrais pour le test de capybara attendre cette fonction est terminée (je ne sais pas - comme un rappel ou quelque chose) plutôt que faire sleep 0.6 avant que je clique sur un autre bouton ou sélectionnez quelques options du bloc HTML nouvellement affiché. J'utilise Minitest comme framework de test. Comment faire?

Au-dessus de javascript est incorporé directement sur la page.

Répondre

2

trouveurs capybaras (autres que all/first), Matchers, et les actions de session par défaut à un comportement d'attente/réessayant spécifiquement pour traiter le problème dont vous parlez. Ils vont (par défaut) attendre Capybara.default_max_wait_time secondes pour que les éléments nécessaires apparaissent sur la page. Cela signifie que lorsque vous effectuez une action qui prendra du temps et que vous voulez attendre qu'elle se termine, vous devez demander à Capybara de chercher quelque chose sur la page qui change pour indiquer la fin. Lorsque vous cliquez sur un bouton qui rend les choses visibles, cela peut être la recherche de contenu textuel qui apparaît ou il peut simplement lui dire de cliquer sur un bouton qui devient visible puisque trouver le bouton attendra un peu jusqu'à ce qu'il devienne visible.

La seule ride dans ce sont les éléments qui animent l'existence sur la page. Le problème ici est que les objets deviennent visibles mais sont toujours en mouvement. Cela peut causer certains pilotes (en particulier Poltergeist en raison de problèmes d'architecture qui ne peuvent pas vraiment être travaillés) de cliquer au mauvais endroit sur la page. La meilleure solution pour cela est de désactiver l'animation en mode test, ce qui accélérera également vos tests, mais la manière dont vous le faites dépend des bibliothèques que vous utilisez et qui produisent les animations.

1

Vous pouvez utiliser le matcher de capybara have_content qui attend jusqu'à ce que le contenu apparaît sur la page:

expect(page).to have_content("Text from your hidden block here") 
# click other button