2017-04-27 6 views
1

Ich versuche mit pywinauto herumzuspielen und ich dachte, ein einfaches Projekt wäre, es Windows-Farbe zu automatisieren. Das stellte sich als schwieriger heraus als erwartet.pywinauto testen mit Windows malen

möchte ich versuchen das Menüelement Eigenschaften hier gezeigt zu öffnen:

Properties menu item

Bisher habe ich diesen Code:

from pywinauto.application import Application 
import pywinauto 

app = Application(backend='uia') 

p = pywinauto.findwindows.find_element(title_re=".* - Paint") 

app.connect(handle=p.handle) 
dlg = app.window(title_re=".* - Paint") 

dlg.File_tab.click() 

Dieser Code eine Verbindung zu einem vorhandenen offenen Malfenster und öffnet die Registerkarte Datei. Von dort bin ich nicht sicher, wie man tatsächlich auf "Eigenschaften" klickt. Ich dachte, etwas wie "dlg.Properties.click()" könnte funktionieren, aber das gibt mir einen ElementNotFound-Fehler.

fand ich, dass die Github Seite für Paint Automation hier einige Beispiel-Code hat: https://github.com/pywinauto/pywinauto/blob/master/examples/mspaint.py

Mit Blick auf Linie 32 in dem Beispiel kann ich sehen, dass sie auf der Speisekarte es durch den Aufruf Child und Aufrufen zugreifen können . Zeile 32 in dem GitHub Beispiel sagt das:

dlg.child_window(title='Open', control_type='MenuItem', found_index=0).invoke() 

Ich verstehe das nicht vollständig. Sagt das, dass das Klicken auf die Registerkarte "Datei" ein neues "untergeordnetes Fenster" öffnet? Die andere Frage, die ich habe, ist, was macht das Aufrufen gegenüber dem Klicken auf etwas?

Ich habe versucht, den Code aus dem Github-Beispiel zu verwenden, aber ich bin mir nicht sicher, wie es funktioniert. Das github-Beispiel führt die Option "Öffnen" aus der Registerkarte "Datei" aus.

Ich habe versucht, die Linie von Github und verwendet „Eigenschaften“ anstelle von „Open“ wie folgt anzupassen:

dlg.child_window(title='Properties', control_type='MenuItem', found_index=0).invoke() 

, die tatsächlich Farbe zum Absturz bringt, wenn ich das versuchen.

Der Menüeintrag "Eigenschaften" wird in der Steuereliste angezeigt, wenn ich die Steuerkennungen von pywinauto ausdrucke. Es sieht wie folgt aus:

MenuItem - 'Eigenschaften' (L1, T476, R254, B531) [ 'PropertiesMenuItem', 'MenuItem6', 'Eigenschaften'] child_window (title = "Eigenschaften", CONTROL_TYPE = "MenuItem")

Wie kann ich anhand der obigen Informationen herausfinden, wie der Menüeintrag korrekt aufgerufen wird?

Antwort

1

fand ich, dass ich in der Lage war, auf „Eigenschaften“ Menüpunkt mit der folgenden Zeile haben pywinauto klicken:

dlg.child_window(title="Properties", control_type="MenuItem").invoke() 

Ich verstehe immer noch nicht, was die „beruft“ für ist, da dies nicht scheinen in irgendeiner Dokumentation beschrieben zu sein.

+0

'invoke' verwendet das so genannte' InvokePattern', das eine Standardaktion für das Steuerelement darstellt. Wir haben uns entschieden, seinen Namen als "Aufruf" zu behalten, weil er eine andere Bedeutung haben könnte. Wir verwenden nur die "Klick" -Methode als Alias ​​für die Schaltflächensteuerung. –