找回密码
 立即注册
首页 业界区 业界 PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的 ...

PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)

扈季雅 2026-1-19 13:40:02
1.简介

其实前边关于这一知识点也有涉及和提到过,只是当时没有说,不信宏哥提一下,你想一想之前宏哥介绍的记事本输入内容,然后操作记事本的文件->另存为,这里的另存为就是文件的级联菜单。今天宏哥就给小伙伴或者童鞋们来讲解和分享一下这个知识点。
2.什么是级联菜单?

2.1级联菜单的定义与特点‌

‌级联菜单‌(Cascade Menu)是一种‌多层级嵌套的菜单结构‌,通过逐级展开的方式呈现选项13。其核心特点包括:

  • ‌层级结构‌

    • 主菜单项触发后展开子菜单,子菜单可继续延伸更深层级(如 文件->另存为->DF格式)。
    • 通过符号 -> 表示层级路径(例如 帮助->关于记事本)。

  • ‌交互方式‌

    • 用户需逐级点击或悬停触发下一级菜单显示。
    • 在自动化操作中,需按层级路径精准定位控件(如 menu_select("一级->二级->三级"))。

  • ‌控件类型‌

    • 常见控件类型为 MenuBar(菜单栏)、MenuItem(菜单项)和 Menu(子菜单)。
    • 通过 child_window() 方法可逐层定位到具体控件(例如先定位“编辑”再找“时间/日期”)。

  • ‌典型应用场景‌

    • 应用程序主菜单栏(如记事本的“文件”“编辑”“帮助”等)。
    • 右键上下文菜单(如桌面右键菜单的“新建->文件夹”)。

‌2.1与普通菜单的差异‌

‌特性‌‌级联菜单‌‌普通菜单‌层级结构多级嵌套单层平铺交互复杂度需逐级展开直接点击选项典型控件类型MenuBar + MenuItemButton 或 ListBox3.操作方法

pywinauto提供了操作级联菜单的方法,使用menu_select()方法就可以操作级联菜单控件。
4.项目实战

因为宏哥的系统是Windows11,所以这里为了减少不必要的麻烦主要还是通过Windows安装的Notepad++编辑器进行演示和实践。这里宏哥介绍两种常见的定位级联菜单控件的方法。
4.1多级路径定位(menu_select())

1.这种用 ->分隔多级菜单项,适用于静态菜单。Notepad++编辑器:文件(F)->新建(N),然后新建一个标签页,如下图所示:
1.gif

4.1.1代码设计

2.png

4.1.2参考代码
  1. # -*- coding:utf-8 -*-
  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3. # 2.注释:包括记录创建时间,创建人,项目名称。
  4. '''
  5. Created on 2025-04-25
  6. @author: 北京-宏哥
  7. 北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
  8. Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)
  9. '''
  10. # 3.导入模块
  11. from pywinauto import Application
  12. import time
  13. app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
  14. win = app.window(title='新文件 1 - Notepad++')
  15. # win.print_ctrl_ids()
  16. win.menu_select('文件(F) -> 新建(N)')
复制代码
4.1.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
3.png

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

4.2逐层点击控件(动态菜单处理)

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

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

4.1.1代码设计

7.png

4.1.2参考代码
  1. # -*- coding:utf-8 -*-
  2. # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3. # 2.注释:包括记录创建时间,创建人,项目名称。
  4. '''
  5. Created on 2025-04-25
  6. @author: 北京-宏哥
  7. 北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
  8. Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)
  9. '''
  10. # 3.导入模块
  11. from pywinauto import Application
  12. import time
  13. app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
  14. win = app.window(title='新文件 1 - Notepad++')
  15. # win.print_ctrl_ids()
  16. # 点击一级菜单并选择子项
  17. win.child_window(title="文件(F)", control_type="MenuItem")
  18. # 操作动态加载的菜单
  19. win.menu_select('文件(F) -> 新建(N)')
复制代码
4.1.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
8.png

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

 5.小结

5.1注意事项‌


  • ‌控件识别‌
    使用 Inspect.exe 或 Accessibility Insights 工具确认菜单项的 title 和 control_type 属性。
  • ‌延迟处理‌
    部分菜单加载需要时间,可通过 time.sleep(0.5) 或 wait() 方法增加等待。
  • ‌Backend选择‌
    传统 Win32 应用使用 backend="win32",现代应用(如 WPF、UWP)使用 backend="uia"。
通过上述方法,可灵活实现多层级联菜单的自动化操作。实际应用中需结合控件属性调试,确保路径准确。
 好了,时间不早了今天就分享到这里,感谢你耐心地阅读!
                                                公众号(关注宏哥)                                                                                                                           微信群(扫码进群)                                                                                                                                                          客服微信               
               
10.png
               
11.png
               
12.png

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2026-1-24 02:02:24

举报

您需要登录后才可以回帖 登录 | 立即注册