适用于winform程序的UI自动化实现(python+uiautomation)
一、使用的工具和库
定位工具:inspect(提取码:kvwx)、UISpy(提取码:ab0e)
python库使用:subprocess(内置库,用于打开应用程序)uiautomation(pip install uiautomation安装)
二、原理
使用subprocess库打开应用程序,然后借助定位工具采集定位应用元素的信息,然后在定位到的元素上进行输入、点击、获取等一系列操作(通过uiautomation的方法实现)。
【定位属性一般使用:ClassName、Name、ProcessId、AutomationId】
三、定位工具的使用
简单使用,先打开需要定位的应用程序,然后打开定位工具,就可以找到当前工具的窗口信息
UISpy:
1、如果找不到自己的应用窗口/窗口失效。则可以先选中根目录然后点击刷新,此时会重新抓取所有的窗口
2、日常定位窗口中详细信息,可以选中鼠标操作,然后按住Ctrl此时窗口自动定位的内容就是鼠标左键的定位元素(部分情况会存在定位不到的,需要在应用窗口下一点点寻找)
四、代码实现
# 打开计算器进程[应用程序所在的路径]
subprocess.Popen('calc.exe')
time.sleep(2)
# 定位窗口
wc = uiautomation.WindowControl(searchDepth=1, Name='计算器')
# 设置为顶层【一般默认都是前置的可以不用设置】
wc.SetTopmost(True)
# 执行操作
wc.ButtonControl(Name='7').Click()
wc.ButtonControl(Name='加').Click()
wc.ButtonControl(Name='5').Click()
wc.ButtonControl(Name='等于').Click()
# 检查
result = wc.TextControl(AutomationId='CalculatorResults')
assert result == '12'
五、常用的uiautomation操作
uiautomation常见的操作有:
Click() 点击;
RighClik() 右键点击;
DoubleClick() 双击
SendKeys() 发送字符;
SetValue() 传值,一般对EditControl用;
window窗口操作
subprocess.Popen('Name') 用进程打开程序;
window.Close() 关闭窗口;
window.SetActive() 使用;
window.SetTopMost() 设置为顶层
window.ShowWindow(uiautomation.ShowWindow.Maximize) 窗口最大化
window.CaptureToImage('Notepad.png') 截图;
六、常用的uiautomation控件方法
按钮:uiautomation.ButtonControl(‘定位元素=value’)
输入框:uiautomation.EditControl(‘定位元素=value’)
单选框:uiautomation.RadioButtonControl(‘定位元素=value’)
复选框:uiautomation.CheckBoxControl(‘定位元素=value’)
下拉框:uiautomation.ComboBoxControl(‘定位元素=value’)
文本:uiautomation.TextControl(‘定位元素=value’)
表格:uiautomation.TabControl(‘定位元素=value’)
uiautomation.TableControl(‘定位元素=value’)
七、PO模式结合
实现方式:页面元素、页面 操作、用例、数据分层存储,实现多重调用
公共方法:打开应用程序、登陆
objectpage
objectoperation
testcase
testdata