pywinauto combobox Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Hallo,

ich möchte mit pywinauto eine Anwendung starten, buttons betätigen und was schreiben sowie anklicken.
Problem!
z.B. Beim Editor funktioniert alles.
Aber bei einer anderen Oberfläche nicht.
Das wäre mein Code für Notepad

Code: Alles auswählen

from pywinauto import application

app = application.Application.start("notepad.exe")

app.Notepad

app.Notepad.MenuSelect("Datei->Speichernunter")
app.Speichernunter.SpeicherninComboBox.Select("Desktop")
app.Speichernunter.DateinameEdit.SetEditText("dfgsdfg.txt")
app.Speichernunter.CodierungComboBox.Select("Unicode")
#app.Speichernunter.DateitypComboBox.Select("Alle Dateien")

app.SpeichernUnter.Speichern.Click()
Weiß wer warum es mit dem editor funktioniert und nicht mit anderen Oberflächen.
Meine Vermutung ist das es keine Windowsoberfläche ist und das irgendwer programmiert hat

Vielleicht weiß ja jemand was.

Danke
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Campionissimo hat geschrieben:Meine Vermutung ist das es keine Windowsoberfläche ist und das irgendwer programmiert hat
Das Programm das du bedienen willst? Wäre es dann vielleicht hilfreich uns das zu nennen?
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Ja es ist kein Windowsprogramm, sondern von einem programmiert worden. Das kennt keiner!
Aber wie könnte ich es schaffen diese buttons zu drücken oder was zu schreiben.

Gruß
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Campionissimo hat geschrieben:Ja es ist kein Windowsprogramm, sondern von einem programmiert worden
Ich verstehe jedes einzelne Wort, den Satz aber nicht.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Das Programm das ich bedienen will ist kein Windowsprogramm.
Also von jemanden programmiert worden.
Also kein öffentliches Tool.
Besser ;)
Trotzdem noch die Frage wie ich es fernsteuern kann.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Logisches Resultat also:
- Windowsprogramme werden nicht programmiert (und fallen vom Himmel)
- Alles was von "jemanden" programmiert wurde ist nicht öffentlich
- oder alles was kein Windowsprogramm ist, ist nicht öffentlich

Ich bin verwirrt. :?

So zurück zum Thema welches Programm willst du steuern, läuft dieses überhaupt unter Windows(ist schließlich die Bedingung von pywinauto) und eventuell könntest du mal beschreiben was du dort nicht machen kannst bzw. was für ein Fehler ausgegeben wird.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Ja logisch fallen die vom Himmel.
ich mein eigentlich das hat jemand programmiert für ein bestimmtes Produkt, dass nicht für jedermann zugänglich ist.

Natürlich sind viele Sachen öffentlich, aber auch manche nicht;)

Aber egal.

Es läuft unter windows. Wenn ich den Code oben anpasse funktioniert es einfach nicht und gibt diese Fehlermeldung zurück:

Code: Alles auswählen

Traceback (most recent call last):
AttributeError: 'function' object has no attribute 'delete'
und Delete heißt der Button
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Du solltest deine Post selber noch einmal lesen und dich fragen, ob sie verständlich sind und genügend Information enthalten, um dir zu helfen ;-) Zeige doch einfach den richtigen Code und nicht irgend welche Beispiele, sonst endet das nur in überflüssigen Spekulationen.

Sebastian
Das Leben ist wie ein Tennisball.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Das ist der code da oben, nur andere boxennamen.

Code: Alles auswählen


app.Connect.Delete.Click()

Delete ist ein Button

Jetzt die Fehlermeldung

Code: Alles auswählen

Traceback (most recent call last):
AttributeError: 'function' object has no attribute 'delete'
und Delete heißt der Button

Da wahrscheinlich der button von der Oberfläche nicht richtig mit dem Code verknüpft ist kann den anscheinend nicht richtig ansprechen
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Wenn du deine Fehlermeldung richtig lesen würdest, würdest du feststellen, dass sie fogendes sagt: "Das Funktionsobjekt hat kein Attribut 'delete'".
Demnach ist "Connect" eine Funktion die man wahrscheinlich in irgendeiner Form aufrufen müsste.

Warum machst du es allen anderen und auch dir so schwer und zeigst nicht deinen kompletten Code? In deinem "Code da oben" sehe ich keinen Aufruf von Connect.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Also das ist mein Code:

Code: Alles auswählen

from pywinauto import application

app = application.Application()
app.start("FuTe.exe")

app.FuTe

