AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VCL: Wann ist Anwendung fertig

Ein Thema von freimatz · begonnen am 19. Feb 2020 · letzter Beitrag vom 27. Feb 2020
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#1

VCL: Wann ist Anwendung fertig

  Alt 19. Feb 2020, 18:09
Für die Automatisierung von Test steuern wir eine große und alte Anwendung von aussen. Dabei ist es gut wenn man z.B. Controls nur dann beschreibt, wenn die Anwendung auch bereit ist. Ein häufiges Szenario ist, dass ein Knopf gedrückt wird, wobei dann ein (anderes) Menüband erscheint welches Controls enthält. Nur wann ist das Menüband bereit? So genau kann man das nicht sagen weil auch noch Timer im Hintergrund laufen.

Im Moment geben wir ein Control zur Prüfung mit. Das Menüband ist dann bereit, wenn
a) das Tab, auf dem das Control sichtbar ist
b) Wenn das UI nicht gelocked ist
c) das Control selber Showing ist
Als Ideen gab es mal noch:
d) wenn die CPU-Auslastung runter geht: hat sich nicht so bewährt
e) wenn die Windows-Botschaftswarteschlange leer ist (wm_Paint ist die letzte): ein Teilversuch mache ich gerade

Irgendwelche Ideen dazu? (Auch von Kathinka )
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: VCL: Wann ist Anwendung fertig

  Alt 19. Feb 2020, 18:33
Aber das ist doch nur geraten. Warum gibt die Anwendung kein Signal wenn sie "bereit" ist? Oder lässt sich fragen?

Das ist eindeutig und einfach umzusetzen. Möglichkeiten gibt es genug. Umgebungsvariablen setzen, antworten auf eine bestimmte Windows-Botschaft, ...
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 08:39
Hallo,
Danke für die Antwort. Die Anwendung lässt sich schon fragen, das machen wir auch (über TCP/IP). Das habe ich leider nicht eindeutig geschrieben.

Die Frage ist eher woher soll die Anwendung selber wissen wenn sie bereit ist. Wenn zum Beispiel die Controls alle Visible sind ist die Anwendung nach unserer Erfahrung noch lange bereit. Wenn man dann z.B. in ein Edit-Feld schreibt verhält sich die Anwendung teilweise komisch. Eine bestimmte Zeit zu warten ist auch keine gute Lösung weil die (virtuellen) Maschinen unterschiedlich schnell sind. In den einem Fall ist es Zeitverschwendung, im anderen ist es zu knapp und die Tests schlagen fehl. (Und mit "lass den Test doch auf der VM7 lauen, da gibts am wenigsten Probleme" bin ich auch nicht so recht zufrieden.)

Ich bin gerade dabei zu untersuchen ob ein Abwarten auf WM_PAINT in einem Control die Sache verbessert. (Tests laufen gerade)

Geändert von freimatz (20. Feb 2020 um 08:42 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#4

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 08:59
Hallo, eine Möglichkeit wäre möglicherweise Application.OnIdle zu nutzen.
Ich selber nutze das beim Programmstart um einen Anmeldedialog aufzurufen.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 10:08
Aber das ist doch nur geraten. Warum gibt die Anwendung kein Signal wenn sie "bereit" ist? Oder lässt sich fragen?

Das ist eindeutig und einfach umzusetzen. Möglichkeiten gibt es genug. Umgebungsvariablen setzen, antworten auf eine bestimmte Windows-Botschaft, ...
Würde ich so unterschreiben. Die Anwendung wartet auf Eingaben, ist beschäftigt oder ist beschäfigt und kann gleichzeitig Eingaben entgegennehmen. Wenn man da raten muß ist das suboptimal egal ob eine neue oder alte Anwendung. (Ich hab auch noch solche Leichen im Keller, ist trotzdem S********)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 10:24
Ja schon. Nur hilft mir das nicht weiter. "Das ist eindeutig und einfach umzusetzen." - aber wie? Und auch für die Leichen im Keller sollte das funktionieren.

@BerndS: Ah ja Application.OnIdle, hatte ich gar nicht daran gedacht, baue ich noch ein.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 10:57
Das kommt darauf an was in der anwendung geschieht. Wenn z.b. ein thread sich nicht zurück meldet (EndMessage) dann hilft nur noch raten. Oder das beliebte Dateilesen,daß ist fertig wenn es fertig ist. Und wenn zwischendurch jemand eine Eingabe tätigen will wird das eben abgewiesen. (Button.Enabled:=false)
Dieses einfache Strickmuster sollte immer im Hinterkopf behalten und immer beherzigen egal wie weit man es mit der Komplexität treibt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: VCL: Wann ist Anwendung fertig

  Alt 20. Feb 2020, 11:29
Warum nicht einfach mit globalen Sperr-Flags arbeiten?
Wenn einzelne Aufgaben abgearbeitet werden, werden entsprechende Flags gesetzt.
Nur wenn keine Flags gesetzt sind, ist das Programm bereit.

Ob da eine Anfrage von außen kommt, spielt ja für die Bereitschaftsentscheidung keine Rolle. Die könnte auch in einem Timer o.ä. für programminterne Aufgaben geprüft werden...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: VCL: Wann ist Anwendung fertig

  Alt 27. Feb 2020, 14:20
Danke für Eure Beiträge.

Das mit den Flags ist leider nicht so "einfach". Man müsste ja wissen wann die jeweils zu setzen sind. Wir haben zig verschiedene Menübänder.
Ein typischer Ablauf geht stark vereinfacht so:
- Anwender klickt auf Knopf -> TAction
- TAction aktiviert eine Command-Klasse
- diese meint eine UI haben zu müssen, kennt jedoch keine UI direkt
- eine registrierte Hilfsklasse wird aktiv
- die Statemachine für die UI schaltet um, bei der Transition wird
- die UI erzeugt, das Viewmodel (sofern vorhanden) erzeugt und dieses samt der Command-Klasse dem UI reingeschoben
- das Viewmodel nimmt seine Arbeit auf, holt Daten von der Command-Klasse und füllt sich selber ab
- das Viewmodel synchronisiert über das Binding das UI
- irgendwann ist dann auch das UI fertig

Als Anwender hat man es einfach, man "sieht" ja wenn das Menüband fertig da ist.
Die Testautomatsierung ist da etwas blind. Man sieht ein Control, es ist da und visible. Wenn man dann darauf klickt kommt es (je nach dem) zu Fehlern. Wenn der Fehler auftritt gibt es auch einen screenshot. Da sieht man dass das Menüband noch nicht voll da ist. Z.B. von Eingabefeldern sieht man schon einen Rahmen, aber noch keinen Inhalt.

Ich habe inzwischen mal versucht, das WM_PAINT abzufangen und am Ende das Fertig-Flag zu setzen. Ein Kollege meinte jedoch das macht man nicht. Das Problem habe ich an ihn übergeben. Nun ist ein Abfrage nach der Statemachine für die UI reingekommen. Mal schauen ob das langfristig hilft.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 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