乐于分享
好东西不私藏

PC端自动化测试实战教程-16-pywinauto操作应用程序窗口的组合框控件(ComboBox)和下拉选择框 – 下篇(详细教程)

PC端自动化测试实战教程-16-pywinauto操作应用程序窗口的组合框控件(ComboBox)和下拉选择框 – 下篇(详细教程)

现在努力学习的自己。

将来的你一定会感谢,

美好四月再见
五月你好

关注北京宏哥,不迷路,提前解锁更多干货

这是我的第492篇原创

作者:北京宏哥


感谢您抽出

.

.

阅读本文

哈喽!很高兴和大家2026年第 7 次见面

温馨提示:雨天来袭, 记得带上伞和外套, 小心路滑, 愿你的每一步都稳稳当当

1.简介

上一篇介绍了一种方法来操作应用程序窗口的组合框控件(ComboBox)和下拉选择框,今天宏哥来给小伙伴或者童鞋们介绍另一种方法。

2.什么是组合框控件(ComboBox)?

百度百科是这么定义的:ComboBox是图形用户界面中组合文本框与下拉列表框的复合控件,用户既可选择预设项也可手动输入文本。该控件默认隐藏下拉列表,通过单击箭头展开,支持绑定数据源字段或固定值列表,并允许配置自动补全、唯一性验证等交互功能。在Windows窗体中,ComboBox通过SelectedIndex属性返回选中项索引值(未选时为-1),SelectedItem属性获取选中项对象,Count属性反映列表项总数。

3.组合控件与下拉列表的区别

组合框控件与传统的下拉列表(Drop-Down List)最主要的区别在于用户是否可以输入文本。下拉列表通常只允许用户从列表中选择一个已存在的选项,而组合框则允许用户在选择现有选项之外,还可以输入自己的值。

此外,组合框由于结合了文本框的输入功能,使得它在空间利用上更为高效,能够减少界面的复杂度,同时提供更好的用户体验。

4.操作方法

1.pywinauto的官网给的教程是通过select选择选项:https://pywinauto.readthedocs.io/en/latest/index.html  ,如下图所示:

2.我们知道上一篇宏哥用了官网给出的方法进行操作,属于正规军,今天我们看看非正规军是怎么操作的呢,这里就要用到click_input()方法,先点开选项,再选中里面的选项。土八路写法如下:

# 1.先点开选项win.child_window(title="编码:", control_type="ComboBox").click_input()# 2.选择内容win.child_window(title="UTF-8", control_type="ListItem").click_input()

5.测试场景

1.根据前边我们学习的理论知识,可以清楚的知道:记事本-另存为-文件名(编号①就是组合框控件ComboBox,当然了,这个不是很严格的组合框控件,因为它没有固定的选项,目前就是记录了一下之前保存过的文件名和路径的选项),编码选择(编号②就是下拉列表选择),如下图所示:

6.项目实战

因为之前宏哥在win10和win11的两台电脑的不同系统就遇到过问题,没有想到这里又遇到了。win11系统一直没有解决办法,然后宏哥就想先在win10系统上实践一下。由于宏哥写文章的时候,手头还是没有Windows10,就网上找了一台免费微软提供类似win10系统,然后简单的搭建了一个环境给小伙伴或者童鞋们进行演示,有兴趣的自己可以试一下:实验 – 使用 Microsoft Office 集成 – Training | Microsoft Learn

7.Windows10系统

7.1代码设计

7.2参考代码

# -*- coding:utf-8 -*-# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。'''Created on 2026-05-25@author: 北京-宏哥北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)Project: PC端自动化测试实战教程-15-pywinauto操作应用程序窗口的组合框控件(ComboBox)和下拉选择框 - 下篇(详细教程)'''# 3.导入模块from pywinauto import Applicationapp = Application('uia').start("notepad.exe")win = app.window(title_re="Untitled - Notepad")win.print_ctrl_ids()# 输入内容win.child_window(title="Application", auto_id="MenuBar", control_type="MenuBar").type_keys("hello world")# 文件-另存为win.menu_select('File -> Save As...')# 操作弹出文件选择框save_win = win.child_window(title="Save As", control_type="Window")# 1.先点开选项save_win.child_window(title="Encoding:", control_type="ComboBox").click_input()# 2.选择内容save_win.child_window(title="UTF-8", control_type="ListItem").click_input()

7.3运行代码

1.运行代码,右键Run’Test’,就可以看到控制台输出(由于宏哥是临时找的服务器,没有安装IDE,因此就直接命令行运行了,然后宏哥这里为了让小伙伴或者同学们以及自己更好的理解和调试代码,所以宏哥打印了控件的树结构),如下图所示:

