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.
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.
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:
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.
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.
Tags und Links javascript jquery ajax watin