app.FuTe.MenuSelect("FuTe->Connect")
app.Connect.PortComboBox.Select("1")
app.Connect.BaudrateComboBox.Select("115200")
app.Connect.LogfilenameEdit.SetEditText("C:\ewrewrwer")
app.Connect.ConnectClick()
- Das Programm heisst FuTe
- Ich öffne die Datei und das Funktioniert ;)
- Dann wähle ich im Menü Connect aus und das funktioniert auch
- Jetzt kommt ein neues Fenster Connect
Wo ich was einstellen kann
- Den Port auf 1
- Die Baudrate auf 115200
- Und wo ich die Datei hinspeichern möchte
- Dann noch den Button connect für die Verbindung
Fehlermeldung für den Button Connect

Code: Alles auswählen

Traceback (most recent call last):
AttributeError: 'function' object has no attribute 'Connect'
Danke
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich würde jetzt einfach mal vermuten das geht so nicht, weil "Connect", "Connect_", "connect" und "connect_" von pywinauto selbst vorbelegt sind, nicht überschrieben werden und daher nicht als Attribute gesetzt werden können.

Versuch mal Connect als Keyword zunutzen, sprich app["Connect"].PortComboBox.Select("1"). Ansonsten musst du die Auswahl noch etwas weiter eingrenzen. Lies hiermal nach http://pywinauto.googlecode.com/hg/pywi ... ation.html
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@Campionissimo: Heisst das jetzt, dass der Fehler erst bei der letzten Zeile auftritt!? Kann es sein, dass `Connect` im letzten Schritt nicht eindeutig ist und Du vielleicht besser `ConnectButton` schreiben solltest?
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

@Xynon1
Vielen Dank. Das hat mir sehr geholfen mit den ["..."]
Tatsächlich ist Connect schon vorbelegt gewesen.
Coole Sache. Das Fernsteuern funzt. Bin jetzt glücklich, dass jemand das gewusst hat.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Ach man doch noch ein Problem;(

Code: Alles auswählen

app = application.Application()
app.start("FuTe.exe")
app.FuTe

app.FuTe.MenuSelect("FuTe->Connect")

app["Connect"].PortComboBox.Select("3")
app["Connect"].BaudrateComboBox.Select("115200")
app["Connect"].Logtofile.Click()
a = int(time.strftime("%d%m%Y%H%M%S"))     
app["Connect"].logfilenameEdit.SetEditText("%s Daten" %a )
app["Connect"]["Select..."].Click()
app.Speichernunter.speicherninComboBox.Select("Daten")
#app.Speichernunter.DateitypComboBox.Select("TXT")
#app.Speichernunter.Speichern.Click()
#app["Connect"].Connect.Click()
      
Und zwar, ich möchte wenn ich im Dialogfeld 'Speichern unter' bin.
Bei 'Speichern in' im Desktop den Ordner 'Daten' auswählen.

aber irgendwie geht das nicht oder ich habs nicht gefunden. Ich kann nur statt der Daten ne 0 eingeben und das Verzeichnis wird gewechselt und das wars leider.

Fehlermeldung:

Code: Alles auswählen

ValueError: list.index(x): x not in list
hoffentlich weiss wieder jemand was
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Spar dir diese kurzen Tracebacks entweder postest du den ganzen oder du lässt es. Aber ich will dir keinen Vorwurf machen, das die Fehlermeldungen in pywinauto "detaliert" sind ist mir auch schon aufgefallen.
Der Fehler besagt aber schlicht das es kein Verzeichnis "Daten" in der ComboBox gibt, den musst du schlißlich auf dem Desktop suchen. - Also in dem Fenster rechts daneben. Ich würde empfehlen bei "Dateiname: " einfach den kompletten Pfad mit Dateinamen anzugeben, statt sich durch das Menü virtuell zu klicken. Sollte schließlich auch funktionieren.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Stimmt, das mit dem Pfad angeben passt. Dann brauch ich wirklich nicht so viel klicken ;)
Aber es zu wissen wäre auch gut.
Und das mit der gekürzten Fehlermeldung.
Das war wirklich nur ein 4 zeiler.
Und die Zeilen die ich nicht gepostet sagen nur aus wo der Fehler war. Wollte keinen zu nahe treten.
Aber Danke für die zwei hilfreichen AntwortenFunzt jetz.
Wieder Danke an Xynon1
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Campionissimo hat geschrieben:Und die Zeilen die ich nicht gepostet sagen nur aus wo der Fehler war.
Das ist, neben der Fehlermeldung, die wichtigste Information ;-) Zumal man bei deinen Beiträgen öfter mal rätseln musste, in welcher Zeile der Fehler auftritt. Du magst mit den vollständigen Tracebacks im Moment noch nicht viel anfangen können, für andere Benutzer sind sie aber eine große Hilfe.
Das Leben ist wie ein Tennisball.
Antworten