Python PC 端自动化测试实战教程-10-pywinauto 操作弹出文件选择框(详细教程)

北京-宏哥 · January 20, 2026 · 275 hits

1.简介

前边在讲解和分享 notepad++ 编辑器的输入内容->文件->另存为...之后弹出文件选择框,就有小伙伴或者童鞋们私信问,为什么不继续操作了呢?不要着急,今天就给大家分享和讲解如何继续操作:主要是修改文件名,然后点击 “保存” 按钮,操作弹出文件选择框的这个知识点。

2.什么是弹出文件选择框?

‌弹出文件选择框‌是一种用户界面组件,允许用户从文件系统中选择一个或多个文件。这种对话框通常包含一个路径框、文件名、文件类型等元素,用户可以通过图形界面方便地浏览文件夹、选择文件‌。如下图所示(今天主要讲解的是操作:①文件名和②保存按钮):

3.项目实战

因为宏哥的系统是 Windows11,所以这里为了减少不必要的麻烦主要还是通过 Windows 安装的 Notepad++ 编辑器进行演示和实践。

3.1 测试场景

大致测试场景:启动电脑安装的 Notepad++ 编辑器,然后在编辑器中输入 “北京 - 宏哥” 内容后,点击编辑器的 “文件->另存为...” 后,弹出文件选择框,修改文件名为:北京宏哥,最后点击 “保存” 按钮,保存文件。

3.2 查看窗口的结构树

1.为了小伙伴或者童鞋们看的清楚,以及方便宏哥演示,宏哥这里还是采用前边两种方法的代码打印,如下图所示:

2.打印内容,如下:

D:\Python\python.exe D:/Demo/test.py
Control Identifiers:

