Python uiautomation初探,测试Win10计算器

article/2025/10/15 4:57:48

在网上找 Python 客户端自动化测试的库,一般有 pywinauto、pywin32、pyautogui、uiautomation。本文仅对 uiautomation 做简单的了解。

MS UI Automation 是 MSAA 技术的一个替代品:即让控件和应用程序具有更好的可达性(accessible)。MS UIA明确定义了两个role:UIA Provider 即软件本身,主要是软件的开发人员依据相应的模式去实现相关的 interface, UIA Client 即自动化脚本和相关的 assistive technology applications,从测试人员的角度出发,主要是调用相应的API去实现自动化测试脚本。

而 uiautomation 的作者根据微软手册,用 Python 和 C++ 对 UI Automation 做了一层封装。

MS UI Automation概述:https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-overview

作者博客:开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt - YinKaisheng - 博客园

Github地址:https://github.com/yinkaisheng/Python-UIAutomation-for-Windows

参考博客:Uiautomation 在Windows WPF和Qt 产品上的应用_yaoliuwei1426的博客-CSDN博客

参考博客:MS UI Automation简介_ffeiffei的专栏-CSDN博客_uiautomation

根据作者提供的示例,我对 Win10 计算器做了简单的计算测试,代码如下:

import subprocess
import uiautomation as uia# 设置全局搜索超时 15s
uia.uiautomation.SetGlobalSearchTimeout(15)# 测试Win10计算器
def test_calc():# 启动计算器进程subprocess.Popen(args='calc.exe')# 首先从桌面的第一层子控件中找到程序的窗口,再从这个窗口查找子控件window = uia.WindowControl(searchDepth=1, ClassName='ApplicationFrameWindow', Name='计算器')# 窗口置顶window.SetTopmost(True)# 根据文档描述,直接从顶层找空间的效率较低,因为每次找都需要去遍历# 所以这里可以根据inspect查看到的对象树来逐层找# Name/ClassName/AutomationId都是UIAutomation属性,可以通过工具查看到,类似于网页的选择器window_main = window.Control(searchDepth=1, ClassName='Windows.UI.Core.CoreWindow')button_group = window_main.Control(searchDepth=1, ClassName='LandmarkTarget')number_group = button_group.Control(searchDepth=1, Name='数字键盘')calc_group = button_group.Control(searchDepth=1, Name='标准运算符')# 模拟按键window.SendKeys('1')#number_group.ButtonControl(Name='一').Click()calc_group.ButtonControl(Name='加').Click()number_group.ButtonControl(Name='四').Click()calc_group.ButtonControl(Name='等于').Click()result = button_group.Control(AutomationId='NormalOutput').Nameprint("测试结果:", result, ' bytes:', bytes(result, encoding='utf8').hex())# 获取到的文本前后有不可见字符,这里先替换掉result = result.replace(b'\xe2\x80\xad'.decode('utf8'), '').replace(b'\xe2\x80\xac'.decode('utf8'), '')print("测试结束,预期=5,实际={0},{1}".format(result, "测试通过" if result == "5" else "测试失败"))# 通过复制粘贴获取,这样得到的文本没有其他字符window.SendKeys('{Ctrl}c', waitTime=1)result = uia.GetClipboardText()print("测试结果:", result, ' bytes:', bytes(result, encoding='utf8').hex())# 截图并保存到指定路径window.CaptureToImage('C:/Users/1992/Pictures/1.png')# 关闭程序#window.ButtonControl(Name='关闭').Click()window.GetWindowPattern().Close()if __name__ == '__main__':test_calc()

测试结果:

 

 


http://chatgpt.dhexx.cn/article/xStVIHPk.shtml

相关文章

UIAutomation 自动化

Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active Accessibility。UI Automation在某些方面超过了MSAA,UI自动化提供了Windows Vista中,微软…

Python UI自动化 编程(一) UIAutomation

Python UI自动化 编程 第一章 Python UI自动化 编程入门之打开文件夹双击文件 文章目录 Python UI自动化 编程前言一、什么是Python UI自动化 编程二、环境说明1、Python环境:Python 3.82、IDE: Pycharm3、使用的库:UIAutomation 三、使用步…

【python】UI自动化-uiautomation

UI自动化-uiautomation 0- 前言1- inspect2- uiautomation3- 【实战】RustDesk软件自动 安装、指定服务器信息4- 参考文章 0- 前言 做应用程序自动点击的记录,暂不完整,仅供参考。参考多位大佬文章,链接在后面涉及工具 inspect【应用程序元素…

CAD 双击实体事件

