2011-01-14 4 views
7

Unsere Website macht eine Menge JavaScript/jQuery-Arbeit in der $ (document) .ready() -Funktion, Einrichten von Schaltflächen, Laden von Inhalten über Ajax usw. Selen wartet, bis das DOM geladen ist, fährt dann aber mit dem Testen fort. ready() ist abgeschlossen.

Eine Teillösung scheint eine Überprüfung zu verwenden, um zu sehen, wenn der Browser AJAX-Anfragen anhängig ist:

selenium.browserbot.getCurrentWindow().jQuery.active == 0 

jedoch das nicht, sicherzustellen, dass wir immer noch nicht Bindungen für Buttons und aufzusetzen.

Jede Hilfe wird sehr geschätzt werden. Der derzeit beste Vorschlag besteht darin, der Seite am Ende der .ready() -Methode ein Element hinzuzufügen, das Selenium als Signal für die Arbeit fangen kann, aber die Idee, solchen Code zu Testzwecken hinzuzufügen, erscheint bestenfalls skizzenhaft .

Antwort

3

Ich glaube, dass Sie die Fensterlastprüfung verwenden können. Versuch das:

$(window).load(function(){ 
    selenium.browserbot.getCurrentWindow().jQuery.active == 0 
}); 
1

Der aktuelle ‚beste‘ Vorschlag ist Hinzufügen eines Elements auf der Seite am Ende der .ready() Methode, die Selenium als Signal an Start fangen Arbeits , aber die Idee, Code für Testzwecke hinzuzufügen, scheint bestenfalls skizzenhaft.

Ich persönlich denke nicht, dass das Ändern Ihres Codes zur Verbesserung der Testbarkeit eine schlechte Sache ist. Wenn Sie Ihre Produktionsseiten lieber nicht verschmutzen möchten, verwenden Sie ein Template-Tool wie PHP, um den Code nur im Entwicklungs-/Debug-Modus auszugeben.

Außerdem müssen Sie das DOM nicht dafür verwenden. Selen hat Zugriff auf den vollständigen Javascript-Kontext auf der Seite, so dass Sie einfach eine globale Variable als Flag verwenden können. Vielleicht wird etwas, das wahrscheinlich nicht von anderen wie SELENIUM_PAGE_FULLY_READY verwendet wird, Selenium auf seine Existenz überprüfen.

Verwandte Themen