Unterschiedliche Antwortzeiten der Anwendung dadurch sporadische Ausführung

  • Hallo zusammen,

    ich habe ein AutoScript geschrieben, was nur sporadisch sauber durchläuft. Es liegt daran, dass die Anwendung an verschiedenen Stellen immer unterschiedliche Antwortzeiten hat, bis die Aktion ausgeführt wird oder die Anwendung eine entsprechende Antwort gibt.

    Welche Möglichkeiten ausser über WinExists habe ich noch um auf Aktionen zu warten ?
    Kann ich abfragen, ob der Mauszeiger gerade eine Sanduhr ist oder ob in der Titelzeile der Anwendung die Meldung (Keine Rückmeldung) drin steht ?

  • WinWaitActive, dabei den TimeOutParameter mit ausreichender Zeit benutzen.

    Auch ein Umstellen deines Skriptes auf den GuiOnEventMode kann bei bestimmten Konstellationen helfen, dies kann ich aber ohne Skript für deinen Fall nicht beurteilen. Falls es wenn du selbst die Maus hin- und herbewegst schneller abläuft ist es aber so eine Konstellation.

  • Danke erstmal für Deine Antwort. Hier der Teil des Scripts, der am meisten Probleme bereitet :

    In Zeile 3 wird nach dem Space ein Statusfenster angezeigt. Das Script soll erst weitermachen, wenn das Fenster geschlossen ist (Wird automatisch von der Anwendung geschlossen). Wenn ich in Zeile 3 ein Sleep setze passiert es aber trotzdem, dass er manchmal schon mit Zeile 8 weitermacht. Das gleiche passiert in Zeile 13. Ist hier ein Sleep drin, wird in manchen Fällen einfach mit Zeile 15 weitergemacht.

    An beiden Stellen kann es passieren, dass die Anwendung auch mal den Status "Keine Rückmeldung" zurückgibt und dann Befehle aus dem Script einfach trotzdem ausgeführt werden, aber keinen Effekt zeigen, wenn die Anwendung wieder aktiv ist.

  • Dein Problem ist vermutlich, dass dein Script zu schnell ist. Oder anders formuliert: Du solltest vor deiner Zeile 3 warten, bis das Fenster erstmalig erscheint. Beispielsweise mit WinWaitActive oder WinWait. Dann sollte dein Code zuverlässig abwarten, bis das Fenster "Datenabgleich" wieder geschlossen ist.

    Zu deiner Zeile 13 lässt sich nichts sagen, außer dass du da halt mal eben gar nicht wartest, was eine Antwort durch das Programm recht schwierig macht.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Zu deiner Zeile 13 lässt sich nichts sagen, außer dass du da halt mal eben gar nicht wartest, was eine Antwort durch das Programm recht schwierig macht.

    Ich habe in Zeile 13 zum Test einen Sleep(300000) reingesetzt. Leider überspringt er den Sleep-Befehl und macht dann mit Zeile 15 weiter. In Zeile 9 bis 11 wird mit der linken Maustaste eine Zeile markiert und dann mit STRG+A sollen dann alle Zeilen markiert werden.

    Dein Problem ist vermutlich, dass dein Script zu schnell ist. Oder anders formuliert: Du solltest vor deiner Zeile 3 warten, bis das Fenster erstmalig erscheint. Beispielsweise mit WinWaitActive oder WinWait. Dann sollte dein Code zuverlässig abwarten, bis das Fenster "Datenabgleich" wieder geschlossen ist.

    Danke für den Tipp, ich werde laufe der nächsten Woche den Befehl WinWaitActive und WinWait testen und dann hier berichten.

  • Also dass er den Sleep Befehl überspringt, das bezweifle ich mal ganz stark (oder du hast nen anderen Code als wir).
    Das hier

    funktioniert einwandfrei.
    Kurze Frage: Warum 5 Minuten Sleep?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Also dass er den Sleep Befehl überspringt, das bezweifle ich mal ganz stark (oder du hast nen anderen Code als wir).

    Ich gehe davon aus, dass er den Sleep-Befehl überspringt, da er den Rechtsklick mit der Maus und 5 mal die Cursor-Taste nach unten nicht drückt. Denn In Zeile 17 endet erstmal das Script. Das heißt er müsste mir dann ja das Kontextmenü anzeigen und ein Menüpunkt müsste ausgewählt sein oder sehe ich das Falsch ?

    Kurze Frage: Warum 5 Minuten Sleep?

    Weil das die maximal gemessene Zeit war, bis in der Tabelle alle Datensätze markiert waren von dem Befehl STRG+A

    Ich habe die Vermutung, dass das AutoIT-Script deswegen nicht sauber läuft, weil die Anwendung immer wieder den Status "Keine Rückmeldung" gibt oder nur die Sanduhr zu sehen ist und sonst weiter keine Aktion. Habt Ihr eventuell ähnliche Erfahrungen gemacht ?

  • Dein Sleep ist auf 5 Minuten bemessen, deshalb fragte ich ja warum 5 Minuten. Aber wenn er es nicht drückt, wieso sollte er den Befehl dann überspringen?
    Kurze Frage am Rande: Wie gut sind deine AutoIt Kenntnisse?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Welche Anwendung soll überhaupt automatisiert werden? Das senden von Tastaturbefehlen und Mausklicks sollte immer die letzte Wahl sein, wenn es wirklich keine Alternative gibt. Viel zuverlässiger arbeiten die "Control*" Funktionen. Außerdem bieten viele Programme Schnittstellen zur Automatisierung (z.B. COM Objekte, API, Kommandozeile). Sollte letzteres vorhanden sein ist das allen anderen Lösungen vorzuziehen, da die Schnittstelle genau hierfür konzipiert wurde, zuverlässig arbeiten sollte und vom Entwickler supportet wird wenn man Fehler findet oder Feature Wünsche hat.

  • Dein Sleep ist auf 5 Minuten bemessen, deshalb fragte ich ja warum 5 Minuten. Aber wenn er es nicht drückt, wieso sollte er den Befehl dann überspringen?

    Ich gehe im Moment davon aus, dass der Sleep-Befehl nicht greift, weil die Anwendung in den Status "Keine Rückmeldung" geht nach dem STRG+A und deswegen das AutoIT Script ins Schwanken kommt. Denn selbst nach mehr als 5 Minuten kommt kein Kontextmenü. Deswegen auch meine Annahme, dass er die Befehle für das Kontextmenü früher oder garnicht ausführt. Mir ist klar, dass ich ein Timing Problem habe, weil das AutoIt Script für die Anwendung zu schnell ist oder weil die Anwendung durch das Blocken (Keine Rückmeldung) das Script ins Schwanken bringt.

    Kurze Frage am Rande: Wie gut sind deine AutoIt Kenntnisse?

    Ich habe AutoIT vor längerer Zeit mal für ein paar kleine Sachen benutzt. Dort waren es nur ein paar Message Boxen und ein paar Befehle die ausgeführt worden sind.

    Welche Anwendung soll überhaupt automatisiert werden?

    JTL-Wawi von JTL-Software.

    Außerdem bieten viele Programme Schnittstellen zur Automatisierung (z.B. COM Objekte, API, Kommandozeile). Sollte letzteres vorhanden sein ist das allen anderen Lösungen vorzuziehen, da die Schnittstelle genau hierfür konzipiert wurde ...

    Für den Vorgang gibt es meines Wissens keine Schnittstelle und auch keinen Automatismus seitens der JTL-Wawi. Letzteres wurde beim Support auch angefragt und dieser hat es verneint.

  • Ich gehe im Moment davon aus, dass der Sleep-Befehl nicht greift, weil die Anwendung in den Status "Keine Rückmeldung" geht nach dem STRG+A und deswegen das AutoIT Script ins Schwanken kommt. Denn selbst nach mehr als 5 Minuten kommt kein Kontextmenü.

    wie soll eine App die mehr als ausgelastet ist noch auf (autimatisierte) Eingaben reagieren? Unmöglich oder zumdinest nicht sinnvoll. Das is als wolltest du dich mit deinem Urgroßvater (sorry) unterhalten, er hat aber sein Hörgerät vergessen auftzuladen. Deshalb taugen hier nach kurzer Wartezeit abfgefeurte Eingaben auch gar nichts, sie erzeugen nur Stress für den Rechner. Deshalb WinWaitActive + evtl. WinWaitClose verwenden oder gleich wieder mit WinWaitActive auf das nächste Fenster warten. Dies ist sicherer als sich darauf zu verlassen, daß das Programm nach X Sekunden bereit für die nächste Anweisung ist. Du hättest bei dem ganzen künstlich aufgebautem Stress schon einen Herzinfarkt oder Nervenzusammenbruch, würdest danach durch einen noch flexibleren und leistungsfägigeren Mitarbeiter ausgetauscht, sprich ein Hardware- tausch oder -aufrüstung wäre auch kein Fehler, zuvor sollte aber ein Spezialist schauen von welchen Aufgaben der Computer so beschäftigt wird, daß er die Routineaufgaben nicht erledigen kann.

    Das ein Fenster existiert heist noch lange nicht, daß es auch aktiv ist. Du solltest besser abfragen ob das nächste Fenster aktiv geworden ist (WinWaitActive) in diesen Zwischenzeiten sollte dein Skript also nicht versuchen etwas einzugeben, die Kunst besteht daran das richtige Timing zu finden. Besser etwas zu lange warten als in einem undefiertem Zustand der fernzusteuernden Anwendung eine Anweisung zu geben, die zu diesem (weil nicht im erwarteten Zustand) etwas anderes bewirkt als beabsichtigt.

    Xorianator: hast du die (mir unbekannte) zu fernsteuernde Anwendung auf deinem Rechner installiert oder bist du per Fernwartungssofware verbunden? Nein, dann kannst du nur davon ausgehen, daß es funktionieren sollte aber nicht behaupten. Der TE ging bei der Skripterstellung auch davon aus, trotzdem geht etwas schief!

    Abhilfe für das Chaos können imho nur WinWait*- in Zusammenarbeit mit Control*-Funktionen schaffen. Ich beneide dich nicht um diese Aufgabe und sehe leider eine große Gefahr, daß die Arbeit irgenwann in der Tonne landet.

    4 Mal editiert, zuletzt von autoBert (9. April 2016 um 23:54)

  • Es wird wieder versucht, an den Symptomen rumzudoktern, anstatt nach den Ursachen zu forschen! Einige User scheinen immer noch nicht begriffen zu haben, dass es nicht darum geht bestehende Scripte zu verschlimmbessern, sondern das EIGENDLICHE Problem des TE zu lösen...


    Zur Frage "Wieso 5 Minuten Sleep" kommt die Antwort:

    Weil das die maximal gemessene Zeit war, bis in der Tabelle alle Datensätze markiert waren von dem Befehl STRG+A

    Damit ist für mich der gesamte Thread schon obsolet...
    Welche "Tabelle" überhaupt bzw. welche Anwendung benötigt 5 Minuten für die Rückantwort eines erfolgreich durchgeführten Ctrl-A? Was soll damit überhaupt bezweckt werden? Wie oder wieso wird die Aktion "Datenabgleich" durchgeführt, was ist das EIGENDLICHE ZIEL?
    Definitiv ist NICHT das Ziel, 5 Minuten auf ein erfolgreiches Ctrl-A zu warten.....

    Wieder mal das klassische X-Y-Problem....und das wird auch nicht mit einigen verlängerten Zeitparametern von bspw. "WinWait" gelöst!

    Ich beneide dich nicht um diese Aufgabe und sehe leider eine große Gefahr, daß die Arbeit irgenwann in der Tonne landet.

    Besser kann man es nicht ausdrücken! :thumbup:


    RWarnecke, beschreibe die Anwendung, den Grund für eine Automation und das Ziel. Erst dann kann man dir wirklich helfen

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (10. April 2016 um 13:43)

  • Hallo zusammen,

    ich danke euch für eure Antworten. Mir ist selber klar, dass die Konstellation und so wie die Anwendung derzeit arbeitet, nicht das gelbe vom Ei ist.

    Zur Erklärung, in der angesprochenen Tabelle sind über 10000 Datensätze drin und mit STRG+A werden alle markiert, weil dann mit dem Menüpunkt aus dem Kontextmenü eine Aktion ausgeführt werden soll auf alle Datensätze.

    Ich selber habe mittlerweile nach noch zusätzlicher Recherche im Internet mich dazu entschieden, das Thema nicht weiter zu verfolgen, da mir die Umgebung wo die Anwendung läuft zu instabil ist. Danke für eure Hinweise, die werde ich auf jeden Fall beim nächsten Mal beachten.

    Habe wieder einiges dazu gelernt.

  • Hi,

    Zur Erklärung, in der angesprochenen Tabelle sind über 10000 Datensätze drin und mit STRG+A werden alle markiert, weil dann mit dem Menüpunkt aus dem Kontextmenü eine Aktion ausgeführt werden soll auf alle Datensätze.

    Um das nochmal deutlich zu machen, wir würden SEHR GERNE WEITERHELFEN!
    Und damit du begreifst um was es geht: Um WELCHE Aktion im Kontextmenü welcher Anwendung geht es? Diese Information gehört in den Startpost! Fehlen grundlegende Informationen, haben die meisten erfahrenen User nicht die Lust und Zeit, innerhalb von Stunden/Tagen die Informationen dem TE aus der Nase zu ziehen, ergo schieben die erfahrenen User den Thread ins Nirvana mit dem Ergebnis, dass die eigentlichen Spezialisten die vielleicht simple LÖSUNG DES PROBLEMS garnicht posten!

    Zum Verständnis, ich konstruiere ein Szenario.
    So sollen bspw. alle doppelten Datensätze einer Tabelle entfernt werden und mit bestehender Datenbank abgeglichen werden:

    DU: Datentabelle alles markieren (5 Minuten), Rechtsklick fürs Kontextmenü, dort Klick 5x runter auf Menüpunkt "Doppelte Einträge entfernen", warten auf Erfolg....1x Klick runter "Abgleichen mit Server", übrig bleiben die "neuen" Datensätze, diese sollen in die DB integriert werden, Kontextmenü 2x runter, Klick "In Datenbank übernehmen"

    AutoIt.de: weiß, dass 5 Minuten auf Ctrl-A warten erstens unproduktiv und zweitens fehleranfällig ist. Daher wird die Tabelle (mittels AutoItscript) im xyz-Format exportiert, die 10000 Datensätze eingelesen, diese wie gewünscht bearbeitet/abgeglichen und diese Tabelle wieder in die Anwendung importiert. Dauert idR nur einige Sekunden, der aktuelle Status ist in der Anwendung bspw. in deren Statusbalken auszulesen.

    Zwei völlig verschiedene Vorgehensweisen. Und selbst wenn die AutoIt.de-Version länger dauert, aber dafür nachvollziehbar fehlerfrei läuft, ist das Projekt "Automatisierung Datenabgleich" erfolgreich abgeschlossen und hilft auch ggf. anderen Usern, welche diese eine spezielle Anwendung automatisieren wollen...

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (10. April 2016 um 14:32)

  • Um das nochmal deutlich zu machen, wir würden SEHR GERNE WEITERHELFEN!

    Das finde ich ja auch gut, danke dafür. Ich werde vielleicht das eine oder andere Mal noch auf eure Hilfe zurückkommen.


    Und damit du begreifst um was es geht: Um WELCHE Aktion im Kontextmenü welcher Anwendung geht es?

    Es geht um die Software JTL-Wawi, wie ich weiter oben schon geschrieben habe und da explizit um die Angebotsverwaltung für Amazon. Dazu muss erst ein Abgleich mit Amazon durchgeführt werden. Danach alle Datensätze der Angebotsverwaltung markiert werden und dann über das Kontextmenü der neue maximale Warenbestand in der JTL-Wawi gesetzt werden. Das als kurze Erklärung.

    Ich habe mich dagegen entschieden, dass Thema weiterzuverfolgen, da selbst ein einfacher manueller Mausklick in die Tabelle der Angebotsverwaltung um einen Datensatz auszuwählen zwischen sofort und bis zu einer Minute dauern kann. Dadurch das das alles so instabil läuft, ist mir das Risiko zu groß, dass das AutoIT Script nach längerer Laufzeit irgendein Bockmist baut und ich dafür verantwortlich gemacht werde.

    Nochmals danke für die Hilfe und die vielen Antworten.

  • Die Frage ist, ob du diese Datensätze, die JTL-Wawi ansteuert, auch selbst irgendwie ansteuern kannst (rein vom Code her - Arbeitet das mit einer Datenbank? Oder wie wird es gespeichert?)
    Dann könntest du besagte Aktion auch per Code lösen, alles im Hintergrund, ohne jegliche Fenster zu sehen geschweige denn warten zu müssen.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Falls diese AddOn nicht das hält was es verspricht:

    Mit eazyAuction wird das Handeln auf Amazon und eBay direkt aus unserer Warenwirtschaft zum Kinderspiel.Angebotserstellung, -überwachung und -abwicklung werden direkt in JTL-Wawi bewerkstelligt. Mit Hilfe eines integrierten Hintergrunddienstes kann der Abgleich zu Ihren Marktplätzen komplett automatisiert durchgeführt werden. Dabei ist eazyAuction auf große Angebotsvolumen bestens vorbereitet.

    kann doch spätestens mit diesem Wissen:

    Eingesetzt wird JTL-Wawi bereits von vielen Tausend kleinen und mittleren Unternehmen zwischen 1-100 Mitarbeitern und einem Sendungsaufkommen von bis zu 50.000 Sendungen im Monat. Dank neuster .Net Technologie sowie einer leistungsstarken Microsoft SQL Server Datenbank ist JTL-Wawi auf große Datenvolumina und gleichzeitige Nutzung beliebig vieler Ihrer Mitarbeiter bestens vorbereitet.

    und einer Analye von JTL-Wawi und deren eingestzten Module und des Datenbankdesigns zumindest ein Spezilist den Datenabgleich programmieren.

    3 Mal editiert, zuletzt von autoBert (10. April 2016 um 16:54)