首页 > 解决方案 > 记事本示例与“现实生活”示例的 PyWinAuto 自动化

问题描述

我需要做的是单击一个菜单项并加载一个文件。喜欢有据可查的记事本示例,它是这样的......

from pywinauto import Application

app = Application (backend="uia").start("notepad.exe")
app.UntitledNotepad.menu_select("File->SaveAs")
Sub=app.UntitledNotepad.child_window(title_re="Save As", class_name="#32770")
Sub.FileNameCombo.type_keys("temp_12345.txt")    

效果很好。但是,当我为我的应用程序调整此代码并尝试运行 menu_select 时,会引发“AttributeError”异常。我相当确定这是因为我的应用程序中的菜单条属于 uia_controls.MenuWrapper 类型,并且不支持 menu_select

我尝试了一种不同的方法 - 如下所示

app = Application(backend='uia').start(r"C:\Program Files (x86)\myapplication.exe")
time.sleep(1)
win = app.MyApplication
win['File'].select() # exapnd submenu
#Added AFTER I asked the question - i finally worked it out...
sub = win['File']
loadConfigMenuItem = (sub.children()[0])
loadConfigMenuItem.click_input() #print statement is executed
#loadConfigMenuItem.select() #print statement is NOT executed until I close the dialog box
print("If this prints, then I am a happy Man")

这将展开文件菜单。但是,从此时起,我无法访问此菜单的子元素。有什么想法吗???

标签: pythonpywinauto

解决方案


我回答了我自己的问题。看代码清单,特别是

loadConfigMenuItem.click_input()

这里的关键是单击菜单项并继续执行,从而使我能够获得对单击菜单项后出现的对话框的引用

相反,如果你要使用

loadConfigMenuItem.select()

然后在此调用之后不执行任何代码,直到对话框关闭


推荐阅读