news 2026/4/23 10:43:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)

1.简介

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

2.什么是级联菜单?

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

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

  1. ‌层级结构‌

    • 主菜单项触发后展开子菜单,子菜单可继续延伸更深层级(如/* by 01022.hk - online tools website : 01022.hk/zh/formatcsql.html */ 文件->另存为->PDF格式
    • 通过符号/* by 01022.hk - online tools website : 01022.hk/zh/formatcsql.html */ ->表示层级路径(例如帮助->关于记事本
  2. ‌交互方式‌

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

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

    • 应用程序主菜单栏(如记事本的“文件”“编辑”“帮助”等)
    • 右键上下文菜单(如桌面右键菜单的“新建->文件夹”)
‌2.1与普通菜单的差异‌
‌特性‌‌级联菜单‌‌普通菜单‌
层级结构多级嵌套单层平铺
交互复杂度需逐级展开直接点击选项
典型控件类型MenuBar+MenuItemButtonListBox

3.操作方法

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

4.项目实战

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

4.1多级路径定位(menu_select()

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

4.1.1代码设计

4.1.2参考代码
#-*- coding:utf-8 -*-#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行#2.注释:包括记录创建时间,创建人,项目名称。'''Created on 2025-04-25 @author: 北京-宏哥 北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!) Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)'''#3.导入模块frompywinautoimportApplicationimporttime 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)')
4.1.3运行代码

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

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

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

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

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

4.1.1代码设计

4.1.2参考代码
#-*- coding:utf-8 -*-#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行#2.注释:包括记录创建时间,创建人,项目名称。'''Created on 2025-04-25 @author: 北京-宏哥 北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!) Project: PC端自动化测试实战教程-9-pywinauto操作应用程序窗口的级联菜单(详细教程)'''#3.导入模块frompywinautoimportApplicationimporttime 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)')
4.1.3运行代码

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

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

5.小结

5.1注意事项‌
  1. ‌控件识别‌
    使用Inspect.exeAccessibility Insights工具确认菜单项的titlecontrol_type属性
  2. ‌延迟处理‌
    部分菜单加载需要时间,可通过time.sleep(0.5)wait()方法增加等待。
  3. ‌Backend选择‌
    传统 Win32 应用使用backend="win32",现代应用(如 WPF、UWP)使用backend="uia"

通过上述方法,可灵活实现多层级联菜单的自动化操作。实际应用中需结合控件属性调试,确保路径准确

好了,时间不早了今天就分享到这里,感谢你耐心地阅读!




感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角 “推荐” 按钮,您的将是我最大的写作动力!另外您也可以选择 【关注我】 ,可以很方便找到我!
本文版权归作者和博客园共有,来源网址: https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!

公众号(关注宏哥) 微信群(扫码进群) 客服微信

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:16:11

中国外卖包装废弃物高分辨率网格数据集(2018)

D209 中国外卖包装废弃物高分辨率网格数据集(2018)数据简介今天我们分享的数据是中国外卖包装废弃物高分辨率网格数据集,该数据集包含中国2018年1平方公里范围内产生的外卖包装废弃物总量的栅格数据以及各城市详细的外卖包装废弃物核算结果表格,我们将中…

作者头像 李华
网站建设 2026/4/23 9:16:30

YOLOv13 的改良池化设计:SimSPPF 与多尺度信息建模

SimSPPF SimConv(Simple Convolution)结构原理详解 文章目录 SimSPPF SimConv(Simple Convolution)结构原理详解 引言 SimConv的设计背景 传统卷积操作的挑战 组合式设计的必要性 SimConv的设计理念 SimConv的核心组件分析 1. 卷积层(Convolution Layer) 2. 批量归一化层…

作者头像 李华
网站建设 2026/4/23 9:16:58

YOLOv8-Pose 在 RK3588 上的 ONNX 模型转换与高效部署实践

文末含资料链接和视频讲解! 文章目录 一、模型导出ONNX结构对比:为何要“化繁为简”? 🤔 二、YOLOv8-Pose导出ONNX的代码修改 💻 1. 步骤一:修改`ultralytics/nn/modules/head.py` 中的 `Detect` 模块 一、模型导出ONNX结构对比:为何要“化繁为简”? 🤔 二、YOLOv…

作者头像 李华
网站建设 2026/4/23 7:43:50

RAG系统评估实战指南:从痛点识别到性能优化

RAG系统评估实战指南:从痛点识别到性能优化 【免费下载链接】ragas Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines 项目地址: https://gitcode.com/gh_mirrors/ra/ragas 你的RAG系统真的可靠吗?让Ragas评估框架告…

作者头像 李华
网站建设 2026/4/23 9:17:32

C盘里的软件怎么迁移到D盘其他盘,不重装且能正常使用?

theme: default themeName: 默认主题将软件从c盘移动到其他盘例如d盘可能看起来有点复杂,但为了释放主盘空间经常是必要的,你不必卸载并重新安装所有东西,本指南解释了安全移动程序的简单方法,我们将涵盖windows内置工具,第三方软件选项,以及为高级用户准备的手动步骤,目标是让…

作者头像 李华
网站建设 2026/4/23 9:17:45

淘宝/天猫获得淘宝商品详情高级版 API 返回值说明

item_get_pro-获得淘宝商品详情高级版taobao.item_get_pro公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,i…

作者头像 李华