Microsoft Windows [Version 10.0.20348.3207](c) Microsoft Corporation. All rights reserved.C:\Users\localadmin\Desktop>python test.pyControl Identifiers:Dialog - 'Untitled - Notepad'    (L108, T82, R954, B565)['Untitled - NotepadDialog', 'Untitled - Notepad', 'Dialog']child_window(title="Untitled - Notepad", control_type="Window")   |   | Edit - 'Text Editor'    (L116, T133, R946, B534)   | ['Edit', 'Edit0', 'Edit1']   | child_window(title="Text Editor", auto_id="15", control_type="Edit")   |    |   |    | ScrollBar - 'Vertical'    (L929, T133, R946, B517)   |    | ['Vertical', 'ScrollBar', 'VerticalScrollBar', 'ScrollBar0', 'ScrollBar1']   |    | child_window(title="Vertical", auto_id="NonClientVerticalScrollBar", control_type="ScrollBar")   |    |    |   |    |    | Button - 'Line up'    (L929, T133, R946, B150)   |    |    | ['Line upButton', 'Button', 'Line up', 'Button0', 'Button1']   |    |    | child_window(title="Line up", auto_id="UpButton", control_type="Button")   |    |    |   |    |    | Button - 'Line down'    (L929, T500, R946, B517)   |    |    | ['Line downButton', 'Button2', 'Line down']   |    |    | child_window(title="Line down", auto_id="DownButton", control_type="Button")   |    |   |    | ScrollBar - 'Horizontal'    (L116, T517, R929, B534)   |    | ['Horizontal', 'HorizontalScrollBar', 'ScrollBar2']   |    | child_window(title="Horizontal", auto_id="NonClientHorizontalScrollBar", control_type="ScrollBar")   |    |    |   |    |    | Button - 'Column left'    (L116, T517, R133, B534)   |    |    | ['Column left', 'Button3', 'Column leftButton']   |    |    | child_window(title="Column left", auto_id="UpButton", control_type="Button")   |    |    |   |    |    | Button - 'Column right'    (L912, T517, R929, B534)   |    |    | ['Column right', 'Column rightButton', 'Button4']   |    |    | child_window(title="Column right", auto_id="DownButton", control_type="Button")   |    |   |    | Thumb - ''    (L929, T517, R946, B534)   |    | ['Thumb']   |   | StatusBar - 'Status Bar'    (L116, T534, R946, B557)   | ['Status BarStatusBar', 'StatusBar', 'Status Bar']   | child_window(title="Status Bar", auto_id="1025", control_type="StatusBar")   |    |   |    | Static - ''    (L116, T536, R516, B557)   |    | ['Static', 'Static0', 'Static1']   |    |   |    | Static - '  Ln 1, Col 1'    (L518, T536, R656, B557)   |    | ['  Ln 1, Col 1', 'Static2', '  Ln 1, Col 1Static']   |    | child_window(title="  Ln 1, Col 1", control_type="Text")   |    |   |    | Static - ' 100%'    (L658, T536, R706, B557)   |    | ['Static3', ' 100%', ' 100%Static']   |    | child_window(title=" 100%", control_type="Text")   |    |   |    | Static - ' Windows (CRLF)'    (L708, T536, R826, B557)   |    | [' Windows (CRLF)', 'Static4', ' Windows (CRLF)Static']   |    | child_window(title=" Windows (CRLF)", control_type="Text")   |    |   |    | Static - ' UTF-8'    (L828, T536, R930, B557)   |    | [' UTF-8', 'Static5', ' UTF-8Static']   |    | child_window(title=" UTF-8", control_type="Text")   |   | TitleBar - ''    (L132, T85, R946, B113)   | ['TitleBar']   |    |   |    | Menu - 'System'    (L116, T90, R138, B112)   |    | ['Menu', 'System', 'SystemMenu', 'System0', 'System1', 'Menu0', 'Menu1']   |    | child_window(title="System", auto_id="MenuBar", control_type="MenuBar")   |    |    |   |    |    | MenuItem - 'System'    (L116, T90, R138, B112)   |    |    | ['SystemMenuItem', 'System2', 'MenuItem', 'MenuItem0', 'MenuItem1']   |    |    | child_window(title="System", control_type="MenuItem")   |    |   |    | Button - 'Minimize'    (L807, T83, R854, B113)   |    | ['Button5', 'MinimizeButton', 'Minimize']   |    | child_window(title="Minimize", control_type="Button")   |    |   |    | Button - 'Maximize'    (L854, T83, R900, B113)   |    | ['MaximizeButton', 'Maximize', 'Button6']   |    | child_window(title="Maximize", control_type="Button")   |    |   |    | Button - 'Close'    (L900, T83, R947, B113)   |    | ['Close', 'CloseButton', 'Button7']   |    | child_window(title="Close", control_type="Button")   |   | Menu - 'Application'    (L116, T113, R946, B132)   | ['Application', 'ApplicationMenu', 'Menu2']   | child_window(title="Application", auto_id="MenuBar", control_type="MenuBar")   |    |   |    | MenuItem - 'File'    (L116, T113, R148, B132)   |    | ['FileMenuItem', 'File', 'MenuItem2']   |    | child_window(title="File", control_type="MenuItem")   |    |   |    | MenuItem - 'Edit'    (L148, T113, R182, B132)   |    | ['EditMenuItem', 'MenuItem3', 'Edit2']   |    | child_window(title="Edit", control_type="MenuItem")   |    |   |    | MenuItem - 'Format'    (L182, T113, R234, B132)   |    | ['MenuItem4', 'FormatMenuItem', 'Format']   |    | child_window(title="Format", control_type="MenuItem")   |    |   |    | MenuItem - 'View'    (L234, T113, R273, B132)   |    | ['View', 'ViewMenuItem', 'MenuItem5']   |    | child_window(title="View", control_type="MenuItem")   |    |   |    | MenuItem - 'Help'    (L273, T113, R312, B132)   |    | ['HelpMenuItem', 'Help', 'MenuItem6']   |    | child_window(title="Help", control_type="MenuItem")C:\Users\localadmin\Desktop>

2.运行代码后电脑端的动作(启动记事本,输入内容,保存,然后操作下拉选择框,因为没有操作组合框控件的代码,所以就没有操作文件名,但是代码基本类似)。如下图所示:

8.Windows11系统

经过上一篇文章那样的折腾这篇文章就省事多了,直接换个方法即可。

8.1代码设计

8.2参考代码

# -*- coding:utf-8 -*-# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。'''Created on 2026-05-25@author: 北京-宏哥北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)Project: PC端自动化测试实战教程-15-pywinauto操作应用程序窗口的组合框控件(ComboBox)和下拉选择框 - 下篇(详细教程)'''# 3.导入模块from pywinauto import Applicationimport timeapp = Application('uia').start("notepad.exe")time.sleep(3)app = Application('uia').connect(class_name="Notepad")win = app['无标题 - Notepad']win.type_keys("hello宏哥")# win.print_ctrl_ids()# win1 = app['Menu']a = win.child_window(title="", auto_id="MenuBar", control_type="MenuBar")a.item_by_path('文件->另存为').click_input()# 处理保存对话框(不同系统版本弹窗标题可能不同)# 等待另存为窗口出现win.child_window(title="另存为", control_type="Window").wait('ready', timeout=5)# 输入文件名称win.child_window(title="文件名:", control_type="Edit").type_keys("北京宏哥.txt")# select 选择ComboBox 选项# win.child_window(title="编码:", control_type="ComboBox").select("UTF-8 BOM")# 1.先点开选项win.child_window(title="编码:", control_type="ComboBox").click_input()# 2.选择内容win.child_window(title="UTF-8", control_type="ListItem").click_input()# win.print_ctrl_ids()# 保存win.child_window(title="保存(S)", control_type="Button").click()

8.3运行代码

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

2.运行代码后电脑端的动作(启动记事本)。如下图所示:

9.小结

今天主要讲解在不同操作系统中如何使用pywinauto操作应用程序窗口的组合框控件(ComboBox)和下拉选择框另一种方法,希望对各位小伙伴或者童鞋们有所帮助和参考。好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。

END

因工作繁忙,暂时做不到日更

每周一、周五早9:00左右准时更新(特殊情况例外

如果你喜欢我的文章,记得点赞+关注

更多干货,与你分享

END
每天学习一点点,今后必成大大神
往期推荐:

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

Charles工具基础使用教程

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便心生放弃的话,可以点击下方【阅读原文】加入我们的QQ群:339806057,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

点击下方“阅读原文”,进软件测试学习群…
↓↓↓

END

右下角,您点赞和推荐

宏哥工资涨2毛

关注公众号,阅读更多技术干货👇

关注不迷路~ 各种福利、资源定期分享

🧐 点击「推荐,给宏哥加个鸡腿吧👇