💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

在这里插入图片描述

💖The Start💖点点关注,收藏不迷路💖


外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1. uiautomation概述

1.1 工具定位与核心优势

Python的uiautomation包是专为Windows平台设计的UI自动化工具,其核心优势体现在:

  • 跨技术栈支持:可操作Win32、WPF、UWP及浏览器等多种技术构建的界面元素
  • 底层技术优势:基于微软UI Automation API(比传统MSAA更现代)
  • 开发效率:Pythonic风格的API设计(对比C++实现的原始API)
  • 轻量级:无需额外部署服务,单包安装即可使用

典型代码对比(与PyWinAuto):

# PyWinAuto
app = Application().connect(title="记事本")
app.dlg.Edit.type_keys("text")

# uiautomation
edit = uiautomation.EditControl(Name="记事本")
edit.SendKeys("text")

1.2 典型应用场景

桌面应用自动化测试

  • 支持自动化验证GUI功能
  • 可集成到CI/CD流程

RPA流程自动化

  • 自动填写表单
  • 跨应用数据搬运(如从Excel到ERP系统)

辅助功能测试

  • 验证屏幕阅读器兼容性
  • 检查控件可访问性属性

1.3 环境配置

安装步骤:

pip install uiautomation --upgrade

系统要求:

  • Windows 7+
  • .NET Framework 4.0+
  • Python 3.6+

调试工具配置:

  1. 下载Windows SDK获取Inspect.exe
  2. 使用快捷键Win+Ctrl+U打开UIAViewer
  3. 通过鼠标悬停查看控件属性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2. 核心API详解

2.1 控件基础操作

控件树遍历示例:

# 获取桌面所有顶层窗口
for window in uiautomation.GetRootControl().GetChildren():
    print(window.Name)

常用属性获取:

button = uiautomation.ButtonControl(Name="确定")
print(f"控件类型: {button.ClassName}")
print(f"自动化ID: {button.AutomationId}")

2.2 高级定位策略

组合定位实战:

# 定位微信发送按钮
wechat_window = uiautomation.WindowControl(
    Name="微信",
    searchDepth=1
)
send_button = wechat_window.ButtonControl(
    AutomationId="SEND_BTN",
    searchDepth=2
)

正则表达式匹配:

# 匹配包含"Chrome"的窗口
chrome_windows = uiautomation.WindowControl(
    NameRegex=".*Chrome.*"
)

2.3 特殊控件处理

表格数据抓取示例:

grid = uiautomation.DataGridControl(Name="订单列表")
for row in grid.GetChildren():
    cells = row.GetChildren()
    print(f"第一列: {cells[0].Name}")

3. 实战案例解析

3.1 Notepad自动化

完整流程示例:

import uiautomation as auto

# 启动记事本
auto.Run("notepad.exe")
notepad = auto.WindowControl(
    Name="无标题 - 记事本",
    searchDepth=1
)

# 输入文本
edit = notepad.EditControl()
edit.SendKeys("自动化测试内容")

# 保存文件
notepad.MenuItemControl(Name="文件(F)").Click()
notepad.MenuItemControl(Name="另存为(A)...").Click()
save_dialog = auto.WindowControl(Name="另存为")
save_dialog.EditControl(Name="文件名:").SendKeys("test.txt")
save_dialog.ButtonControl(Name="保存(S)").Click()

3.2 浏览器自动化

Edge浏览器控制:

browser = auto.WindowControl(
    Name=".*Edge",
    RegexName=True
)
address_bar = browser.EditControl(
    Name="地址和搜索栏"
)
address_bar.SendKeys("https://example.com{ENTER}")

# 等待页面加载
search_box = browser.EditControl(
    Name="搜索",
    foundFunc=lambda: print("元素已加载")
)
search_box.WaitForExist(timeout=10)

4. 高级技巧与优化

4.1 性能优化策略

缓存控件实例示例:

class AppController:
    def __init__(self):
        self._main_window = None
    
    @property
    def main_window(self):
        if not self._main_window:
            self._main_window = auto.WindowControl(Name="主窗口")
        return self._main_window

4.2 常见问题解决方案

高DPI适配方案:

import ctypes
ctypes.windll.shcore.SetProcessDpiAwareness(2)  # 设置为PerMonitor模式

5. 生态对比与未来展望

5.1 竞品分析

技术对比表:

特性 uiautomation PyWinAuto Selenium
Windows支持 ★★★★★ ★★★★ ★★
Web支持 ★★★ ★★★★★
学习曲线 ★★★ ★★★★ ★★
执行速度 ★★★★ ★★★ ★★★

6. 总结

关键要点回顾:

  1. uiautomation是Windows平台UI自动化的轻量级解决方案
  2. 支持从简单脚本到企业级测试框架的开发
  3. 需结合Windows原生工具进行调试
  4. 在纯Windows环境下比Selenium等方案更高效

推荐学习路径:

  1. 掌握Inspect工具使用
  2. 练习基础控件操作
  3. 实现Page Object模式
  4. 集成到pytest测试框架

🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The Start💖点点关注,收藏不迷路💖

    <tr>
        <td width="50%">
            <div align="center"><font color="#E73B3E"><em>💖The Start💖点点关注,收藏不迷路💖<em></em></em></font></div>
        </td>
    </tr>
    </tbody>
</table>

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