CAD本身为我们提供的双击事件的设置。工具-工作空间-自定义...打开用户自定界面 窗体内找到双击动作。在双击动作下我们可以看到CAD自带的所有实体 例如我们在双击三维实体时自定义一个事件。那么我们就选中三维实体-快捷特性。在右侧特性里编辑宏内容。以下是系统彼带的宏$M$(…

深入探索透视投影变换(续)

-潘宏 -2009.4.14 -本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyynetease.com -B站专栏: https://b23.tv/oWsl6PD 在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视…

凯文·凯利:AI将改变一切设计工作

每一项新技术诞生之初都会引发新一轮科技恐慌周期,近期大火的AI生成艺术更是如此。连线杂志创始主编、知名科技思想家凯文凯利(Kevin Kelly)在6个月重度使用之后认为,这次AI进展的确是一次令人震惊的突破。但是,它不会…

鼠标双击退出应用程序简单实现

文章目录 Android 简单模拟鼠标双击退出应用程序,利用Toast提示“再点一次退出”使用Toast鼠标单击提示信息鼠标双击实现退出系统 Android 简单模拟鼠标双击退出应用程序,利用Toast提示“再点一次退出” 使用Toast // 参数:当前上下文环境&…

如何用JavaScript完美地区分双击和单击事件

通过一个悬浮球交互功能的案例来阐述问题,以及解决办法。 实现效果 类似微信里的悬浮窗效果,苹果手机的悬浮球功能效果 1.可以点击拖动,然后吸附在窗口边缘2.点击悬浮球,可以跳转界面,或者更改悬浮球的形态准备 1.移…

单机显示、双击隐藏;事件绑定、单击div、双击div、删除事件;元素显示、隐藏、交替; 向上收缩、向下展开、交替;淡入淡出

单机显示、双击隐藏 <style>div {width: 500px;height: 200px;background-color: green;display: none;} </style> <body><button id"btn">单击显示&#xff0c;双击隐藏</button><br><br><div> </div&…

干货分享 | UE游戏鼠标双击判定

UE虚幻引擎对于游戏开发者来说都不陌生&#xff0c;市面上有47%主机游戏使用虚幻引擎开发游戏。作为是一款游戏的核心动力&#xff0c;它的功能十分完善&#xff0c;囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图等。本文介绍了虚幻引擎游戏开发过程中游戏鼠标双击判…

鼠标单击变双击问题

解决此问题可以从硬件和软件两方面思考角度入手:我们先把鼠标插在别人的机器上使用,如果没发现问题可能是软件问题,若发现同样的问题则可能是硬件方面的问题。 软件方面:(1)病毒导致将杀毒软件病毒库更新至最新版,全盘扫描。 (2)鼠标属性设置不当我们打开控制面板-&…

鼠标双击事件

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) java中没有给出鼠标双击事件&#xff0c;虽然可以通过事件源e.getClickCount()2来判断鼠标点击次数&#xff0c;但是执行双击事件的同时也执行了单击事件&#x…

关于双击与单击事件冲突解决方案

有时候会要需求要求&#xff0c;比如附件&#xff0c;单击查看详情&#xff0c;双击下载文件时遇到的双击单击事件同时绑定一个节点。 比如单击click&#xff0c;dlbclick同时绑定时&#xff0c;双击会同时触发&#xff0c;而且click会触发两次。单用click来处理双击单击同时存…

TRUE PARTNER迎来戴维斯双击,资产规模业绩双增长

配图来自Canva可画 2020年可谓是黑天鹅乱舞的一年&#xff0c;新冠疫情肆虐全球&#xff1b;原油危机引发的资本市场动荡&#xff1b;地缘政治冲突以及美国大选&#xff0c;市场处于时不时来一波的上蹿下跳的状态当中。 在资本市场波动加剧的大环境中&#xff0c;有这样一家奇…

慧择业务布局成效明显,戴维斯双击可期

“没有一个冬天不会过去&#xff0c;没有一个春天不会到来”。 过去的一年&#xff0c;美股市场波折不断&#xff0c;尤其是2020年3月份的4次熔断&#xff0c;让股神巴菲特都惊呼“活久见”。 过去的一年&#xff0c;美股市场惊喜不断&#xff0c;道琼斯指数更是在2020年11月创…

流动性持续改善,佳源国际迎来“戴维斯双击”?

随着上半年密集的救市政策出台&#xff0c;房地产行业迎来触底回暖。 5月&#xff0c;央行以不低于市场报价利率20个基点调整首套房贷款利率下限&#xff0c;这也让当前金融环境在近几年处于较为宽松的阶段。 据克而瑞研究中心观点&#xff0c;因冲刺年中业绩&#xff0c;房企…

湖人詹姆斯 戴维斯 拉塞尔三人合体就赢!

湖人主力詹姆斯&#xff08;LeBron James&#xff09;球星成为NBA新历史得分王后&#xff0c;连3战因伤缺席&#xff0c;今天主场对抗鹈鹕终于回归&#xff0c;和戴维斯&#xff08;Anthony Davis&#xff09;、拉塞尔&#xff08;DAngelo Russell&#xff09;三人连线&#xf…

九龙证券|游戏板块或继续迎来业绩估值“戴维斯双击”

机构指出&#xff0c;AIGC技术及产品现在已在游戏职业有部分使用&#xff0c;中长期来看&#xff0c;对游戏制作的降本增效、内容质量进步有较强的促进作用&#xff1b;当前游戏版号常态化发放&#xff0c;政策端不确定性降低&#xff0c;预计产品周期是成绩的要害驱动&#xf…

戴维斯双击背后的故事 - 读《戴维斯王朝》

一、序言 作为一个对炒股知识孤陋寡闻的新手&#xff0c;我最近才听说「戴维斯双击」&#xff0c;于是买了《戴维斯王朝》了解了一下戴维斯本人以及他的成功故事。看完书后&#xff0c;我感觉戴维斯本人还真算是一段传奇经历。 戴维斯的投资回报率和巴菲特对等&#xff0c;他投…

科普一下,什么是戴维斯双击和戴维斯双杀?

创业板受到多重利空压制而大跌&#xff0c;上证也受到拖累&#xff0c;只有上证50小幅翻红。创业板依然是下跌趋势&#xff0c;不要瞎猜底部&#xff0c;更不要轻易抄底&#xff0c;要以均线为准&#xff0c;反弹站上5日线才有短线机会。主板部分板块仍然是处于上升趋势&#x…