我正在尝试使用pywinauto,我认为一个简单的项目就是让它自动执行Windows绘画。事实证明这比我预期的要难。

我想尝试打开此处显示的“属性”菜单项:

python - 使用Windows Paint进行pywinauto测试-LMLPHP

到目前为止,我有以下代码:

    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()


该代码将连接到现有的打开的“画图”窗口并打开文件选项卡。从那里我不确定如何实际单击“属性”。我认为诸如“ dlg.Properties.click()”之类的简单内容可能会起作用,但这给了我ElementNotFound错误。

我发现github页上有一些用于Paint Automation的示例代码:
https://github.com/pywinauto/pywinauto/blob/master/examples/mspaint.py

通过查看示例中的第32行,我可以看到他们可以通过调用childwindow并调用它来访问菜单上的项目。 github示例中的第32行说:

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 =“属性”,control_type =“ MenuItem”)


如何使用以上信息找出如何正确访问菜单项?

最佳答案

我发现我可以让pywinauto在“属性”菜单项上单击以下行:

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


我仍然不明白“调用”是什么意思,因为在任何文档中似乎都没有描述。

关于python - 使用Windows Paint进行pywinauto测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43647596/

10-12 16:54