Wie warten Sie, bis jQuery Ajax-Anforderungen von WatiN aus abgeschlossen werden?

8

Ich schreibe WatiN Tests, um ein Ajax Web-Anwendung und sind auf ein Timing-Problem mit Ajax-Anfragen gestoßen.

Nachdem eine AJAX-Anfrage durch eine Aktion auf der Seite ausgelöst wurde, möchte ich, dass WatiN wartet, bis die Anfrage abgeschlossen ist, bevor bestätigt wird, dass die Seite korrekt aktualisiert wurde.

Ich habe das Gefühl, dass die Lösung das Auswerten von JavaScript zum Registrieren von Handlern für $.ajaxStart und% co_de beinhalten wird % um zu verfolgen, ob Anfragen in Bearbeitung sind. Ich werde mich kurz damit beschäftigen, aber ich wollte sehen, ob jemand anderes das schon gelöst hat. Scheint, als wäre es ein häufiges Problem mit Ajax-Tests.

    
Randy Klingelheber 03.03.2010, 23:07
quelle

3 Antworten

18

Ich habe einige WaiN Browser-Erweiterungsmethoden entwickelt, um dieses Problem zu lösen, bin aber immer noch an anderen Lösungen interessiert.

Die Methode InjectAjaxMonitor erstellt eine globale javascript-Variable, die an die Ereignisse ajaxStart und ajaxComplete angehängt wird, um die Anzahl der laufenden Anforderungen zu verfolgen.

Immer wenn Sie warten müssen, bis AJAX-Anforderungen abgeschlossen sind, bevor Sie fortfahren, können Sie browserInstance.WaitForAjaxRequest(); aufrufen.

%Vor%     
Randy Klingelheber 04.03.2010, 00:46
quelle
6

Diese Lösung funktioniert nicht sehr gut, da .ajaxStart nur für die erste Ajax-Anforderung aufgerufen wird, während .ajaxComplete jedes Mal aufgerufen wird, wenn eine Ajax-Anforderung beendet wird. Wenn Sie einen solchen einfachen Code in Ihrer Konsole ausführen:

%Vor%

und fügen Sie einige Logging in den% -Methoden .ajaxStart und .ajaxComplete hinzu. Sie können sehen, dass .ajaxStart handler nur einmal aufgerufen wird und .ajaxComplete handler zweimal. So ajaxRequestCount wird negativ und all dein Design ist geschraubt.

Ich schlage vor, dass Sie .ajaxSend anstelle von .ajaxStart verwenden, wenn Sie Ihr Design beibehalten möchten.

Eine andere Lösung wäre, .ajaxStop anstelle von .ajaxComplete zu verwenden, aber Sie brauchen nicht ajaxRequestCount , Sie brauchen nur einen booleschen Wert, der angibt, ob hinter der Szene Ajax-Anfragen laufen.

Sehr nützliche Informationen finden Sie: Ссылка

Hoffe, das hilft.

    
Baptiste Pernet 14.12.2010 10:31
quelle
3

Ich bin gerade selbst auf dieses Problem gestoßen, als ich an einigen Tests mit WatiN gearbeitet habe. Ich fand das in der Version 1.1.0.4000 von WatiN (veröffentlicht am 2. Mai 2007 (neueste Version) Version wird 2.0 RC2 vom 20. Dezember 2009)), es wird behauptet, dass die bessere Unterstützung für Umgang mit Ajax in Tests wurden hinzugefügt:

  

Um das Testen von AJAX besser zu unterstützen   aktivierte Websites, diese Version fügt hinzu   einige weitere Optionen für Ihre Toolbox.

     

Eine neue Methode wird hinzugefügt, die wartet   bis ein Attribut ein bestimmtes hat   Wert. Dies könnte praktisch sein   Situationen, in denen Sie warten müssen   bis ein Wert eines Elements erreicht wird   aktualisiert.

Beispiel:

%Vor%

Weitere Informationen finden Sie im Link zu den Versionshinweisen .

Ich habe es noch nicht im Detail untersucht, daher kann ich nicht sagen, in welchen Fällen es nützlich sein könnte oder nicht. Aber dachte, es könnte erwähnenswert sein, falls jemand anders auf diese Frage stößt.

    
Nailuj 05.01.2011 14:56
quelle

Tags und Links