Python uiautomation初探,测试Win10计算器
在网上找 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()
测试结果:
Python uiautomation初探,测试Win10计算器相关推荐
- python uiautomation选择list内容_蜗牛笔记-文章-UIAutomation运用
UIAutomation支持多种语言,这里就通过python来调用.UIAutomation是第三方库,所以首先需要安装库pip install uiautomation.先用UIAutomation ...
- python积分计算_fx-CG系列图形计算器CAS应用程序Khicasen
[作者声明] 本文所有文字均为作者原创,所有图片均为作者本人真实制作. 版权所有,仅供阅读欣赏,严禁任何单位或个人以任何形式转载.复制.引用.抄袭.截图.模仿.翻译本评测的部分或全部内容(包括但不限于 ...
- python行为驱动测试开发_行为驱动开发在 Python 开发测试中的应用
行为驱动开发 (BDD) 简介 行为驱动开发是什么? 说到行为驱动开发(BDD),无可避免的要提到敏捷里面的测试驱动开发(TDD),TDD 的主要思想是"代码即文档",其倡导的流程 ...
- Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)
Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...
- Python Web 开发 – 在线web计算器
Python Web 开发 – 在线web计算器 本文环境: Python-3.10.2 Visual Studio Code-1.65.2 Django-4.0.3 Bootstrap-5.1.3 ...
- 适用于winform程序的UI自动化实现(python+uiautomation)
适用于winform程序的UI自动化实现(python+uiautomation) 一.使用的工具和库 定位工具:inspect(提取码:kvwx).UISpy(提取码:ab0e) python库使用 ...
- 微软:超过96%的企业用户正在测试Win10
在近期举行的WPC2016大会上,微软宣布有超过96%的企业用户正在测试Win10系统,Windows10是历代Windows系统中普及最快的,也是史上最安全的Windows系统,更加易于管理和创造个 ...
- python模块os测试文件是否存在及基础原信息获取
python模块os测试文件是否存在及基础原信息获取 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路 ...
- 进击的Python【第一章】:Python背景初探与Python基础(一)
Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...
最新文章
- 大势所趋!Octane Raceway开辟VR竞技场
- cpp 怎么连接mysql_C++连接mysql数据库的两种方法
- 阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器
- 如何让神经网络把熊猫识别为秃鹫
- (十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
- java报错 pom.xml第一行报org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project......
- 2019牛客多校第七场E Find the median 权值线段树+离散化
- 利用innerHTML实现隐显效果-两种实现方法
- ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
- asp.net下url参数含有中文读取后为乱码
- rust: 写CTP策略中的几个难点
- mysql物业管理系统设计_小区物业管理系统的设计与实现(IDEA,SSM,MySQL)
- 物联网LoRa系列-2:LoRa系统架构与协议栈详解
- python调用按键精灵插件_按键精灵WQM软件使用说明书,资深老师讲解就是详细
- balenaEtcher-1.5.70可能是最好用的镜像写U盘工具 img to usb dmg to usb支持多种格式内附截图介绍多平台均有
- 台式计算机如何自动关机,台式电脑如何设置定时关机
- bwt比对算法 C语言,BWT比对算法
- 音频编码-G.711
- 分享 | 日置3561电池测试仪调零/自校准详解教程
- 手机屏幕显示正常但是触摸有一部分出问题,是内屏坏了吗?保修期内手机该不该走官方售后?
热门文章
- 淘晶驰串口屏入门(四)进度条、滑块、定时器、单选框、复选框、二维码
- 细节很重要 - 平安信用卡的注销
- 让python飞:形象理解python os模块、内存硬盘、字节字符、文件读写复制
- 微信公众号获取的实时坐标和高德地图坐标系的转换
- 2022G2电站锅炉司炉考试模拟100题及模拟考试
- java 停止定时器_Java/Android计时器(开始,暂停,恢复,停止)
- [渝粤教育] 南阳医学高等专科学校 传染病护理 参考 资料
- JVM常用参数与工具
- mysql5.6.1安装步骤_mysql5.6安装步骤
- 【MATLAB教程案例15】基于WOA鲸鱼优化算法的函数极值计算matlab仿真及其他应用