相关文章推荐
小胡子的瀑布  ·  语句 - PowerShell | ...·  1 年前    · 
焦虑的水煮肉  ·  调用MGS ...·  1 年前    · 
深情的长颈鹿  ·  海康机器视觉工业相机客户端MVS-介绍与使用 ...·  2 年前    · 
坏坏的消防车  ·  一些零散的python模块笔记 - 简书·  2 年前    · 
怕老婆的红金鱼  ·  Java与Json:Json语言语法格式以及 ...·  2 年前    · 
Code  ›  Pywinauto之Windows UI 自动化1开发者社区
软件 pywinauto win32
https://cloud.tencent.com/developer/article/1515369
玉树临风的口罩
2 年前
作者头像
用户6367961
0 篇文章

Pywinauto之Windows UI 自动化1

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 自学测试之道 > Pywinauto之Windows UI 自动化1

Pywinauto之Windows UI 自动化1

作者头像
用户6367961
发布 于 2019-09-29 14:23:49
6.1K 1
发布 于 2019-09-29 14:23:49
举报

前言,公司要搭建自动化测试环境,涉及到对设备软件的烧录操作,在网上找了些资料,发现pywinauto这个python库,能很好的支持PC端跑自动化,为此,记录下学习过程

一、环境搭建

1、pywinauto安装:pip install -U pywinauto

安装完成后在终端中输入:from pywinauto.application import Application若没有出现错误提示,则说明该模块安装成功,相关pywinauto操作指引详见

官方文档https://pywinauto.readthedocs.io/en/latest/getting_started.html

2、工具介绍

Spy++ (定位元素工具(win32))

Inspect(定位元素工具(uia))

UI Spy (定位元素工具)

Swapy(可简单生成pywinauto代码)

二、pywinauto操作使用

1、导入模块from pywinauto.application import Application

2、判断是被测对象是什么语言,如官方文档所示,主要是判断backend是什么类别

Once you have installed pywinauto - how do you get going? The very first necessary thing is to determine which accessibility technology (pywinauto’s backend) could be used for your application.
The list of supported accessibility technologies on Windows:
Win32 API (backend="win32") - a default backend for now
MFC, VB6, VCL, simple WinForms controls and most of the old legacy apps
MS UI Automation (backend="uia")
WinForms, WPF, Store apps, Qt5, browsers
Notes: Chrome requires --force-renderer-accessibility cmd flag before starting. Custom properties and controls are not supported because of comtypes Python library restrictions.
AT SPI on Linux and Apple Accessibility API are in the long term plans so far.

3、如何判断程序的backend是’win32’还是’uia’呢?官方文档中推荐使用spy++和inspect来检查。有人专门整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool。

Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.

4、介绍使用inspect来判断backend的类别

>下载上面github链接里的相关工具并打开,点击inspect左上角的下拉列表中切换到UI Automation

>然后鼠标点一下你需要测试的程序窗体,inspect就会显示相关信息。 下图为点击window文件夹的结果,inspect中显示了相关的信息,如下图所示。说明backend为uia。

>相反,如下图所示为win32

5、确定自动化入口

主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。 主要有两种对象可以建立这种入口点——Application() , Desktop().

Application的作用范围是一个进程,如一般的桌面应用程序都为此类。

Desktop的作用范围可以跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。使用方法见entry-points-for-automation

三、控件定位方式

1、window,dialog定位方式

1、基于title定位

a)如何获取title?

title为窗口的名称,可使用UISpy一类的定位元素工具去查找。

如图所示,该对话框中的title为Name属性值:“打开”

b)若使用定位元素工具找不到title怎么办?

使用print_control_identifiers()方法打印出当前窗口或对话框中的所有title

格式:

app.YourDialog. print_control_identifiers()

D:\python\python3.6.1\python36.exe D:/work/test/2019_07_25/python_PC.py
Control Identifiers:
Dialog - 'UpgradeDownload - R21.0.0001'    (L250, T250, R1690, B1010)
['UpgradeDownload - R21.0.0001Dialog', 'UpgradeDownload - R21.0.0001', 'Dialog', 'Dialog0', 'Dialog1']
child_window(title="UpgradeDownload - R21.0.0001", control_type="Window")
   | Dialog - 'Download'    (L727, T525, R1213, B736)
   | ['Download', 'DownloadDialog', 'Dialog2']
   | child_window(title="Download", control_type="Window")
   |    | 
   |    | Button - '是(Y)'    (L1015, T690, R1103, B720)
   |    | ['Button', '是(Y)Button', '是(Y)', 'Button0', 'Button1']
   |    | child_window(title="是(Y)", auto_id="6", control_type="Button")
   |    | 
   |    | Button - '否(N)'    (L1113, T690, R1201, B720)
   |    | ['Button2', '否(N)', '否(N)Button']
   |    | child_window(title="否(N)", auto_id="7", control_type="Button")
   |    | 
   |    | Image - ''    (L755, T580, R787, B612)
   |    | ['', 'Image', '0', '1']
   |    | child_window(auto_id="20", control_type="Image")
   |    | 
   |    | Static - 'Load latest pac file?\n\n\\10.0.3.206\share_nxos\ROM\Debug\MS16\GP-F1\V1.1.1_2019.07.08_15.01.19\GP-F1_ms16_V1.1.1_pac\GP-F1_ms16_V1.1.1.pac'    (L795, T580, R1173, B650)
   |    | ['Load latest pac file?\n\n\\\\10.0.3.206\\share_nxos\\ROM\\Debug\\MS16\\GP-F1\\V1.1.1_2019.07.08_15.01.19\\GP-F1_ms16_V1.1.1_pac\\GP-F1_ms16_V1.1.1.pac', 'Static', 'Load latest pac file?\n\n\\\\10.0.3.206\\share_nxos\\ROM\\Debug\\MS16\\GP-F1\\V1.1.1_2019.07.08_15.01.19\\GP-F1_ms16_V1.1.1_pac\\GP-F1_ms16_V1.1.1.pacStatic', 'Static0', 'Static1']
   |    | child_window(title="Load latest pac file?\n\n\\10.0.3.206\share_nxos\ROM\Debug\MS16\GP-F1\V1.1.1_2019.07.08_15.01.19\GP-F1_ms16_V1.1.1_pac\GP-F1_ms16_V1.1.1.pac", auto_id="65535", control_type="Text")
   |    | 
   |    | TitleBar - ''    (L730, T528, R1210, B550)
   |    | ['2', 'TitleBar', 'TitleBar0', 'TitleBar1']
   |    |    | 
 
推荐文章
小胡子的瀑布  ·  语句 - PowerShell | Microsoft Learn
1 年前
焦虑的水煮肉  ·  调用MGS RPC发送POST请求时如何将参数放到POST Body_移动开发平台 mPaaS(mPaaS)-阿里云帮助中心
1 年前
深情的长颈鹿  ·  海康机器视觉工业相机客户端MVS-介绍与使用,相机状态 - 知乎
2 年前
坏坏的消防车  ·  一些零散的python模块笔记 - 简书
2 年前
怕老婆的红金鱼  ·  Java与Json:Json语言语法格式以及解析 - 掘金
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号