UI Automation PowerShell Extensions使用,编写powershell脚本实现ui自动化操作 简单实例
借鉴这几个网站。
使用 PowerShell UI 自动扩展操作应用(自动化) - PMP 风格 (hatenablog.com)
UI Automation PowerShell Extensions的Download(再分发) – code-lab.net
PowerShell UIAutomation Tutorial: UI Automation of Desktop Apps (softwaretestinghelp.com)
PowerShell UI自动化测试框架 – PowerShell 中文博客 (pstips.net)
原理
UI Automation位于.NET Framework中。关键程序集有两个:UIAutomationClient.dll UIAutomationTypes.dll。可以使用c#编写程序操作win forms。现在网上流行的py ui自动化是这的py接口。当然大部分人都觉得这种ui自动化最好用脚本语言,而不是c#这种需要编译的。正好这位作者给出了powershell接口 GitHub - apetrovskiy/STUPS at master 不过他的代码似乎得在vs2015上编译,最新的vs我没捣鼓出来。二进制文件在这位日本人的网址上能下载 UI Automation PowerShell Extensions的Download(再分发) – code-lab.net
https://files.cnblogs.com/files/kyo413/UIAutomation.0.8.7B3.NET40.zip?t=1673114125&download=true
https://files.cnblogs.com/files/kyo413/UIAutomation.0.8.7B3.samples.zip?t=1673114071&download=true
使用技巧:
- 每个控件都是一个AutomationElement对象。
- AutomationElement可以通过FindAll和FindFirst方法递归搜索子控件,通过参数可以过滤控件的类型。
- 每一个AutomationElement都有它本身所支持的可被执行的模式(Pattern),其实就是动作啦,比如按钮自然是点击模式,文本框自然是取值和赋值模式。
基本操作就是找到节点,对节点使用对应的操作。作者还给出了例子。但是他的例子应该在英文版win上是能不修改直接运行的,在中文操作系统上因为待操作的程序名字可能变成了中文所以需要略微修改。
简单例子
第一步 导入库 请自行修改dll的路径
Import-Module C:\UIAutomation\UIAutomation.dll
例子一 操作记事本
打开记事本
获取程序节点
$window = Get-UiaWindow -Name '未命名 - 记事本'
输入字符
$window.Keyboard.TypeText("Hello UI Automation")
它附带一个程序,称为 UI automation间谍.exe,以实际创建脚本。 启动此操作并执行一系列操作后,可以将其保存到脚本中。
例子二 操作计算器。
Import-Module .\UIAutomation.0.8.7B3.NET40\UIAutomation.dll [UIAutomation.Preferences]::Highlight=$false Start-Process calc $win = Get-UiaWindow -Name '计算器' $win | Get-UiaButton -Name '三' | Invoke-UiaButtonClick | Out-Null $win | Get-UiaButton -Name '加' | Invoke-UiaButtonClick | Out-Null $win | Get-UiaButton -Name '四' | Invoke-UiaButtonClick | Out-Null $win | Get-UiaButton -Name '等于' | Invoke-UiaButtonClick | Out-Null
也可以使用管道 注意按钮的名字是中文的
$calc=Get-UiaWindow -Name '计算器' '一','六','平方根' | foreach { $calc | Get-UiaButton -Name $_ | Invoke-UiaButtonClick }
这样就可以用很小的体积写自动化脚本,特别适合整天重复装程序的工作。其他rpa都需要带一个巨大的环境。这个只需要一个额外不到500k的dll
待续