Comment faire pour attendre jusqu'à un élément apparaît après un appel AJAX à l'aide de capybara-webkit?
Le capybara méthode, wait_until
n'a pas l'air de marcher pour le capybara-webkit. Est-il une solution alternative pour qui, ou toutes les implémentations de Javascript?
Intentionnellement besoin de certains de remplacement pour sleep
, par exemple sleep 2
.
OriginalL'auteur Prashanth Sams | 2014-07-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez prendre un coup d'oeil à cette solution enveloppé par Thoughtbot: ici
Je l'ai trouvé très utile.
Cette solution semble supposer que
window.jQuery
est défini. Ce n'est pas nécessairement vrai pour les projets qui utilisent CommonJS module de regroupement.OriginalL'auteur Dario Barrionuevo
Si votre appel AJAX entraîne un changement dans les DOM, Capybara vais attendre pour elle si vous ne
Il est intentionnel, Capybara fonction qu'il attend (jusqu'à
Capybara.default_wait_time
) pourhave_selector?
et les méthodes connexes pour être vrai.Si votre appel AJAX n'entraîne pas une modification du DOM, il n'y a pas moyen d'attendre de ce côté navigateur à l'aide de Capybara. Vous pourriez être en mesure de détecter lors de l'appel AJAX est terminée en Javascript et en quelque sorte de le communiquer à Capybara, mais cela couple de test et de mise en œuvre plutôt serré. Une approche commune dans ce cas est d'attendre pour le côté serveur de l'effet de votre appel AJAX (création ou mise à jour ou la suppression d'un objet de modèle, l'envoi d'un e-mail, etc.) à prendre place. Depuis Capybara ne pouvez pas voir le côté serveur, vous devez attendre pour le côté serveur, changer vous-même.
Dans le Capybara 1 vous pouvez utiliser le Capybara est
wait_until
à attendre du côté serveur, le changement.wait_until
a été retiré de Capybara 2. J'ai posté une mise en œuvre dewait_until
dans ma réponse à Pourquoi ne l'ajout de "sleep 1" à un croc de provoquer cette Rspec/Capybara test à passer?OriginalL'auteur Dave Schweisguth
Peut-être quelque chose comme ceci:
Manuellement dans votre code js set 'ajax:envoyer' (ajouter throbber) et ajax:succès " (supprimer throbber). De cette façon vous serez en mesure de savoir quand demander est fini.
Et vous devez mettre suffisamment de temps pour l'ajax complet:
OriginalL'auteur Kesha Antonov