转转牵头投资建立B2B二手交易平台“菜货侠”,深度探索二手手机产业链
06-18
1简介我一直在使用Python进行自动化测试。最近遇到需要对桌面软件进行自动化测试,即Windows GUI。
Python 的 GUI 自动化测试工具有很多,但它们都有不同的侧重点。这次我会详细解释为什么选择uiautomation进行测试。
2 PythonGUI 工具 2.1 常用 PythonGUI 编程工具的详细介绍,请参考:简介 wxPython 是 Python 语言的一个优秀的 GUI 图形库,可以让 Python 程序员轻松为 Kivy OS X 和 Android Flexx 创建具有完整功能键的完整 GUI 用户界面它是一个用于创建图形界面应用程序的纯Python工具包。它使用Web技术进行界面渲染。
您可以使用 Flexx 创建桌面应用程序,还可以将应用程序导出到独立的 HTML 文档。由于Flexx是用纯Python开发的,所以它是跨平台的。
PyQt PyQt4 支持 Qt4。它也是在 2008 年首次发布,但当时被称为 PyKDE,因为 SIP 和 PyQt 一开始就没有分开。
PyQt 是用 SIP 编写的。 PyQt提供GPL版本和商业版本Tkinter。
Pywin32允许你像VC一样使用PYTHON开发win32应用程序。 PyGTK 常用Python GUI自动化测试工具详细对比参考: 应用程序类,用于应用程序管理(打开和关闭应用程序等)、窗口管理(最小化、最大化、关闭窗口) Pywin32 win32gui、win32api、win32con 3个子模块,用于窗口管理(定位窗口、显示和关闭窗口、获取窗口位置等) pyautogui 说明 经过前面的介绍,我们主要使用用例来进行自动化测试,不再需要所有的 pythonGUI 编程工具。
常用的三种python GUI自动化测试工具支持的平台有限,所以经过一番折腾,看到一位高手在使用uiautomation,验证了该工具非常好用,而且很好用。3 uiautomation简介 3.1 作者的博客 uiautomation信息获取博客:一般内容 uiautomation是作者业余时间开发的一个供自己使用的python模块;所以安装时,直接: 代码语言:python 代码运行次数:0 复制Cloud Studio代码,运行 pip install uiautomationUIAutomation实现的自动化支持微软提供的各种界面开发框架,如Win32、MFC、Windows Forms、WPF、 Metro 应用程序、IE;另外,Qt、Firefox、Chrome实现了UI Automation Provider,也支持UIAutomation;作者使用Python和C++封装了UIAutomation,方便自己使用,可以快速开发自动化脚本; UIAutomation支持平台包括Windows XP (SP3)、Windows Vista、Windows 7、Windows 8、8.1和10; 4 如何使用 uiautomation 4.1 常用方法 代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 1. WindowContrl(searchDepth,ClassName,SubName) # 查找窗口中的程序。
如果有中文则需要使用Unicode;你可以使用window.Exists(maxSearchSeconds)来判断这个窗口是否存在? 2. EditControl(searchFromControl) # 搜索编辑位置。找到后,可以使用DoubleClick()来改变计算机的焦点; edit.SetValue("string") 输入值; 3. Win32API.SendKeys("string") # 如果已经处于编辑位置,可以使用该方法输入值。
{Ctrl}为ctrl键,其他类似; {@8}格式可以输入8个@。这个功能对于数字也可以实现,但是不能用于字母……; 4. MenuItemControl(searchFromControl,Name) # 搜索菜单按钮; 5. ComboBoxControl(searchFromControl,AutomationI) # 搜索下拉框,然后使用Select("name")方法选择需要的选项;6.BottonControl(searchFromControl,Name,SubName) # 搜索按钮;7.automation.FindControl(firefoxWindow, lambda c:(isinstance(c,automation.EditControl)或isinstance(c,automation.ComboBoxControl)) and c.Name = = '输入您的搜索词') # 按条件搜索handle4.2 常用操作代码语言:python 代码运行次数:3 复制Cloud Studio代码并运行 Click() # Click; RightClik() # 右键单击??; SendKeys() # 发送字符; SetValue() # 传递值,一般用于EditControl; 4.3 windows程序常用操作代码语言:python 代码运行次数: 1 复制Cloud Studio代码并运行 subprocess.Popen('Name') # 用进程打开程序; window.Close() # 关闭窗口; window.SetActive() # 使用; window.SetTopMost() # 设置为顶层 window.ShowWindow(uiautomation.ShowWindow.Maximize) # 最大化窗口 window.CaptureToImage('Notepad.png') # 截屏 uiautomation .Win32API.PressKey(uiautomation.Keys.VK_CONTROL) # 按住 Ctrl 键 uiautomation.Win32API.ReleaseKey(uiautomation.Keys.VK_CONTROL) # 释放 Ctrl 键 Automation.GetConsoleWindow() # 返回运行 python 的控制台窗口,打开控制台自动化。
Logger.ColorfulWriteLine('\n我将打开
') # 控制台传递值(彩色字体),正常值传递WriteLine; Automation.ShowDesktop() # 显示桌面; 4.4 抓取句柄直接运行自动化模块枚举窗口 从 doc 窗口运行 Automation.py 程序时,支持以下参数: 代码语言:python 代码运行次数:0 Copy Cloud Studio code run -t intValue 延迟枚举时间,以秒为单位 -r 从树根开始枚举,如果不指定,则从当前窗口开始枚举 -d intValue 枚举控件树的深度,如果不指定,则枚举整个树 -f 从焦点控件开始枚举,如果不指定,从当前窗口开始枚举 -c 从光标下控件枚举,如果不指定,从当前窗口开始枚举 -a 获取光标下的控件及所有父控件 -n 显示控件的完整名称,如果不指定,只显示前30个字符 -m 显示控件的更多属性,默认只显示控件的四个属性。代码语言:python 代码运行次数:0 复制Cloud Studio代码运行示例:automation.pyc –t3,3秒后枚举当前窗口中的所有控件automation.pyc –d2 –t3,3秒后枚举前三层控件当前窗口中automation.pyc –r –d1 –t0 -n,0秒后从根开始枚举前两层控件,并显示控件全名automation.pyc –c –t3,显示鼠标后3秒 光标下的控件信息 5 控件定位 使用Inspect.exe工具进行控件识别定位 在线下载软件,双击打开,如下: 此处插入图片说明 设置定位控件高亮 此处插入图片说明 示例:例如打开一个计算器 最后标识该控件的信息如下 此处插入图片说明 6 工程实例 6.1 实例说明 1. 打开本地计算器软件; 2. 输入 2 个计算结果 3. 对结果的准确性进行断言 6.2 示例代码 代码语言:python 代码运行次数:3 复制 Cloud Studio 代码并运行 # -*-coding:utf-8 -*-import unittestimportloggingimport timeimport uiautomationimport os# @unittest.skip("skip")class TestFaultTree(unittest.TestCase): def setUp(self) -> None: #初始化 os.system("calc") #打开计算器 time.sleep(2) self.calc = uiautomation.WindowControl(Name="Calculator") self. calc_list = ["二", "加", "八", "等于"] self.result = "10" deftearDown(self) -> None: time.sleep(1) self.calc.ButtonControl(Name= " 关闭计算器").Click() def test_toolbar(self): time.sleep(1) for i in range(0, len(self.calc_list)): self.calc.ButtonControl(Name=self.calc_list[i ] ).Click() time.sleep(0.5) calc_result = self.calc.TextControl(foundIndex=3).Name print("计算器的结果是:", calc_result) print("预期结果是:", self.result ) self.assertIn(self.result, calc_result)if __name__ == "__main__": unittest.main()7 示例效果,此处插入图片描述 8 将会发布一系列文章,主要讲解如何构建一个windows GUI自动化测试框架从0到1。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-06
06-18
06-17
06-18
06-18
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用