pywinauto访问嵌套子菜单报AttributeError错误如何解决
pywinauto层级嵌套子菜单点击报错解决方案
报错原因
该AttributeError是因为item_by_path未匹配到对应路径的菜单项,返回了None值,后续调用属性时触发报错。核心原因是多数Windows应用的子菜单仅在父级菜单展开后才会加载到UIA控件树中,直接调用全路径的菜单项查找方法无法识别未加载的子项,也可能是路径分隔符、菜单项名称识别存在误差。
可直接使用的修正代码
from pywinauto import Application import time # 连接目标应用 app = Application(backend='uia').connect(path="PortfolioPerformance.exe") main_window = app.Dialog menu_bar = main_window.Anwendungsmenü # 逐层展开菜单,每步留短暂加载时间 menu_bar.item_by_path('Datei').click_input() time.sleep(0.2) menu_bar.item_by_path('Datei->Importieren').click_input() time.sleep(0.2) menu_bar.item_by_path('Datei->Importieren->Vorlagen').click_input() time.sleep(0.2) # 点击目标子菜单 menu_bar.item_by_path('Datei->Importieren->Vorlagen->comdirect Musterdepot').click_input()
可选优化方案
- 如果路径用
->匹配失败,可以切换分隔符为/,调用时传入path参数指定分隔符:menu_bar.item_by_path('Datei/Importieren/Vorlagen/comdirect Musterdepot', path='/').click_input() - 模拟鼠标点击容易受高DPI、窗口遮挡影响,可将
click_input()替换为invoke(),直接调用控件的触发接口,稳定性更高:menu_bar.item_by_path('Datei').invoke() - 如果仍匹配失败,可打印控件树核对菜单项的准确名称:
核对输出中每个菜单项的# 展开到对应层级菜单后运行,打印深度为5的所有控件信息 menu_bar.print_control_identifiers(depth=5)text属性,确保路径中使用的名称和控件实际名称完全一致。
内容的提问来源于stack exchange,提问作者Daniel Quantil
相关产品推荐
相关产品推荐

