2009-08-05 6 views
3

Ich versuche das Testen einer WinForm-Anwendung zu automatisieren. Ich führe es im selben Prozess wie den Testcode, so dass es ziemlich einfach ist, die .Net-Steuerelemente zu finden und Benutzeraktionen auf ihnen zu simulieren. Ich habe aber ein bisschen mit einer Message Box (erstellt mit der Standard MessageBox.Show-Methode) stecken. Wie kann ich es erreichen und simulieren, dass eine Taste gedrückt wird?Programmatisch finde ich ein Meldungsfeld und erzeuge einen Klick auf eine Schaltfläche

Antwort

2

Sie werden wahrscheinlich verwenden müssen WinAPI Anrufe (FindWindowEx, ect) und einem schicken Nachrichten von LMB nach unten und bis zu einem Button-Handle.

+0

Generell UI Automation (wie in Sachen, die ich verlinkt habe) ist eine höhere Ebene, dies zu tun, auch wenn das ist gültig [und ich habe auf dieser Basis +1 gegeben]] –

+0

Könnten Sie etwas Code einfügen? Ich habe noch nie mit win api gespielt. – Grzenio

3
  • codeplex.com/white - Free

  • testautomationfx.com - Gewerbe, aber sehr gut

2

Wenn Sie die Beschriftung kennen (und sie ist eindeutig), können Sie Application.OpenForms durchlaufen, um sie zu finden.

+0

Und wie finde ich die Tasten? – Grzenio

6

Ich würde empfehlen, die zugrunde liegende Krankheit und nicht das Symptom zu behandeln. Nehmen Sie ein paar Minuten zu lesen, diese

Kurz gesagt, eine Schnittstelle verwenden, um alle modalen Dialog Popups zu trennen - das ist ein Schmerz im Nacken für UI Testautomatisierung. Sie können dann eine Scheinimplementierung der Schnittstelle ersetzen, die nichts tut oder vorgegebene Testwerte zurückgibt. Die eigentliche Implementierung natürlich erscheint den eigentlichen Dialog modal ... so etwas wie dies (aus dem zweiten Link) bis

public class UserInterrogator : IUserInterrogator 
{ 
    private Form owner; 

    public UserInterrogator(Form owner) 
    { this.owner = owner; } 

    public Font GetFontFromUser() // member of the IUserInterrogator interface 
    { 
     FontDialog fd = new FontDialog(); 
     fd.ShowDialog(owner); 
     return fd.Font; 
    } 
} 

Je einfacher Ansatz ist natürlich etwas Code zu schreiben, der den Dialog sucht und schließt/sie tötet. Ich habe einige Leute gesehen, die Erfolg mit Win32 APIs und NUnitForms haben ...

0

Sie können autoit Skript-System verwenden.

Aber ich schlage vor, um die GUI und die Implementierung zu trennen, weil das Grundprinzip des Komponententests "Einheit" ist, wo Einheit Klasse ist, die von anderen Klassen oder der realen Welt getrennt ist.
Dieses Prinzip gibt Ihnen gutes Klassen-Design und hilft, Software-Eruption und viele andere gute Sachen zu vermeiden.

Verwandte Themen