Тестирование pywinauto с помощью краски Windows
Я пытаюсь поиграть с pywinauto, и я подумал, что одним из простых проектов будет автоматизировать рисование Windows. Это оказалось сложнее, чем я ожидал.
Я хочу попробовать открыть пункт меню Свойства, показанный здесь:
Пока у меня есть этот код:
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()
Этот код подключается к существующему открытому окну Paint и открывает вкладку файла. Оттуда я не уверен, как на самом деле нажать на "Свойства". Я думал, что что-то простое, например, "dlg.Properties.click()" может работать, но это дает мне ошибку ElementNotFound.
Я обнаружил, что на странице github есть пример кода для автоматизации Paint здесь: https://github.com/pywinauto/pywinauto/blob/master/examples/mspaint.py
Глядя на строку 32 в примере, я вижу, что они могут получить доступ к элементам меню, вызвав childwindow и вызвав его. Строка 32 в примере GitHub говорит это:
dlg.child_window(title='Open', control_type='MenuItem', found_index=0).invoke()
Я не совсем понимаю это. Это говорит о том, что нажатие на вкладку файла открывает новое "дочернее окно"? Другой вопрос, который у меня есть, что делает вызов по сравнению с нажатием на что-то?
Я пытался использовать код из примера GitHub, но я не уверен, как заставить его работать. Пример github запускает опцию "Открыть" на вкладке файла.
Я попытался адаптировать строку из github и использовал "Свойства" вместо "Открыть" следующим образом:
dlg.child_window(title='Properties', control_type='MenuItem', found_index=0).invoke()
Это на самом деле вызывает сбой Paint, когда я пытаюсь это сделать.
Пункт меню "Свойства" появляется в списке элементов управления, когда я печатаю идентификаторы элемента управления из pywinauto. Это выглядит так:
MenuItem - 'Свойства' (L1, T476, R254, B531) ['PropertiesMenuItem', 'MenuItem6', 'Properties'] child_window(title="Properties", control_type="MenuItem")
Как я могу использовать информацию выше, чтобы выяснить, как правильно получить доступ к пункту меню?
1 ответ
Я обнаружил, что мне удалось заставить pywinauto щелкнуть пункт меню "Свойства" со следующей строкой:
dlg.child_window(title="Properties", control_type="MenuItem").invoke()
Я до сих пор не понимаю, для чего предназначен "invoke", так как это, кажется, не описано ни в одной из документов.