Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie schreibt man ein Klickprogramm? (https://www.delphipraxis.net/101618-wie-schreibt-man-ein-klickprogramm.html)

darok 16. Okt 2007 14:31


Wie schreibt man ein Klickprogramm?
 
Hallo,

auch wenn sich der Titel blöd anhört ist die Frage ernst gemeint. Ich will damit keinen Betrug begehen - es geht mir nicht um Website oder Werbeeinnahmen sondern vielmehr um ein Programm, das automatisch den Cursor (beispielsweise per Zufallswerten für x und y) setzt und dann das OnClick-Event auslöst. Damit möchte ich ein anderen GUI-Programm automatisiert testen.

Leider reichen meine Programmierkenntnisse dafür nicht (mehr) aus, weil ich aus der Übung bin.

Ich weis nun nicht wo am besten anzufangen ist.
Vor allem frage ich mich, wie mein Programm überhaupt Auswirkungen auf ein anderes (den Prüfling / das zu testende GUI-Programm) haben kann. Muss ich dafür nicht erstmal ein Canvas oder so haben, welches den gesamten Bildschirm ausfüllt und dabei unsichtbar ist - keine Ahnung wie das gehen soll. Hat jemand ne (bitte einfache und verständliche) Idee. Die DUnit oder andere Testwerkzeuge sind einfach zu teuer und zu kompliziert.

Beispiel:
1.) wie kann ich den (Maus-?) Cursor setzen (für ein anderes Programm)?
2.) wie kann ich das Click-Event an beliebiger Cursor-Position für das andere Programm ausführen, um
damit dessen Reaktionen zu testen?
...

Ich frage mich, wie das die echten Profis machen. hmpf.

Falls jemand Erbarmen mit mir hat - schon mal vielen vielen Dank für die Hilfe im voraus.

Im Prinzip meine ich so etwas wie Zeichnen auf dem Bildschirm (egal welches Programm geöffnet ist) aber statt Zeichnen eben Klicken.

mfg
Darok

quendolineDD 16. Okt 2007 14:32

Re: Wie schreibt man ein Klickprogramm?
 
Du könntest dir das Handle des betreffenden Programmes suchen und dann mit SendMessage deine Aktionen an das Fenster senden !?

Ich habe sowas bisher immer mit AutoIt-Scripten realisiert ;)

Grüße

Luckie 16. Okt 2007 14:33

Re: Wie schreibt man ein Klickprogramm?
 
Zu all deinen Fragen findest du ihr im Forum schon Antworten. Benutz deshalb bitte die Suche.

s-off 16. Okt 2007 14:46

Re: Wie schreibt man ein Klickprogramm?
 
Zitat:

Zitat von darok
Ich frage mich, wie das die echten Profis machen. hmpf.

Die 'echten Profis' nutzen jedenfalls keine Mausklicks, um Ihre Software automatisiert zu testen.
Genauso wenig wie Image-Recognition oder sonstige Scherze.
Damit erreichst Du nämlich ganz fix das Ende der Fahnenstange.

OregonGhost 16. Okt 2007 14:49

Re: Wie schreibt man ein Klickprogramm?
 
An der Stelle würde mich einmal interessieren, ob einer der "Profis" (oder sonstjemand) Erfahrung mit System.Windows.Automation hat, das soll ja eigentlich gerade dafür gemacht sein (bzw. halt die Win32-Variante UI Automation).

Bernhard Geyer 16. Okt 2007 17:33

Re: Wie schreibt man ein Klickprogramm?
 
Ich, ich, hallo hier. :-)

Ich hatte mal mit AQTest versucht ein Delphi Win32-Programm automatisiert zu testen. Jedoch nach längerer Investitionszeit wieder aufgegeben.

- Der Aufwand ist nicht unerheblich (Vor allem wenn man versucht auch mit den Skripting-Möglichkeiten zu arbeiten)
- Die GUI sollte faktisch zu 99,9% eingefroren sein
- Komplexere GUI-Control wie umfangreiche Tree/Listviews sind sehr schwer zu testen
- GUI-Änderungen müssen mit erheblichen Aufwand im Testscript nachgezogen werden
- Platform-Tests (Unter 9x, ...) sind faktisch nur möglich wenn man eh das halbe Betriebssystem ausgetausch hat (IE/DCOM-Update, ...)
- Es sollte (fast) ein Vollzeit-Job sein. Man vergisst zu viel wenn man wieder einige Zeit nix damit gemacht hat.

GUI-Tests würde ich erst dann empfehlen wenn man praktisch schon zu 100% Basisklassen/Business-Logik per Unit-Tests tested. Diese sind nämlich viel einfacher zu realisieren und sehr nützliche. Und da ich keinen kenne der sowas macht ist meine Empfehlung eindeutig :-)

Gehstock 16. Okt 2007 21:53

Re: Wie schreibt man ein Klickprogramm?
 
Hatte das vor ner weile mal so gelöst

Delphi-Quellcode:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ToolWin, ComCtrls, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, XPMan;


var
  Form1: TForm1;
  X,y,c,v:Integer;
  ok: longbool;
implementation

{$R *.dfm}




procedure TForm1.Timer1Timer(Sender: TObject);
begin

    SetCursorPos(X, Y); //Setze Mausposition
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); //Maustaste Druck
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);  //Maustaste lösen
    X:= X+68;//  Detzt x 68 pixel nach links
     if x>=600 then begin x:=300; Y:=Y+48; end; //ist x größer/gleich als 600 dann zurück auf 300 und y um 48 Pixel nach unten
      if y>=860 then begin x:=300; Y:=200; end; // ist y größer/gleich 860 dann x auf 300 und y auf 200
    Button2.caption:='Position '+inttostr(x)+' und '+inttostr(y); // zeigt Mausposition
   end;



procedure TForm1.FormCreate(Sender: TObject);
begin
X:= 300; Y:=200; //startposition Mauszeiger
c:=0;  //Anzahl der clicks
v:=0;  //Anzahl der votes
ok:=RegisterHotKey(Form1.Handle, ID, MOD_Alt, Ord('Q')); //Hotkey Programm beenden
ok:=RegisterHotKey(Form1.Handle, vot, MOD_Alt, Ord('V')); //Hotkeys Vote beenden
  if not ok then
  ok:=RegisterHotKey(Form1.Handle, ID+1, MOD_control, vk_f1); //alternativer Hotkey Programm beenden
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz