在网上找 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计算器相关推荐

  1. python uiautomation选择list内容_蜗牛笔记-文章-UIAutomation运用

    UIAutomation支持多种语言,这里就通过python来调用.UIAutomation是第三方库,所以首先需要安装库pip install uiautomation.先用UIAutomation ...

  2. python积分计算_fx-CG系列图形计算器CAS应用程序Khicasen

    [作者声明] 本文所有文字均为作者原创,所有图片均为作者本人真实制作. 版权所有,仅供阅读欣赏,严禁任何单位或个人以任何形式转载.复制.引用.抄袭.截图.模仿.翻译本评测的部分或全部内容(包括但不限于 ...

  3. python行为驱动测试开发_行为驱动开发在 Python 开发测试中的应用

    行为驱动开发 (BDD) 简介 行为驱动开发是什么? 说到行为驱动开发(BDD),无可避免的要提到敏捷里面的测试驱动开发(TDD),TDD 的主要思想是"代码即文档",其倡导的流程 ...

  4. Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)

    Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...

  5. Python Web 开发 – 在线web计算器

    Python Web 开发 – 在线web计算器 本文环境: Python-3.10.2 Visual Studio Code-1.65.2 Django-4.0.3 Bootstrap-5.1.3 ...

  6. 适用于winform程序的UI自动化实现(python+uiautomation)

    适用于winform程序的UI自动化实现(python+uiautomation) 一.使用的工具和库 定位工具:inspect(提取码:kvwx).UISpy(提取码:ab0e) python库使用 ...

  7. 微软:超过96%的企业用户正在测试Win10

    在近期举行的WPC2016大会上,微软宣布有超过96%的企业用户正在测试Win10系统,Windows10是历代Windows系统中普及最快的,也是史上最安全的Windows系统,更加易于管理和创造个 ...

  8. python模块os测试文件是否存在及基础原信息获取

    python模块os测试文件是否存在及基础原信息获取 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路 ...

  9. 进击的Python【第一章】:Python背景初探与Python基础(一)

    Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...

最新文章

  1. 大势所趋!Octane Raceway开辟VR竞技场
  2. cpp 怎么连接mysql_C++连接mysql数据库的两种方法
  3. 阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器
  4. 如何让神经网络把熊猫识别为秃鹫
  5. (十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
  6. java报错 pom.xml第一行报org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project......
  7. 2019牛客多校第七场E Find the median 权值线段树+离散化
  8. 利用innerHTML实现隐显效果-两种实现方法
  9. ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
  10. asp.net下url参数含有中文读取后为乱码
  11. rust: 写CTP策略中的几个难点
  12. mysql物业管理系统设计_小区物业管理系统的设计与实现(IDEA,SSM,MySQL)
  13. 物联网LoRa系列-2:LoRa系统架构与协议栈详解
  14. python调用按键精灵插件_按键精灵WQM软件使用说明书,资深老师讲解就是详细
  15. balenaEtcher-1.5.70可能是最好用的镜像写U盘工具 img to usb dmg to usb支持多种格式内附截图介绍多平台均有
  16. 台式计算机如何自动关机,台式电脑如何设置定时关机
  17. bwt比对算法 C语言,BWT比对算法
  18. 音频编码-G.711
  19. 分享 | 日置3561电池测试仪调零/自校准详解教程
  20. 手机屏幕显示正常但是触摸有一部分出问题,是内屏坏了吗?保修期内手机该不该走官方售后?

热门文章

  1. 淘晶驰串口屏入门(四)进度条、滑块、定时器、单选框、复选框、二维码
  2. 细节很重要 - 平安信用卡的注销
  3. 让python飞:形象理解python os模块、内存硬盘、字节字符、文件读写复制
  4. 微信公众号获取的实时坐标和高德地图坐标系的转换
  5. 2022G2电站锅炉司炉考试模拟100题及模拟考试
  6. java 停止定时器_Java/Android计时器(开始,暂停,恢复,停止)
  7. [渝粤教育] 南阳医学高等专科学校 传染病护理 参考 资料
  8. JVM常用参数与工具
  9. mysql5.6.1安装步骤_mysql5.6安装步骤
  10. 【MATLAB教程案例15】基于WOA鲸鱼优化算法的函数极值计算matlab仿真及其他应用