Frage

snoop, das Spionierdienstprogramm, verwendet eine leistungsstarke Technik (wahrscheinlich eine Art Reflexion), um eine laufende WPF-Anwendung zu inspizieren.Am interessantesten ist die Tatsache, dass SNNOP die gesamte Objektstruktur ausstellen kann.

Vor ein paar Tagen habe ich den Snoop-Quellcode heruntergeladen und einige Zeit damit verbracht, das interne Verhalten zu studieren.Leider konnte ich noch nicht herausfinden, wie Snoop diese Dinge macht, also hoffe ich, dass jemand mir helfen kann.

Bei der Arbeit schreibe ich derzeit ein codiertes UI-Test-Framework, und es wäre fantastisch, wenn ich Zugriff auf die Objektstrukturen der Anwendung hatte, da dies mir erlauben, den UI-Zustand nicht nur geltend zu machen.

update:

Dies ist der notwendige Code:

generasacodicetagpre.

Dies ist schon eine große Hilfe für mich, aber es ist auch interessant, herauszufinden, wie Snop sich in einen anderen Prozess injiziert.

War es hilfreich?

Lösung

Sie können erfüllen, was Snoop mit dem WPF VisualTreeHelper und / oder dem logicalTreeHelper verwendet.Sobald Sie ein Sichtelement erhalten haben, können Sie ihren gesamten visuellen Baum so ziemlich durchqueren, um alle Elemente zu sehen, die es enthält.Visual Tree Helper hier

Greifen Sie also in Ihrem UI-Test das Hauptfenster an und durchqueren Sie den visuellen Baum, um das gewünschte Element zu finden, und führen Sie dann alle Validierungen oder Vorgänge aus, die Sie auf diesem Element wünschen.

Darüber hinaus können Sie in der Lage sein, System.Diagnostics.Process.MainWindowhandle zu verwenden, um den Windows-Griff aus einem vorhandenen Prozess zu erhalten, und verwenden Sie dann das Fenster des Fensters, um ein WPF-Fenster zu erstellen.Es ist eine Weile her, also erinnere ich mich nicht an die Besonderheiten, ohne weiter zu forschen.Der untenstehende Code kann helfen:

generasacodicetagpre.

Andere Tipps

update:

okay, ich fand den grundlegenden Code-Ort, der von Snoop verwendet wird, um die Injektionsfähigkeit bereitzustellen.Mein Erstaunen, der Code geschrieben ist, ist es wahrscheinlich einen Grund dafür.

und das ist der Code (ich hoffe, dass es in Ordnung ist, es hier zu posten):

generasacodicetagpre.

snoop inspiziert keinen WPF von außen.Es spritzt sich in die Anwendung und fügt das Vergrößerungs- oder Snoop-Fenster tatsächlich dazu hinzu.Das ist auch, warum, wenn Sie, wenn Sie Snoop beenden, die Inspektionsfenster eigentlich offen bleiben.

Der Code "Inspection" inspiziert also einfach das gewünschte Fenster und kann alle verfügbaren Avaible-WPF-Funktionen verwenden.Wie der VisualTreeHelper und logicalTreeHelper, wie hier früher erwähnt.

Für ein kleines Testrahmen habe ich mit einem kleinen Test-Code erstellt, um ein kleines Proxy-Objekt hinzuzufügen.

Die obige Antwort funktioniert nicht für mich.Es scheint ein bisschen vage zu sein.Ich habe mit diesem Code auf akzeptierte Antwort ein wenig erweitert:

generasacodicetagpre.

Diese Antwort erscheint kompletter und funktioniert für andere, wenn die akzeptierte Antwort für jedermann funktioniert.Dies gibt jedoch die letzte Zeile dieses Codes null für mich zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top