Dialog - '*新文件 1 - Notepad++'    (L-9, T-9, R1929, B1029)
['Dialog', '*新文件 1 - Notepad++', '*新文件 1 - Notepad++Dialog', 'Dialog0', 'Dialog1']
child_window(title="*新文件 1 - Notepad++", control_type="Window")
   | 
   | Dialog - '另存为'    (L745, T135, R1705, B735)
   | ['Dialog2', '另存为', '另存为Dialog']
   | child_window(title="另存为", control_type="Window")
   |    | 
   |    | Pane - ''    (L754, T238, R1696, B649)
   |    | ['文件名:Pane', 'Pane', 'Pane0', 'Pane1']
   |    |    | 
   |    |    | Toolbar - '命令模块'    (L754, T238, R1696, B277)
   |    |    | ['命令模块', '命令模块Toolbar', 'Toolbar', 'Toolbar0', 'Toolbar1']
   |    |    | child_window(title="命令模块", auto_id="FolderBandModuleInner", control_type="ToolBar")
   |    |    |    | 
   |    |    |    | Button - '帮助(&H)'    (L1649, T241, R1685, B273)
   |    |    |    | ['帮助(&H)Button', 'Button', '帮助(&H)', 'Button0', 'Button1']
   |    |    |    | child_window(title="帮助(&H)", auto_id="HelpButton", control_type="Button")
   |    |    |    | 
   |    |    |    | SplitButton - '详细信息'    (L1571, T241, R1639, B273)
   |    |    |    | ['详细信息', 'SplitButton', '详细信息SplitButton', 'SplitButton0', 'SplitButton1']
   |    |    |    | child_window(title="详细信息", auto_id="ViewControl", control_type="SplitButton")
   |    |    |    |    | 
   |    |    |    |    | Button - '视图滑块'    (L1606, T241, R1626, B273)
   |    |    |    |    | ['视图滑块', 'Button2', '视图滑块Button']
   |    |    |    |    | child_window(title="视图滑块", auto_id="SplitMenuButton", control_type="Button")
   |    |    |    | 
   |    |    |    | Button - '组织​​'    (L758, T241, R838, B273)
   |    |    |    | ['组织\u200b\u200bButton', 'Button3', '组织\u200b\u200b']
   |    |    |    | child_window(title="组织​​", auto_id="{7DDC1264-7E4D-4F74-BBC0-D191987C8D0F}", control_type="Button")
   |    |    |    | 
   |    |    |    | Button - '新建​​文件夹​​'    (L838, T241, R949, B273)
   |    |    |    | ['新建\u200b\u200b文件夹\u200b\u200b', 'Button4', '新建\u200b\u200b文件夹\u200b\u200bButton']
   |    |    |    | child_window(title="新建​​文件夹​​", auto_id="{E44616AD-6DF1-4B94-85A4-E465AE8A19DB}", control_type="Button")
   |    |    | 
   |    |    | Pane - '控制项宿主'    (L757, T277, R949, B524)
   |    |    | ['控制项宿主', 'Pane2', '控制项宿主Pane']
   |    |    | child_window(title="控制项宿主", auto_id="ProperTreeHost", control_type="Pane")
   |    |    |    | 
   |    |    |    | TreeView - '导航窗格'    (L757, T277, R949, B524)
   |    |    |    | ['导航窗格', 'TreeView', '导航窗格TreeView', 'TreeView0', 'TreeView1']
   |    |    |    | child_window(title="导航窗格", auto_id="100", control_type="Tree")
   |    |    |    |    | 
   |    |    |    |    | ScrollBar - '垂直滚动条'    (L928, T277, R949, B524)
   |    |    |    |    | ['垂直滚动条', '垂直滚动条ScrollBar', 'ScrollBar', 'ScrollBar0', 'ScrollBar1']
   |    |    |    |    | child_window(title="垂直滚动条", auto_id="NonClientVerticalScrollBar", control_type="ScrollBar")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '上一行'    (L928, T277, R949, B298)
   |    |    |    |    |    | ['上一行', '上一行Button', 'Button5', '上一行0', '上一行1', '上一行Button0', '上一行Button1']
   |    |    |    |    |    | child_window(title="上一行", auto_id="UpButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '向上翻页'    (L928, T298, R949, B438)
   |    |    |    |    |    | ['向上翻页', '向上翻页Button', 'Button6']
   |    |    |    |    |    | child_window(title="向上翻页", auto_id="UpPageButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Thumb - '位置'    (L928, T438, R949, B492)
   |    |    |    |    |    | ['位置Thumb', 'Thumb', '位置', '位置Thumb0', '位置Thumb1', 'Thumb0', 'Thumb1', '位置0', '位置1']
   |    |    |    |    |    | child_window(title="位置", auto_id="ScrollbarThumb", control_type="Thumb")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '向下翻页'    (L928, T492, R949, B503)
   |    |    |    |    |    | ['向下翻页', 'Button7', '向下翻页Button', '向下翻页0', '向下翻页1', '向下翻页Button0', '向下翻页Button1']
   |    |    |    |    |    | child_window(title="向下翻页", auto_id="DownPageButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '下一行'    (L928, T503, R949, B524)
   |    |    |    |    |    | ['下一行', 'Button8', '下一行Button', '下一行0', '下一行1', '下一行Button0', '下一行Button1']
   |    |    |    |    |    | child_window(title="下一行", auto_id="DownButton", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | TreeItem - '桌面'    (L0, T0, R0, B0)
   |    |    |    |    | ['桌面TreeItem', '桌面', 'TreeItem', 'TreeItem0', 'TreeItem1']
   |    |    |    |    | child_window(title="桌面", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '主文件夹'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['主文件夹TreeItem', '主文件夹', 'TreeItem2']
   |    |    |    |    |    | child_window(title="主文件夹", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '图库'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['图库', '图库TreeItem', 'TreeItem3']
   |    |    |    |    |    | child_window(title="图库", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '快速访问开始 - 桌面 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['快速访问开始 - 桌面 (已固定)', 'TreeItem4', '快速访问开始 - 桌面 (已固定)TreeItem']
   |    |    |    |    |    | child_window(title="快速访问开始 - 桌面 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '下载 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['下载 (已固定)TreeItem', 'TreeItem5', '下载 (已固定)']
   |    |    |    |    |    | child_window(title="下载 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '文档 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['文档 (已固定)TreeItem', '文档 (已固定)', 'TreeItem6']
   |    |    |    |    |    | child_window(title="文档 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '图片 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['图片 (已固定)TreeItem', '图片 (已固定)', 'TreeItem7']
   |    |    |    |    |    | child_window(title="图片 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '音乐 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['音乐 (已固定)', '音乐 (已固定)TreeItem', 'TreeItem8']
   |    |    |    |    |    | child_window(title="音乐 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '视频 (已固定)'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['视频 (已固定)', '视频 (已固定)TreeItem', 'TreeItem9']
   |    |    |    |    |    | child_window(title="视频 (已固定)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '算法测试数据'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['算法测试数据', '算法测试数据TreeItem', 'TreeItem10']
   |    |    |    |    |    | child_window(title="算法测试数据", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '福田'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['福田', '福田TreeItem', 'TreeItem11']
   |    |    |    |    |    | child_window(title="福田", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '恩龙'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['TreeItem12', '恩龙TreeItem', '恩龙']
   |    |    |    |    |    | child_window(title="恩龙", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '快速访问结束 - Demo'    (L0, T0, R0, B0)
   |    |    |    |    |    | ['快速访问结束 - Demo', '快速访问结束 - DemoTreeItem', 'TreeItem13']
   |    |    |    |    |    | child_window(title="快速访问结束 - Demo", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - 'WPS云盘'    (L820, T317, R887, B357)
   |    |    |    |    |    | ['WPS云盘TreeItem', 'WPS云盘', 'TreeItem14']
   |    |    |    |    |    | child_window(title="WPS云盘", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '此电脑'    (L820, T357, R869, B397)
   |    |    |    |    |    | ['此电脑', '此电脑TreeItem', 'TreeItem15', '此电脑0', '此电脑1']
   |    |    |    |    |    | child_window(title="此电脑", control_type="TreeItem")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | TreeItem - 'Windows (C:)'    (L830, T397, R928, B437)
   |    |    |    |    |    |    | ['TreeItem16', 'Windows (C:)TreeItem', 'Windows (C:)']
   |    |    |    |    |    |    | child_window(title="Windows (C:)", control_type="TreeItem")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | TreeItem - 'Data (D:)'    (L830, T437, R896, B477)
   |    |    |    |    |    |    | ['Data (D:)TreeItem', 'Data (D:)', 'TreeItem17', 'Data (D:)0', 'Data (D:)1']
   |    |    |    |    |    |    | child_window(title="Data (D:)", control_type="TreeItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | TreeItem - '网络'    (L820, T477, R854, B517)
   |    |    |    |    |    | ['网络', '网络TreeItem', 'TreeItem18']
   |    |    |    |    |    | child_window(title="网络", control_type="TreeItem")
   |    |    | 
   |    |    | Pane - 'Shell 文件夹视图'    (L954, T277, R1696, B524)
   |    |    | ['Shell 文件夹视图', 'Shell 文件夹视图Pane', 'Pane3']
   |    |    | child_window(title="Shell 文件夹视图", auto_id="listview", control_type="Pane")
   |    |    |    | 
   |    |    |    | ListBox - '项目视图'    (L954, T277, R1696, B524)
   |    |    |    | ['ListBox', '项目视图ListBox', '项目视图']
   |    |    |    | child_window(title="项目视图", control_type="List")
   |    |    |    |    | 
   |    |    |    |    | ScrollBar - '水平'    (L954, T503, R1675, B524)
   |    |    |    |    | ['水平', 'ScrollBar2', '水平ScrollBar']
   |    |    |    |    | child_window(title="水平", auto_id="HorizontalScrollBar", control_type="ScrollBar")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '左移一列'    (L954, T503, R975, B524)
   |    |    |    |    |    | ['Button9', '左移一列Button', '左移一列']
   |    |    |    |    |    | child_window(title="左移一列", auto_id="UpButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Thumb - '位置'    (L975, T503, R1600, B524)
   |    |    |    |    |    | ['位置Thumb2', 'Thumb2', '位置2']
   |    |    |    |    |    | child_window(title="位置", auto_id="ScrollbarThumb", control_type="Thumb")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '向右翻页'    (L1600, T503, R1654, B524)
   |    |    |    |    |    | ['向右翻页', '向右翻页Button', 'Button10']
   |    |    |    |    |    | child_window(title="向右翻页", auto_id="DownPageButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '右移一列'    (L1654, T503, R1675, B524)
   |    |    |    |    |    | ['右移一列Button', 'Button11', '右移一列']
   |    |    |    |    |    | child_window(title="右移一列", auto_id="DownButton", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | ScrollBar - '垂直'    (L1675, T277, R1696, B503)
   |    |    |    |    | ['垂直', '垂直ScrollBar', 'ScrollBar3']
   |    |    |    |    | child_window(title="垂直", auto_id="VerticalScrollBar", control_type="ScrollBar")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '上一行'    (L1675, T277, R1696, B298)
   |    |    |    |    |    | ['上一行2', '上一行Button2', 'Button12']
   |    |    |    |    |    | child_window(title="上一行", auto_id="UpButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Thumb - '位置'    (L1675, T298, R1696, B365)
   |    |    |    |    |    | ['位置Thumb3', 'Thumb3', '位置3']
   |    |    |    |    |    | child_window(title="位置", auto_id="ScrollbarThumb", control_type="Thumb")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '向下翻页'    (L1675, T365, R1696, B482)
   |    |    |    |    |    | ['向下翻页2', 'Button13', '向下翻页Button2']
   |    |    |    |    |    | child_window(title="向下翻页", auto_id="DownPageButton", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '下一行'    (L1675, T482, R1696, B503)
   |    |    |    |    |    | ['下一行2', 'Button14', '下一行Button2']
   |    |    |    |    |    | child_window(title="下一行", auto_id="DownButton", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | Header - '标题'    (L954, T277, R1737, B309)
   |    |    |    |    | ['标题', 'Header', '标题Header']
   |    |    |    |    | child_window(title="标题", control_type="Header")
   |    |    |    |    |    | 
   |    |    |    |    |    | SplitButton - '名称'    (L954, T277, R1294, B309)
   |    |    |    |    |    | ['名称', '名称SplitButton', 'SplitButton2']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | Button - '筛选器下拉列表'    (L1274, T277, R1293, B309)
   |    |    |    |    |    |    | ['筛选器下拉列表Button', 'Button15', '筛选器下拉列表', '筛选器下拉列表Button0', '筛选器下拉列表Button1', '筛选器下拉列表0', '筛选器下拉列表1']
   |    |    |    |    |    |    | child_window(title="筛选器下拉列表", auto_id="DropDown", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | SplitButton - '修改日期'    (L1294, T277, R1474, B309)
   |    |    |    |    |    | ['修改日期', 'SplitButton3', '修改日期SplitButton']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | Button - '筛选器下拉列表'    (L1454, T277, R1473, B309)
   |    |    |    |    |    |    | ['筛选器下拉列表Button2', 'Button16', '筛选器下拉列表2']
   |    |    |    |    |    |    | child_window(title="筛选器下拉列表", auto_id="DropDown", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | SplitButton - '类型'    (L1474, T277, R1624, B309)
   |    |    |    |    |    | ['类型SplitButton', '类型', 'SplitButton4']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | Button - '筛选器下拉列表'    (L1604, T277, R1623, B309)
   |    |    |    |    |    |    | ['筛选器下拉列表Button3', 'Button17', '筛选器下拉列表3']
   |    |    |    |    |    |    | child_window(title="筛选器下拉列表", auto_id="DropDown", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | SplitButton - '大小'    (L1624, T277, R1724, B309)
   |    |    |    |    |    | ['SplitButton5', '大小SplitButton', '大小']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | Button - '筛选器下拉列表'    (L1704, T277, R1723, B309)
   |    |    |    |    |    |    | ['筛选器下拉列表Button4', 'Button18', '筛选器下拉列表4']
   |    |    |    |    |    |    | child_window(title="筛选器下拉列表", auto_id="DropDown", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | ListItem - '.idea'    (L972, T317, R1719, B348)
   |    |    |    |    | ['ListItem', '.idea', '.ideaListItem', 'ListItem0', 'ListItem1']
   |    |    |    |    | child_window(title=".idea", auto_id="0", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T321, R1294, B345)
   |    |    |    |    |    | ['Edit', 'Edit0', 'Edit1']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T321, R1474, B345)
   |    |    |    |    |    | ['Edit2']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T321, R1624, B345)
   |    |    |    |    |    | ['Edit3']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T321, R1724, B345)
   |    |    |    |    |    | ['Edit4']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    |    |    | 
   |    |    |    |    | ListItem - '.lingma'    (L972, T354, R1719, B385)
   |    |    |    |    | ['.lingma', 'ListItem2', '.lingmaListItem']
   |    |    |    |    | child_window(title=".lingma", auto_id="1", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T358, R1294, B382)
   |    |    |    |    |    | ['Edit5']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T358, R1474, B382)
   |    |    |    |    |    | ['Edit6']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T358, R1624, B382)
   |    |    |    |    |    | ['Edit7']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T358, R1724, B382)
   |    |    |    |    |    | ['Edit8']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    |    |    | 
   |    |    |    |    | ListItem - '__pycache__'    (L972, T391, R1719, B422)
   |    |    |    |    | ['ListItem3', '__pycache__ListItem', '__pycache__']
   |    |    |    |    | child_window(title="__pycache__", auto_id="2", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T395, R1294, B419)
   |    |    |    |    |    | ['Edit9']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T395, R1474, B419)
   |    |    |    |    |    | ['Edit10']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T395, R1624, B419)
   |    |    |    |    |    | ['Edit11']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T395, R1724, B419)
   |    |    |    |    |    | ['Edit12']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    |    |    | 
   |    |    |    |    | ListItem - 'config'    (L972, T428, R1719, B459)
   |    |    |    |    | ['ListItem4', 'configListItem', 'config']
   |    |    |    |    | child_window(title="config", auto_id="3", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T432, R1294, B456)
   |    |    |    |    |    | ['Edit13']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T432, R1474, B456)
   |    |    |    |    |    | ['Edit14']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T432, R1624, B456)
   |    |    |    |    |    | ['Edit15']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T432, R1724, B456)
   |    |    |    |    |    | ['Edit16']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    |    |    | 
   |    |    |    |    | ListItem - 'framework'    (L972, T465, R1719, B496)
   |    |    |    |    | ['ListItem5', 'frameworkListItem', 'framework']
   |    |    |    |    | child_window(title="framework", auto_id="4", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T469, R1294, B493)
   |    |    |    |    |    | ['Edit17']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T469, R1474, B493)
   |    |    |    |    |    | ['Edit18']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T469, R1624, B493)
   |    |    |    |    |    | ['Edit19']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T469, R1724, B493)
   |    |    |    |    |    | ['Edit20']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    |    |    | 
   |    |    |    |    | ListItem - 'games'    (L972, T502, R1719, B533)
   |    |    |    |    | ['gamesListItem', 'ListItem6', 'games']
   |    |    |    |    | child_window(title="games", auto_id="5", control_type="ListItem")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '名称'    (L1000, T506, R1294, B530)
   |    |    |    |    |    | ['Edit21']
   |    |    |    |    |    | child_window(title="名称", auto_id="System.ItemNameDisplay", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '修改日期'    (L1294, T506, R1474, B530)
   |    |    |    |    |    | ['Edit22']
   |    |    |    |    |    | child_window(title="修改日期", auto_id="System.DateModified", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '类型'    (L1474, T506, R1624, B530)
   |    |    |    |    |    | ['Edit23']
   |    |    |    |    |    | child_window(title="类型", auto_id="System.ItemTypeText", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '大小'    (L1624, T506, R1724, B530)
   |    |    |    |    |    | ['Edit24']
   |    |    |    |    |    | child_window(title="大小", auto_id="System.Size", control_type="Edit")
   |    |    | 
   |    |    | Static - '文件名:'    (L767, T537, R911, B565)
   |    |    | ['Static', '文件名:Static', '文件名:', '文件名:0', '文件名:1', 'Static0', 'Static1']
   |    |    | child_window(title="文件名:", auto_id="SaveDialogLabel", control_type="Text")
   |    |    | 
   |    |    | ComboBox - '文件名:'    (L911, T537, R1690, B565)
   |    |    | ['文件名:2', 'ComboBox', '文件名:ComboBox', 'ComboBox0', 'ComboBox1']
   |    |    | child_window(title="文件名:", auto_id="FileNameControlHost", control_type="ComboBox")
   |    |    |    | 
   |    |    |    | Edit - '文件名:'    (L914, T540, R1666, B562)
   |    |    |    | ['Edit25', '文件名:Edit']
   |    |    |    | child_window(title="文件名:", auto_id="1001", control_type="Edit")
   |    |    |    | 
   |    |    |    | Button - '打开'    (L1670, T538, R1689, B564)
   |    |    |    | ['打开Button', 'Button19', '打开', '打开Button0', '打开Button1', '打开0', '打开1']
   |    |    |    | child_window(title="打开", auto_id="DropDown", control_type="Button")
   |    |    | 
   |    |    | Static - '保存类型:'    (L767, T568, R911, B596)
   |    |    | ['Static2', '保存类型:Static', '保存类型:', '保存类型:0', '保存类型:1']
   |    |    | child_window(title="保存类型:", auto_id="SaveDialogLabel", control_type="Text")
   |    |    | 
   |    |    | ComboBox - '保存类型:'    (L911, T568, R1690, B596)
   |    |    | ['保存类型:ComboBox', '保存类型:2', 'ComboBox2']
   |    |    | child_window(title="保存类型:", auto_id="FileTypeControlHost", control_type="ComboBox")
   |    |    |    | 
   |    |    |    | Static - ''    (L3, T3, R755, B25)
   |    |    |    | ['Static3']
   |    |    |    | 
   |    |    |    | Button - '打开'    (L1670, T569, R1689, B595)
   |    |    |    | ['打开Button2', 'Button20', '打开2']
   |    |    |    | child_window(title="打开", auto_id="DropDown", control_type="Button")
   |    |    | 
   |    |    | TreeView - '保存字段'    (L767, T604, R1683, B643)
   |    |    | ['保存字段', '保存字段TreeView', 'TreeView2']
   |    |    | child_window(title="保存字段", auto_id="SaveDialogPreviewMetadataInner", control_type="Tree")
   |    |    | 
   |    |    | TreeView - '应用程序控件'    (L0, T0, R0, B0)
   |    |    | ['应用程序控件TreeView', '应用程序控件', 'TreeView3']
   |    |    | child_window(title="应用程序控件", auto_id="AppControlsModuleInner", control_type="Tree")
   |    | 
   |    | Toolbar - ''    (L764, T679, R879, B705)
   |    | ['保存类型:Toolbar', 'Toolbar2']
   |    |    | 
   |    |    | Button - '隐藏文件夹'    (L764, T679, R867, B705)
   |    |    | ['隐藏文件夹Button', 'Button21', '隐藏文件夹']
   |    |    | child_window(title="隐藏文件夹", control_type="Button")
   |    | 
   |    | CheckBox - '追加扩展名'    (L1235, T677, R1423, B700)
   |    | ['追加扩展名CheckBox', 'CheckBox', '追加扩展名']
   |    | child_window(title="追加扩展名", control_type="CheckBox")
   |    | 
   |    | Button - '保存(S)'    (L1438, T672, R1548, B705)
   |    | ['保存(S)', '保存(S)Button', 'Button22']
   |    | child_window(title="保存(S)", auto_id="1", control_type="Button")
   |    | 
   |    | Button - '取消'    (L1563, T672, R1673, B705)
   |    | ['取消Button', '取消', 'Button23']
   |    | child_window(title="取消", auto_id="2", control_type="Button")
   |    | 
   |    | Thumb - ''    (L1675, T705, R1696, B726)
   |    | ['Thumb4', '保存类型:Thumb']
   |    | 
   |    | Pane - ''    (L754, T173, R1696, B238)
   |    | ['Pane4']
   |    | child_window(auto_id="40965", control_type="Pane")
   |    |    | 
   |    |    | Pane - ''    (L754, T182, R880, B226)
   |    |    | ['Pane5']
   |    |    |    | 
   |    |    |    | Toolbar - '导航按钮'    (L759, T185, R880, B226)
   |    |    |    | ['导航按钮', '导航按钮Toolbar', 'Toolbar3']
   |    |    |    | child_window(title="导航按钮", control_type="ToolBar")
   |    |    |    |    | 
   |    |    |    |    | Button - '后退 (Alt + 向左键)'    (L759, T185, R803, B226)
   |    |    |    |    | ['后退 (Alt + 向左键)Button', '后退 (Alt + 向左键)', 'Button24']
   |    |    |    |    | child_window(title="后退 (Alt + 向左键)", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | Button - '前进 (Alt + 向右键)'    (L803, T185, R847, B226)
   |    |    |    |    | ['前进 (Alt + 向右键)Button', 'Button25', '前进 (Alt + 向右键)']
   |    |    |    |    | child_window(title="前进 (Alt + 向右键)", control_type="Button")
   |    |    |    |    | 
   |    |    |    |    | Button - '最近浏览的位置'    (L847, T185, R873, B226)
   |    |    |    |    | ['最近浏览的位置Button', '最近浏览的位置', 'Button26']
   |    |    |    |    | child_window(title="最近浏览的位置", control_type="Button")
   |    |    | 
   |    |    | Pane - ''    (L880, T181, R925, B226)
   |    |    | ['Pane6']
   |    |    |    | 
   |    |    |    | Toolbar - '上区段'    (L880, T185, R925, B230)
   |    |    |    | ['上区段', 'Toolbar4', '上区段Toolbar']
   |    |    |    | child_window(title="上区段", control_type="ToolBar")
   |    |    |    |    | 
   |    |    |    |    | Button - '上移到“Data (D:)”(Alt + 向上键)'    (L880, T185, R921, B226)
   |    |    |    |    | ['上移到“Data (D:)”(Alt + 向上键)', '上移到“Data (D:)”(Alt + 向上键)Button', 'Button27']
   |    |    |    |    | child_window(title="上移到“Data (D:)”(Alt + 向上键)", control_type="Button")
   |    |    | 
   |    |    | Pane - ''    (L925, T173, R1420, B235)
   |    |    | ['Pane7']
   |    |    | child_window(auto_id="41477", control_type="Pane")
   |    |    |    | 
   |    |    |    | Progress - '正在加载'    (L927, T183, R1418, B227)
   |    |    |    | ['正在加载', 'Progress', '正在加载Progress']
   |    |    |    | child_window(title="正在加载", control_type="ProgressBar")
   |    |    |    |    | 
   |    |    |    |    | Pane - ''    (L927, T183, R1324, B227)
   |    |    |    |    | ['Pane8']
   |    |    |    |    |    | 
   |    |    |    |    |    | Toolbar - '地址: D:\Demo'    (L935, T183, R1324, B227)
   |    |    |    |    |    | ['地址: D:\\Demo', 'Toolbar5', '地址: D:\\DemoToolbar']
   |    |    |    |    |    | child_window(title="地址: D:\Demo", auto_id="1001", control_type="ToolBar")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | SplitButton - '所有位置'    (L935, T183, R978, B226)
   |    |    |    |    |    |    | ['所有位置SplitButton', 'SplitButton6', '所有位置']
   |    |    |    |    |    |    | child_window(title="所有位置", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | SplitButton - '此电脑'    (L978, T183, R1050, B226)
   |    |    |    |    |    |    | ['此电脑2', '此电脑SplitButton', 'SplitButton7']
   |    |    |    |    |    |    | child_window(title="此电脑", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | SplitButton - 'Data (D:)'    (L1050, T183, R1139, B226)
   |    |    |    |    |    |    | ['SplitButton8', 'Data (D:)SplitButton', 'Data (D:)2']
   |    |    |    |    |    |    | child_window(title="Data (D:)", control_type="SplitButton")
   |    |    |    |    |    |    | 
   |    |    |    |    |    |    | SplitButton - '‎Demo'    (L1139, T183, R1210, B226)
   |    |    |    |    |    |    | ['\u200eDemoSplitButton', 'SplitButton9', '\u200eDemo']
   |    |    |    |    |    |    | child_window(title="‎Demo", control_type="SplitButton")
   |    |    |    |    | 
   |    |    |    |    | Toolbar - '地址区段'    (L1324, T183, R1418, B227)
   |    |    |    |    | ['地址区段Toolbar', '地址区段', 'Toolbar6']
   |    |    |    |    | child_window(title="地址区段", control_type="ToolBar")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '上一个位置'    (L1324, T183, R1371, B230)
   |    |    |    |    |    | ['上一个位置Button', 'Button28', '上一个位置']
   |    |    |    |    |    | child_window(title="上一个位置", control_type="Button")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '刷新“Demo”(F5)'    (L1371, T183, R1418, B230)
   |    |    |    |    |    | ['刷新“Demo”(F5)', 'Button29', '刷新“Demo”(F5)Button']
   |    |    |    |    |    | child_window(title="刷新“Demo”(F5)", control_type="Button")
   |    |    | 
   |    |    | Pane - ''    (L1424, T203, R1430, B204)
   |    |    | ['Pane9']
   |    |    | 
   |    |    | Pane - ''    (L1430, T179, R1685, B229)
   |    |    | ['Pane10']
   |    |    |    | 
   |    |    |    | Pane - ''    (L1430, T182, R1685, B228)
   |    |    |    | ['Pane11']
   |    |    |    |    | 
   |    |    |    |    | Pane - ''    (L1435, T182, R1680, B228)
   |    |    |    |    | ['Pane12']
   |    |    |    |    |    | 
   |    |    |    |    |    | Edit - '\r'    (L1437, T195, R1635, B215)
   |    |    |    |    |    | ['Edit26']
   |    |    |    |    |    | child_window(title="\r", auto_id="SearchEditBox", control_type="Edit")
   |    |    |    |    |    | 
   |    |    |    |    |    | Button - '搜索'    (L1639, T182, R1677, B228)
   |    |    |    |    |    | ['Button30', '搜索', '搜索Button']
   |    |    |    |    |    | child_window(title="搜索", auto_id="SearchBoxSearchButton", control_type="Button")
   |    |    | 
   |    |    | Pane - ''    (L1689, T203, R1696, B204)
   |    |    | ['Pane13']
   |    | 
   |    | TitleBar - ''    (L774, T138, R1696, B173)
   |    | ['TitleBar', 'TitleBar0', 'TitleBar1']
   |    |    | 
   |    |    | Menu - '系统'    (L603, T115, R625, B137)
   |    |    | ['Menu', '系统', '系统Menu', '系统0', '系统1', 'Menu0', 'Menu1', '系统Menu0', '系统Menu1']
   |    |    | child_window(title="系统", auto_id="MenuBar", control_type="MenuBar")
   |    |    |    | 
   |    |    |    | MenuItem - '系统'    (L603, T115, R625, B137)
   |    |    |    | ['系统2', '系统MenuItem', 'MenuItem', '系统MenuItem0', '系统MenuItem1', 'MenuItem0', 'MenuItem1']
   |    |    |    | child_window(title="系统", control_type="MenuItem")
   |    |    | 
   |    |    | Button - '关闭'    (L1653, T136, R1697, B173)
   |    |    | ['关闭Button', '关闭', 'Button31', '关闭Button0', '关闭Button1', '关闭0', '关闭1']
   |    |    | child_window(title="关闭", control_type="Button")
   | 
   | Pane - '北京-宏哥'    (L2, T115, R1918, B989)
   | ['北京-宏哥Pane', '北京-宏哥', 'Pane14']
   | child_window(title="北京-宏哥", control_type="Pane")
   | 
   | TabControl - 'Tab'    (L0, T83, R1920, B991)
   | ['TabControl', 'TabTabControl', 'Tab']
   | child_window(title="Tab", control_type="Tab")
   |    | 
   |    | TabItem - '新文件 1'    (L2, T85, R112, B113)
   |    | ['新文件 1', 'TabItem', '新文件 1TabItem']
   |    | child_window(title="新文件 1", control_type="TabItem")
   | 
   | StatusBar - ''    (L0, T991, R1920, B1020)
   | ['Normal text fileStatusBar', 'StatusBar']
   |    | 
   |    | Static - 'Normal text file'    (L0, T993, R974, B1020)
   |    | ['Static4', 'Normal text file', 'Normal text fileStatic']
   |    | child_window(title="Normal text file", control_type="Text")
   |    | 
   |    | Static - 'length : 13    lines : 1'    (L976, T993, R1249, B1020)
   |    | ['length : 13    lines : 1Static', 'Static5', 'length : 13    lines : 1']
   |    | child_window(title="length : 13    lines : 1", control_type="Text")
   |    | 
   |    | Static - 'Ln : 1    Col : 6    Pos : 14'    (L1251, T993, R1574, B1020)
   |    | ['Static6', 'Ln : 1    Col : 6    Pos : 14Static', 'Ln : 1    Col : 6    Pos : 14']
   |    | child_window(title="Ln : 1    Col : 6    Pos : 14", control_type="Text")
   |    | 
   |    | Static - 'Windows (CR LF)'    (L1576, T993, R1712, B1020)
   |    | ['Static7', 'Windows (CR LF)Static', 'Windows (CR LF)']
   |    | child_window(title="Windows (CR LF)", control_type="Text")
   |    | 
   |    | Static - 'UTF-8'    (L1714, T993, R1862, B1020)
   |    | ['Static8', 'UTF-8', 'UTF-8Static']
   |    | child_window(title="UTF-8", control_type="Text")
   |    | 
   |    | Static - 'INS'    (L1864, T993, R1900, B1020)
   |    | ['Static9', 'INSStatic', 'INS']
   |    | child_window(title="INS", control_type="Text")
   | 
   | Pane - ''    (L0, T54, R1920, B83)
   | ['Pane15']
   |    | 
   |    | Toolbar - ''    (L2, T54, R1920, B83)
   |    | ['Toolbar7']
   |    |    | 
   |    |    | Button - ''    (L2, T54, R29, B80)
   |    |    | ['Button32']
   |    |    | 
   |    |    | Button - ''    (L29, T54, R56, B80)
   |    |    | ['Button33']
   |    |    | 
   |    |    | Button - ''    (L56, T54, R83, B80)
   |    |    | ['Button34']
   |    |    | 
   |    |    | Button - ''    (L83, T54, R110, B80)
   |    |    | ['Button35']
   |    |    | 
   |    |    | Button - ''    (L110, T54, R137, B80)
   |    |    | ['Button36']
   |    |    | 
   |    |    | Button - ''    (L137, T54, R164, B80)
   |    |    | ['Button37']
   |    |    | 
   |    |    | Button - ''    (L164, T54, R191, B80)
   |    |    | ['Button38']
   |    |    | 
   |    |    | Button - ''    (L199, T54, R226, B80)
   |    |    | ['Button39']
   |    |    | 
   |    |    | Button - ''    (L226, T54, R253, B80)
   |    |    | ['Button40']
   |    |    | 
   |    |    | Button - ''    (L253, T54, R280, B80)
   |    |    | ['Button41']
   |    |    | 
   |    |    | Button - ''    (L288, T54, R315, B80)
   |    |    | ['Button42']
   |    |    | 
   |    |    | Button - ''    (L315, T54, R342, B80)
   |    |    | ['Button43']
   |    |    | 
   |    |    | Button - ''    (L350, T54, R377, B80)
   |    |    | ['Button44']
   |    |    | 
   |    |    | Button - ''    (L377, T54, R404, B80)
   |    |    | ['Button45']
   |    |    | 
   |    |    | Button - ''    (L412, T54, R439, B80)
   |    |    | ['Button46']
   |    |    | 
   |    |    | Button - ''    (L439, T54, R466, B80)
   |    |    | ['Button47']
   |    |    | 
   |    |    | Button - ''    (L474, T54, R501, B80)
   |    |    | ['Button48']
   |    |    | 
   |    |    | Button - ''    (L501, T54, R528, B80)
   |    |    | ['Button49']
   |    |    | 
   |    |    | Button - ''    (L536, T54, R563, B80)
   |    |    | ['Button50']
   |    |    | 
   |    |    | Button - ''    (L563, T54, R590, B80)
   |    |    | ['Button51']
   |    |    | 
   |    |    | Button - ''    (L590, T54, R617, B80)
   |    |    | ['Button52']
   |    |    | 
   |    |    | Button - ''    (L617, T54, R644, B80)
   |    |    | ['Button53']
   |    |    | 
   |    |    | Button - ''    (L644, T54, R671, B80)
   |    |    | ['Button54']
   |    |    | 
   |    |    | Button - ''    (L671, T54, R698, B80)
   |    |    | ['Button55']
   |    |    | 
   |    |    | Button - ''    (L698, T54, R725, B80)
   |    |    | ['Button56']
   |    |    | 
   |    |    | Button - ''    (L725, T54, R752, B80)
   |    |    | ['Button57']
   |    |    | 
   |    |    | Button - ''    (L752, T54, R779, B80)
   |    |    | ['Button58']
   |    |    | 
   |    |    | Button - ''    (L787, T54, R814, B80)
   |    |    | ['Button59']
   |    |    | 
   |    |    | Button - ''    (L814, T54, R841, B80)
   |    |    | ['Button60']
   |    |    | 
   |    |    | Button - ''    (L841, T54, R868, B80)
   |    |    | ['Button61']
   |    |    | 
   |    |    | Button - ''    (L868, T54, R895, B80)
   |    |    | ['Button62']
   |    |    | 
   |    |    | Button - ''    (L895, T54, R922, B80)
   |    |    | ['Button63']
   |    |    | 
   |    |    | Button - ''    (L930, T54, R957, B80)
   |    |    | ['Button64']
   |    |    | 
   |    |    | Button - ''    (L957, T54, R984, B80)
   |    |    | ['Button65']
   |    |    | 
   |    |    | Button - ''    (L984, T54, R1011, B80)
   |    |    | ['Button66']
   |    |    | 
   |    |    | Button - ''    (L1011, T54, R1038, B80)
   |    |    | ['Button67']
   |    |    | 
   |    |    | Button - ''    (L1038, T54, R1065, B80)
   |    |    | ['Button68']
   |    |    | 
   |    |    | Button - ''    (L1065, T54, R1092, B80)
   |    |    | ['Button69']
   |    |    | 
   |    |    | Button - ''    (L1092, T54, R1119, B80)
   |    |    | ['Button70']
   |    |    | 
   |    |    | Button - ''    (L1119, T54, R1146, B80)
   |    |    | ['Button71']
   | 
   | TitleBar - ''    (L20, T-6, R1920, B29)
   | ['TitleBar2']
   |    | 
   |    | Menu - '系统'    (L0, T0, R22, B22)
   |    | ['Menu2', '系统3', '系统Menu2']
   |    | child_window(title="系统", auto_id="MenuBar", control_type="MenuBar")
   |    |    | 
   |    |    | MenuItem - '系统'    (L0, T0, R22, B22)
   |    |    | ['系统4', '系统MenuItem2', 'MenuItem2']
   |    |    | child_window(title="系统", control_type="MenuItem")
   |    | 
   |    | Button - '最小化'    (L1740, T0, R1800, B28)
   |    | ['Button72', '最小化', '最小化Button']
   |    | child_window(title="最小化", control_type="Button")
   |    | 
   |    | Button - '还原'    (L1800, T0, R1859, B28)
   |    | ['还原', 'Button73', '还原Button']
   |    | child_window(title="还原", control_type="Button")
   |    | 
   |    | Button - '关闭'    (L1859, T0, R1920, B28)
   |    | ['关闭Button2', '关闭2', 'Button74']
   |    | child_window(title="关闭", control_type="Button")
   | 
   | Menu - '应用程序'    (L0, T23, R1536, B42)
   | ['Menu3', '应用程序', '应用程序Menu']
   | child_window(title="应用程序", auto_id="MenuBar", control_type="MenuBar")
   |    | 
   |    | MenuItem - '文件(F)'    (L0, T23, R53, B42)
   |    | ['MenuItem3', '文件(F)MenuItem', '文件(F)']
   |    | child_window(title="文件(F)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '编辑(E)'    (L53, T23, R106, B42)
   |    | ['编辑(E)', '编辑(E)MenuItem', 'MenuItem4']
   |    | child_window(title="编辑(E)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '搜索(S)'    (L106, T23, R160, B42)
   |    | ['搜索(S)MenuItem', 'MenuItem5', '搜索(S)']
   |    | child_window(title="搜索(S)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '视图(V)'    (L159, T23, R213, B42)
   |    | ['视图(V)MenuItem', '视图(V)', 'MenuItem6']
   |    | child_window(title="视图(V)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '编码(N)'    (L214, T23, R270, B42)
   |    | ['编码(N)MenuItem', '编码(N)', 'MenuItem7']
   |    | child_window(title="编码(N)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '语言(L)'    (L270, T23, R323, B42)
   |    | ['语言(L)', '语言(L)MenuItem', 'MenuItem8']
   |    | child_window(title="语言(L)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '设置(T)'    (L322, T23, R376, B42)
   |    | ['设置(T)MenuItem', '设置(T)', 'MenuItem9']
   |    | child_window(title="设置(T)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '工具(O)'    (L376, T23, R432, B42)
   |    | ['工具(O)MenuItem', '工具(O)', 'MenuItem10']
   |    | child_window(title="工具(O)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '宏(M)'    (L432, T23, R478, B42)
   |    | ['宏(M)', '宏(M)MenuItem', 'MenuItem11']
   |    | child_window(title="宏(M)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '运行(R)'    (L478, T23, R532, B42)
   |    | ['运行(R)MenuItem', '运行(R)', 'MenuItem12']
   |    | child_window(title="运行(R)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '插件(P)'    (L533, T23, R587, B42)
   |    | ['插件(P)MenuItem', '插件(P)', 'MenuItem13']
   |    | child_window(title="插件(P)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '窗口(W)'    (L586, T23, R644, B42)
   |    | ['窗口(W)', '窗口(W)MenuItem', 'MenuItem14']
   |    | child_window(title="窗口(W)", control_type="MenuItem")
   |    | 
   |    | MenuItem - '?'    (L645, T23, R665, B42)
   |    | ['?MenuItem', '?', 'MenuItem15']
   |    | child_window(title="?", control_type="MenuItem")
   |    | 
   |    | MenuItem - 'X'    (L1514, T23, R1536, B42)
   |    | ['X', 'MenuItem16', 'XMenuItem']
   |    | child_window(title="X", control_type="MenuItem")

Process finished with exit code 0

从上边的内容中,找到【文件名】和【保存】备用。

3.3 代码设计

3.4 参考代码

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-05-06
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-10-pywinauto操作弹出文件选择框 (详细教程)
'''

# 3.导入模块
from pywinauto import Application
import time

app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
win = app['新文件 1 - Notepad++']
win.type_keys("北京-宏哥")
win.child_window(title="应用程序", auto_id="MenuBar", control_type="MenuBar")
# # 文件-另存为
win.menu_select('文件(F) -> 另存为(A)...')
# 等待另存为窗口出现
win.child_window(title="另存为", control_type="Window").wait('ready', timeout=5)
# # 输入文件名称
win.child_window(title="文件名:", control_type="Edit").type_keys("北京宏哥.txt")
win.print_ctrl_ids()
# # 保存
win.child_window(title="保存(S)", control_type="Button").click()

3.5 运行代码

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

2.运行代码后电脑端的动作(与测试场景一致)。如下图所示:

3.文件会默认保存到代码项目的根目录,查看如下图所示:

4.小结

4.1 常见问题与优化

  1. ‌控件定位失败‌
    • 使用 print_control_identifiers() 输出所有控件信息辅助调试。
    • 调整 backend 参数("win32""uia")适配不同应用。
  2. ‌异步弹窗延迟‌ 添加显式等待逻辑: save_dialog.wait("visible", timeout=10)
  3. ‌跨系统版本兼容性‌ 不同 Windows 版本可能调整弹窗控件结构,需针对性测试。

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

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up