当前位置: 首页 > article >正文

Python-UIAutomation-for-Windows开发实践:从demo到实际项目的完整指南

Python-UIAutomation-for-Windows开发实践从demo到实际项目的完整指南【免费下载链接】Python-UIAutomation-for-Windows(Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...项目地址: https://gitcode.com/gh_mirrors/py/Python-UIAutomation-for-WindowsPython-UIAutomation-for-Windows是一个强大的Windows UI自动化库它封装了Microsoft UIAutomation API支持MFC、Windows Form、WPF、Modern UI(Metro UI)、Qt、IE、Firefox、Chrome等多种应用程序的自动化控制。无论你是想自动化日常办公任务还是开发复杂的GUI测试脚本这个库都能为你提供强大的支持。 Python-UIAutomation-for-Windows入门指南安装与配置首先通过pip安装uiautomation库pip install uiautomation安装完成后系统会在Python脚本目录下生成一个automation.py脚本文件你可以使用它来遍历和查看UI控件。运行automation.py -h可以查看帮助信息快速开始从demo入手项目提供了丰富的demo示例位于demos/目录中。这些demo覆盖了从基础到高级的各种应用场景自动化记事本demos/automation_notepad.py - 演示如何控制Windows记事本自动化计算器demos/automation_calculator.py - 支持不同Windows版本的计算器自动化Wireshark自动化demos/automation_wireshark_qt5.py - Qt5应用程序的自动化示例GitHub Desktop控制demos/automation_devicemanager.py - 现代桌面应用的自动化 理解UI控件树结构Python-UIAutomation-for-Windows的核心概念是UI控件树。每个应用程序的界面都可以看作是一个树状结构从桌面根节点开始到顶层窗口再到具体的控件元素。使用automation.py工具可以查看当前系统的UI控件树# 查看当前活动窗口的控件 automation.py -t 0 -n # 查看桌面及其子窗口 automation.py -r -d 1 -t 0️ 控件模式与操作方法不同的UI控件支持不同的操作模式。Python-UIAutomation-for-Windows提供了完整的控件模式支持让你能够执行点击、输入、选择等各种操作。基本控件操作示例import uiautomation as auto # 查找记事本窗口 notepad_window auto.WindowControl(searchDepth1, ClassNameNotepad) # 查找编辑框并输入文本 edit_control notepad_window.EditControl() edit_control.Click() edit_control.SendKeys(Hello, Python-UIAutomation!) # 查找菜单项并点击 notepad_window.MenuItemControl(Name文件(F)).Click() notepad_window.MenuItemControl(Name保存(S)...).Click() 实际项目开发实践1. 自动化测试框架集成在实际项目中Python-UIAutomation-for-Windows可以作为自动化测试框架的核心组件。以下是一个测试框架的示例结构test_automation/ ├── __init__.py ├── base_page.py # 页面基类 ├── calculator_page.py # 计算器页面对象 ├── notepad_page.py # 记事本页面对象 ├── test_calculator.py # 计算器测试用例 ├── test_notepad.py # 记事本测试用例 └── conftest.py # 测试配置2. 页面对象模式实现使用页面对象模式可以提高代码的可维护性# base_page.py import uiautomation as auto class BasePage: def __init__(self, window_nameNone, class_nameNone): self.window auto.WindowControl( searchDepth1, Namewindow_name, ClassNameclass_name ) def wait_for_window(self, timeout10): return self.window.Exists(timeout, 0.5) def capture_screenshot(self, filename): self.window.CaptureToImage(filename) # calculator_page.py from base_page import BasePage class CalculatorPage(BasePage): def __init__(self): super().__init__(window_nameCalculator, class_nameApplicationFrameWindow) def click_number(self, number): button self.window.ButtonControl(AutomationIdfnum{number}Button) button.Click() def click_operator(self, operator): operator_map { : plusButton, -: minusButton, *: multiplyButton, /: divideButton, : equalButton } button self.window.ButtonControl(AutomationIdoperator_map[operator]) button.Click()3. 复杂应用程序自动化对于像Wireshark这样的复杂Qt应用程序Python-UIAutomation-for-Windows同样能够胜任# automation_wireshark_qt5.py 示例 import uiautomation as auto import subprocess class WiresharkAutomation: def __init__(self): self.wireshark_path C:\\Program Files\\Wireshark\\Wireshark.exe def start_capture(self, interfaceWi-Fi): # 启动Wireshark subprocess.Popen(self.wireshark_path) # 查找主窗口 main_window auto.WindowControl( searchDepth1, ClassNameQWidget, RegexNameWireshark.* ) # 选择网络接口 interface_combo main_window.ComboBoxControl(AutomationIdcaptureInterfaceComboBox) interface_combo.Select(interface) # 开始抓包 start_button main_window.ButtonControl(NameStart capturing packets) start_button.Click() return main_window4. 现代桌面应用自动化GitHub Desktop等现代桌面应用也能轻松自动化# github_desktop_automation.py import uiautomation as auto import time class GitHubDesktopAutomation: def __init__(self): self.app auto.WindowControl( searchDepth1, ClassNameChrome_WidgetWin_1, NameGitHub Desktop ) def clone_repository(self, repo_url, local_path): # 点击克隆按钮 clone_button self.app.ButtonControl(NameClone a repository) clone_button.Click() # 输入仓库URL url_input self.app.EditControl(AutomationIdrepositoryUrlTextBox) url_input.SendKeys(repo_url) # 选择本地路径 path_button self.app.ButtonControl(NameChoose...) path_button.Click() # ... 更多自动化步骤 性能优化技巧1. 精确搜索提高效率# 不推荐搜索深度过大性能差 edit uiautomation.EditControl(searchDepth10, Namemyedit) # 推荐分层搜索性能好 window uiautomation.WindowControl(searchDepth1, NameMyWindow) panel window.PaneControl(searchDepth1, NameContentPanel) edit panel.EditControl(searchDepth1, Namemyedit)2. 使用WalkControl批量处理# 遍历窗口中的所有按钮 buttons [] for control, depth in auto.WalkControl(window): if control.ControlType auto.ControlType.ButtonControl: buttons.append(control) # 批量操作 for button in buttons: if Save in button.Name: button.Click()3. 异步操作处理import threading import uiautomation as auto def async_automation_task(): # 在新的线程中执行自动化操作 window auto.WindowControl(searchDepth1, ClassNameNotepad) edit window.EditControl() edit.SendKeys(Async automation task) # 启动异步任务 thread threading.Thread(targetasync_automation_task) thread.start() 项目结构与最佳实践项目目录结构my_automation_project/ ├── config/ │ ├── __init__.py │ ├── settings.py # 配置文件 │ └── constants.py # 常量定义 ├── core/ │ ├── __init__.py │ ├── base_automation.py # 自动化基类 │ ├── element_locators.py # 元素定位器 │ └── wait_strategies.py # 等待策略 ├── pages/ │ ├── __init__.py │ ├── calculator_page.py │ ├── notepad_page.py │ └── wireshark_page.py ├── tests/ │ ├── __init__.py │ ├── test_smoke.py # 冒烟测试 │ ├── test_regression.py # 回归测试 │ └── conftest.py # pytest配置 ├── utils/ │ ├── __init__.py │ ├── logger.py # 日志工具 │ ├── screenshot.py # 截图工具 │ └── report_generator.py # 报告生成器 ├── requirements.txt ├── README.md └── main.py # 主程序入口配置管理最佳实践# config/settings.py import os from pathlib import Path class Settings: # 路径配置 BASE_DIR Path(__file__).parent.parent SCREENSHOT_DIR BASE_DIR / screenshots LOG_DIR BASE_DIR / logs # 自动化配置 SEARCH_TIMEOUT 10 SEARCH_INTERVAL 0.5 CLICK_WAIT_TIME 0.1 # 应用程序路径 NOTEPAD_PATH notepad.exe CALCULATOR_PATH calc.exe WIRESHARK_PATH C:\\Program Files\\Wireshark\\Wireshark.exe classmethod def setup_directories(cls): 创建必要的目录 cls.SCREENSHOT_DIR.mkdir(exist_okTrue) cls.LOG_DIR.mkdir(exist_okTrue) # 初始化目录 Settings.setup_directories() 调试与问题排查1. 使用自动化日志import uiautomation as auto # 启用调试模式 auto.uiautomation.DEBUG_SEARCH_TIME True auto.uiautomation.DEBUG_EXIST_DISAPPEAR True # 设置全局超时 auto.uiautomation.SetGlobalSearchTimeout(15) # 使用Logger记录操作 auto.Logger.WriteLine(开始自动化操作, auto.ConsoleColor.Green) auto.Logger.Write(查找窗口..., writeToFileTrue)2. 控件定位问题排查当控件无法找到时可以使用以下方法排查# 打印控件树结构 def print_control_tree(control, depth0): indent * depth print(f{indent}{control.ControlType} - {control.Name}) for child in control.GetChildren(): print_control_tree(child, depth 1) # 查找所有匹配的控件 all_buttons [] for ctrl, _ in auto.WalkControl(auto.GetRootControl()): if ctrl.ControlType auto.ControlType.ButtonControl: all_buttons.append(ctrl) print(f找到按钮: {ctrl.Name} - {ctrl.AutomationId})3. 截图辅助调试# 捕获整个窗口 window.CaptureToImage(debug_window.png) # 捕获特定控件 button.CaptureToImage(debug_button.png) # 捕获带光标的截图 window.CaptureToImage(debug_with_cursor.png, captureCursorTrue) 从Demo到生产环境阶段1学习与实验运行demos/目录中的所有示例修改示例代码理解每个参数的作用创建自己的简单自动化脚本阶段2项目化改造将脚本重构为模块化代码添加配置管理和错误处理实现日志记录和报告生成阶段3集成与部署将自动化脚本集成到CI/CD流程添加定时任务调度实现远程执行和监控 实际应用案例案例1批量文件处理自动化import uiautomation as auto import os from pathlib import Path class BatchFileProcessor: def __init__(self): self.notepad None def open_notepad(self): 打开记事本 import subprocess subprocess.Popen(notepad.exe) self.notepad auto.WindowControl( searchDepth1, ClassNameNotepad ) return self.notepad.Exists(5, 1) def process_files(self, directory_path): 批量处理目录中的文本文件 directory Path(directory_path) for file_path in directory.glob(*.txt): self.process_single_file(file_path) def process_single_file(self, file_path): 处理单个文件 # 打开文件 self.notepad.MenuItemControl(Name文件(F)).Click() self.notepad.MenuItemControl(Name打开(O)...).Click() # 文件对话框操作 file_dialog auto.WindowControl(Name打开) filename_edit file_dialog.EditControl(AutomationId1148) filename_edit.SendKeys(str(file_path)) open_button file_dialog.ButtonControl(Name打开(O)) open_button.Click() # 文件内容处理 edit self.notepad.EditControl() content edit.GetValuePattern().Value # 在这里添加你的处理逻辑 processed_content content.upper() # 示例转换为大写 # 保存处理后的文件 edit.GetValuePattern().SetValue(processed_content) self.notepad.MenuItemControl(Name文件(F)).Click() self.notepad.MenuItemControl(Name保存(S)).Click()案例2GUI应用程序测试自动化import pytest import uiautomation as auto from pages.calculator_page import CalculatorPage class TestCalculator: pytest.fixture(autouseTrue) def setup(self): self.calculator CalculatorPage() yield # 测试结束后关闭计算器 self.calculator.window.GetWindowPattern().Close() def test_addition(self): 测试加法功能 self.calculator.click_number(2) self.calculator.click_operator() self.calculator.click_number(3) self.calculator.click_operator() # 验证结果 result self.calculator.get_display_value() assert result 5, f预期结果为5实际得到{result} def test_multiplication(self): 测试乘法功能 self.calculator.click_number(4) self.calculator.click_operator(*) self.calculator.click_number(5) self.calculator.click_operator() # 验证结果 result self.calculator.get_display_value() assert result 20, f预期结果为20实际得到{result} 总结与展望Python-UIAutomation-for-Windows为Windows平台上的GUI自动化提供了强大而灵活的解决方案。通过本文的指南你已经了解了基础概念UI控件树、控件模式、搜索策略开发实践从demo学习到实际项目开发性能优化精确搜索、批量处理、异步操作项目结构模块化设计、配置管理、测试集成调试技巧日志记录、控件树查看、截图调试无论是简单的桌面应用自动化还是复杂的企业级测试框架Python-UIAutomation-for-Windows都能提供可靠的支持。现在就开始你的Windows自动化之旅吧记住良好的自动化脚本应该具备清晰的代码结构、完善的错误处理、详细的日志记录和可维护的测试用例。随着你对Python-UIAutomation-for-Windows的深入理解你将能够构建出更加健壮和高效的自动化解决方案。【免费下载链接】Python-UIAutomation-for-Windows(Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...项目地址: https://gitcode.com/gh_mirrors/py/Python-UIAutomation-for-Windows创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

Python-UIAutomation-for-Windows开发实践:从demo到实际项目的完整指南

Python-UIAutomation-for-Windows开发实践:从demo到实际项目的完整指南 【免费下载链接】Python-UIAutomation-for-Windows (Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern U…...

MicroPython驱动ST7789v液晶屏:从字库处理到中文显示的完整实践

1. ST7789v液晶屏与MicroPython基础 ST7789v是中小尺寸TFT液晶屏常用的驱动芯片,我在多个嵌入式项目中都使用过它。这款芯片支持最高262K色的RGB显示,通过SPI接口通信,特别适合搭配ESP32、树莓派Pico等微控制器使用。市面上常见的2.4寸240x32…...

Stable Yogi 模型Python入门实战:从环境搭建到第一个皮革图像生成

Stable Yogi 模型Python入门实战:从环境搭建到第一个皮革图像生成 你是不是也经常在网上看到那些由AI生成的、质感超棒的皮革纹理图片,比如复古的皮包、精致的皮鞋,或者充满设计感的皮具?心里痒痒的,也想自己动手试试…...

TVBoxOSC无线投屏完全指南:多设备协同与电视大屏无缝连接

TVBoxOSC无线投屏完全指南:多设备协同与电视大屏无缝连接 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 你是否曾遇到过这样的场景&…...

Phi-4-Reasoning-Vision保姆级教学:从GPU检测到推理结果导出全流程

Phi-4-Reasoning-Vision保姆级教学:从GPU检测到推理结果导出全流程 1. 工具概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡RTX 4090环境优化。这个工具让普通开发者也能轻松体验15B参数大…...

OpenClaw长文本处理:Qwen3-32B-Chat32K上下文实测

OpenClaw长文本处理:Qwen3-32B-Chat32K上下文实测 1. 为什么需要测试长文本处理能力 去年我在处理一份300多页的技术文档时,发现大多数开源模型连20页的内容都记不住。这直接导致生成的摘要支离破碎,前后矛盾。当时就萌生了一个想法&#x…...

nlp_structbert_sentence-similarity_chinese-large部署案例:适配RTX 3060/4090的CUDA推理优化实践

nlp_structbert_sentence-similarity_chinese-large部署案例:适配RTX 3060/4090的CUDA推理优化实践 1. 引言:为什么你需要一个本地语义相似度工具? 想象一下这个场景:你正在处理一批用户反馈,需要找出那些意思相近的…...

Phi-4-Reasoning-Vision实战教程:自定义图片处理器适配PDF扫描件

Phi-4-Reasoning-Vision实战教程:自定义图片处理器适配PDF扫描件 1. 工具概览 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。它专为双卡RTX 4090环境优化,通过Streamlit搭建了直观的交互界面&am…...

罗技鼠标宏终极指南:5步实现绝地求生精准压枪

罗技鼠标宏终极指南:5步实现绝地求生精准压枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在绝地求生中总是压不住枪&#…...

Elm-SPA-Example 完整指南:构建现代化单页面应用的终极教程

Elm-SPA-Example 完整指南:构建现代化单页面应用的终极教程 【免费下载链接】elm-spa-example A Single Page Application written in Elm 项目地址: https://gitcode.com/gh_mirrors/el/elm-spa-example Elm-SPA-Example 是一个基于 Elm 语言构建的单页面应…...

MiroFish:预测万物的群体智能引擎解决方案

MiroFish:预测万物的群体智能引擎解决方案 【免费下载链接】MiroFish A Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎,预测万物 项目地址: https://gitcode.com/GitHub_Trending/mi/MiroFish M…...

终极指南:如何快速掌握Fiji生命科学图像分析开源工具

终极指南:如何快速掌握Fiji生命科学图像分析开源工具 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji是一款强大的开源生命科学图像分析平台,…...

Lens 库实战指南:高效掌握 Haskell 数据处理利器

Lens 库实战指南:高效掌握 Haskell 数据处理利器 【免费下载链接】lens Lenses, Folds, and Traversals - Join us on web.libera.chat #haskell-lens 项目地址: https://gitcode.com/gh_mirrors/len/lens Lens 是一个功能强大的 Haskell 库,提供…...

从临床数据到用药建议:maftools在癌症精准医疗中的完整实战流程

从临床数据到用药建议:maftools在癌症精准医疗中的完整实战流程 癌症基因组学正在重塑现代肿瘤诊疗模式。当一位肝癌患者的最新测序报告呈现在肿瘤科医生面前时,那些密密麻麻的基因突变列表究竟意味着什么?哪些突变真正驱动着肿瘤进展&#x…...

3.19 PowerBI进阶指南-利用ArcGIS地图实现精准地理位置可视化

1. 为什么需要ArcGIS地图可视化? 如果你经常用PowerBI做数据分析,肯定遇到过这样的尴尬:当你想在地图上展示销售网点分布、物流配送路线或者区域业绩对比时,PowerBI自带的Azure Maps居然无法显示中国地图。这个问题困扰了很多国内…...

Ollama本地模型管理:集成Phi-3-mini-128k-instruct的混合推理方案

Ollama本地模型管理:集成Phi-3-mini-128k-instruct的混合推理方案 对于很多刚开始接触本地大模型的朋友来说,Ollama是个非常友好的工具。它让下载、运行和管理模型变得像安装普通软件一样简单。但用久了可能会发现一个问题:本地电脑的算力毕…...

如何为LaTeX简历项目贡献代码:开源参与全流程指南

如何为LaTeX简历项目贡献代码:开源参与全流程指南 【免费下载链接】resume Software developer resume in Latex 项目地址: https://gitcode.com/gh_mirrors/res/resume 参与开源项目是提升技能、建立专业网络的绝佳方式。本文将以GitHub加速计划中的res/res…...

LaTeX简历模板终极指南:5个让HR眼前一亮的排版秘诀

LaTeX简历模板终极指南:5个让HR眼前一亮的排版秘诀 【免费下载链接】resume Software developer resume in Latex 项目地址: https://gitcode.com/gh_mirrors/res/resume 在竞争激烈的求职市场中,一份专业且视觉吸引力强的简历是脱颖而出的关键。…...

Visual Studio调试实战:优化PDB与二进制文件路径配置技巧

1. PDB文件与二进制文件的调试基础 第一次在Visual Studio里调试程序时,我盯着那个"未加载符号"的提示框足足发了五分钟呆。后来才知道,这背后是一整套关于PDB文件和二进制文件路径管理的学问。简单来说,PDB文件就像是源代码和编译…...

3步掌握CodePilot:从零搭建你的AI代码搜索桌面应用

3步掌握CodePilot:从零搭建你的AI代码搜索桌面应用 【免费下载链接】codepilot The code search service to rule them all and in a dark theme, bind them. 项目地址: https://gitcode.com/gh_mirrors/cod/codepilot CodePilot是一款基于ElectronVue.js开发…...

从理论到实践:EVA-02模型背后的Transformer架构深入浅出

从理论到实践:EVA-02模型背后的Transformer架构深入浅出 如果你对AI模型感兴趣,尤其是像EVA-02这样能出色完成文本重构任务的模型,那你一定绕不开一个词:Transformer。你可能在很多地方都听过它,感觉它很厉害&#xf…...

基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统从零构建实战

1. 项目背景与核心价值 第一次拿到STM32MP157开发板时,我盯着这个巴掌大的板子有点发懵——这玩意儿真能跑人脸识别?事实证明它不仅能够,还能跑得很流畅。这个基于Cortex-A7内核的跨界处理器,配合OpenCV这个计算机视觉界的"瑞…...

别再手动查天气了!用Python和MCP给Claude做个专属天气助手(附完整代码)

打造智能天气助手:Python与MCP的无缝集成实战 每次出门前都要打开天气应用查看预报?在不同工具间反复切换查询天气信息?这种低效操作已经成为过去式。今天我们将用Python和MCP协议为Claude打造一个专属天气助手,让你直接通过对话获…...

【技术突破】通过进程优先级调控解决ACE-Guard资源占用问题的完整指南

【技术突破】通过进程优先级调控解决ACE-Guard资源占用问题的完整指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 如何精准定位资源占用异常&#xf…...

Qwen3跨平台GUI开发:基于Qt框架打造桌面级字幕工具

Qwen3跨平台GUI开发:基于Qt框架打造桌面级字幕工具 最近有不少朋友在问,有没有那种既好用又能在自己电脑上离线运行的字幕生成工具?毕竟现在很多在线服务要么有隐私顾虑,要么网络不稳定,处理个长视频还得提心吊胆。正…...

SJTUThesis终极实战:3种高效集成方案深度解析

SJTUThesis终极实战:3种高效集成方案深度解析 【免费下载链接】SJTUThesis 上海交通大学 LaTeX 论文模板 | Shanghai Jiao Tong University LaTeX Thesis Template 项目地址: https://gitcode.com/gh_mirrors/sj/SJTUThesis 作为上海交通大学官方LaTeX论文模…...

终极免费视频播放器:MPC-BE让你体验专业级影音享受

终极免费视频播放器:MPC-BE让你体验专业级影音享受 【免费下载链接】MPC-BE MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows. 项目地址: https…...

Larastan集合操作优化终极指南:避免不必要的toArray调用提升性能

Larastan集合操作优化终极指南:避免不必要的toArray调用提升性能 【免费下载链接】larastan ⚗️ Adds code analysis to Laravel improving developer productivity and code quality. 项目地址: https://gitcode.com/gh_mirrors/la/larastan Larastan为Lar…...

AI项目从0到1:制造业企业如何用大模型+微调搞定质检与物流(附实战模板)

AI项目从0到1:制造业企业如何用大模型微调搞定质检与物流(附实战模板) 在东莞一家电子元件厂的质检车间里,质检员王师傅每天需要检查超过2000个精密连接器的外观缺陷。这种高强度工作不仅容易导致视觉疲劳,漏检率也长…...

gh_mirrors/bb/bbs-go数据库索引设计:查询性能提升指南

gh_mirrors/bb/bbs-go数据库索引设计:查询性能提升指南 【免费下载链接】bbs-go 基于Golang的开源社区系统。 项目地址: https://gitcode.com/gh_mirrors/bb/bbs-go gh_mirrors/bb/bbs-go是基于Golang的开源社区系统,提供文章、话题、用户互动等核…...