2017-08-28 3 views
0

J'ai une étape comme ceci:-t-capybara « dans » accord avec ajax, pourquoi échoué dans le css avec l'erreur « Impossible de trouver trouver css »

Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs| 
    bugs_list = bugs.split(", ") 
    assert page.has_css?(".eligible-bugs", :visible => true) 
    within(".eligible-bugs") do 
    bugs_list.each do |bug| 
    assert page.has_content?(bug) 
    end 
    end 
end 

Mais l'étape échouent parfois au "dans les (".eligible-bugs") faire "avec l'erreur" Impossible de trouver css ".eligible-bugs" '

Je pense que c'est bizarre. pour l'assertion a été passée. cela signifie que le CSS est visible. pourquoi dans ne peut pas trouver css? Comment ça se passe.

Mais l'étape échouent parfois au « Within (». Admissibles-bugs «) font » l'erreur « Impossible de trouver « css-bugs .eligible » »

Je pense qu'il est étrange. pour l'assertion a été passée. cela signifie que le CSS est visible. pourquoi dans ne peut pas trouver css? Comment ça se passe.

BTW, j'ai mis mon temps d'attente maximum à 5.

Capybara.default_max_wait_time = 5 

Répondre

0

La seule façon qui devrait se produire, est si la page est en train de changer dynamiquement pendant que vous utilisez le test - parfois au cours de votre chèque le contenu de tous les bugs sur la page change et l'élément '.eligible-bugs' va bon train. Le test et le navigateur s'exécutent séparément, donc comment/pourquoi cela se passe dépend de ce que fait votre page dans le navigateur, cela dépend aussi des étapes qui ont précédé le test.

Notez également qu'il ne disparaît pas nécessairement entre l'instruction has_css? et l'instruction within exécutée pour la première fois. Si elle disparaît à tout moment au cours du code à l'intérieur du within en cours d'exécution, elle risque de provoquer la même erreur lorsqu'elle tente de recharger l'élément '.eligible-bugs'.

Dans le titre de la question, je suppose que la liste que vous voulez vérifier est le résultat d'une action de recherche ou de filtrage. Si c'est le cas, cette action supprime-t-elle l'élément '.eligible-bugs' existant et le remplace-t-il ensuite par un nouveau élément renvoyé par une requête ajax? Si tel est le cas, puisque vous contrôlez les données de test, vous devez attendre que le nombre de résultats correct s'affiche, garantissant ainsi que tous les remplacements d'éléments sont terminés, avant de rechercher le texte. La façon dont vous le faites dépend de la composition exacte de la page, mais si chaque bogue éligible était un enfant de '.eligible-bugs' et avait une classe de '.eligible-bug', j'écrirais votre test comme

Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs| 
    bugs_list = bugs.split(", ") 
    assert_css(".eligible-bugs > .eligible_bug", count: bugs_list.size) # wait until the expected number of results have shown up 

    within(".eligible-bugs") do 
    bugs_list.each do |bug| 
     assert_content(bug) 
    end 
    end 
end