2017-01-25 2 views
3

Nachdem ich mich über Devise angemeldet habe, klicke ich auf den Button mit angehängtem Javascript, was HTML sichtbar macht.
<button id="btn_simple_search" class="btn btn-primary btn-md well_button" data-toggle="button">Search</button>
Anrufe funktionieren
$("#btn_simple_search").click(function(){ $("#simple_search").toggle(500); });Capybara/Poltergeist - Warte auf JavaScript Fertigstellungen

ich für Capybara Test möchte warten, bis diese Funktion abgeschlossen ist (ich weiß nicht - wie ein Rückruf oder etwas) eher dann sleep 0.6 machen, bevor ich andere Schaltfläche klicken oder Wählen Sie einige Optionen aus dem neu angezeigten HTML-Block. Ich verwende Minitest als Testframework. Wie es geht?

Oben ist Javascript direkt auf der Seite eingebettet.

Antwort

2

Capybaras Findern (außer all/first), Matcher und Sitzungs Aktionen standardmäßig auf einer Warte/retrying Verhalten speziell zu behandeln das Thema, von dem du sprichst. Sie werden (standardmäßig) bis Capybara.default_max_wait_time Sekunden warten, bis die benötigten Elemente auf der Seite erscheinen. Dies bedeutet, dass wenn Sie eine Aktion ausführen, die einige Zeit in Anspruch nehmen wird und Sie darauf warten möchten, dass sie beendet wird, Capybara anweisen muss, auf der Seite nach etwas zu suchen, das sich ändert, um den Abschluss anzuzeigen. Wenn man auf eine Schaltfläche klickt, die Dinge sichtbar macht, sucht sie nach Textinhalten, die angezeigt werden, oder sie könnten nur auf eine Schaltfläche klicken, die sichtbar wird, da das Auffinden der Schaltfläche ein wenig warten wird, bis sie sichtbar wird.

Die einzige Falte darin sind Elemente, die auf der Seite existieren. Das Problem dabei ist, dass die Gegenstände sichtbar werden, sich aber noch bewegen. Dies kann dazu führen, dass einige Treiber (insbesondere Poltergeist aufgrund von Architekturproblemen, mit denen nicht wirklich gearbeitet werden kann) an der falschen Stelle auf der Seite klicken. Die beste Lösung dafür ist, die Animation im Testmodus zu deaktivieren, was auch Ihre Tests beschleunigt, aber wie genau Sie das tun, hängt davon ab, welche Bibliotheken Sie verwenden, die die Animationen erzeugen.

1

Sie können Capybara der Matcher have_content verwenden, die wartet, bis Inhalte auf der Seite angezeigt wird:

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