其实前边关于这一知识点也有涉及和提到过,只是当时没有说,不信宏哥提一下,你想一想之前宏哥介绍的记事本输入内容,然后操作记事本的文件->另存为,这里的另存为就是文件的级联菜单。今天宏哥就给小伙伴或者童鞋们来讲解和分享一下这个知识点。
级联菜单(Cascade Menu)是一种多层级嵌套的菜单结构,通过逐级展开的方式呈现选项 13。其核心特点包括:
文件->另存为->PDF格式)。-> 表示层级路径(例如 帮助->关于记事本)。menu_select("一级->二级->三级"))。MenuBar(菜单栏)、MenuItem(菜单项)和 Menu(子菜单)。child_window() 方法可逐层定位到具体控件(例如先定位 “编辑” 再找 “时间/日期”)。| 特性 | 级联菜单 | 普通菜单 |
|---|---|---|
| 层级结构 | 多级嵌套 | 单层平铺 |
| 交互复杂度 | 需逐级展开 | 直接点击选项 |
| 典型控件类型 |
MenuBar+MenuItem
|
Button或ListBox
|
pywinauto 提供了操作级联菜单的方法,使用 menu_select() 方法就可以操作级联菜单控件。
因为宏哥的系统是 Windows11,所以这里为了减少不必要的麻烦主要还是通过 Windows 安装的 Notepad++ 编辑器进行演示和实践。这里宏哥介绍两种常见的定位级联菜单控件的方法。
menu_select())1.这种用 ->分隔多级菜单项,适用于静态菜单。Notepad++ 编辑器:文件 (F)->新建 (N),然后新建一个标签页,如下图所示:


# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2026-01-09
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)
'''
# 3.导入模块
from pywinauto import Application
import time
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
win = app.window(title='新文件 1 - Notepad++')
# win.print_ctrl_ids()
win.menu_select('文件(F) -> 新建(N)')
1.运行代码,右键 Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的动作(启动 Notepad++ 编辑器,然后新建了一个 Notepad++ 编辑器标签页【新文件 2】)。如下图所示:

1.使用 child_window() 逐级定位。同样的操作不同的定位方法,Notepad++ 编辑器:文件 (F)->新建 (N),然后新建一个标签页,如下图所示:

2.按照前边宏哥讲解的方法,查看控件的结构树,宏哥这里为了让大家看清楚使用代码打印出来,然后找到文件 (F),这就是我们要定位的,如下图所示:


# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2026-01-09
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)
'''
# 3.导入模块
from pywinauto import Application
import time
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
win = app.window(title='新文件 1 - Notepad++')
# win.print_ctrl_ids()
# 点击一级菜单并选择子项
win.child_window(title="文件(F)", control_type="MenuItem")
# 操作动态加载的菜单
win.menu_select('文件(F) -> 新建(N)')
1.运行代码,右键 Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的动作(启动 otepad++ 编辑器:文件 (F)->新建 (N),然后新建一个标签页)。如下图所示:

Inspect.exe 或 Accessibility Insights 工具确认菜单项的 title 和 control_type 属性。time.sleep(0.5) 或 wait() 方法增加等待。backend="win32",现代应用(如 WPF、UWP)使用 backend="uia"。通过上述方法,可灵活实现多层级联菜单的自动化操作。实际应用中需结合控件属性调试,确保路径准确。
好了,时间不早了今天就分享到这里,感谢你耐心地阅读!