计算器开平方

PowerShell UI自动化测试框架 37


引言

一款产品如果能提供用户界面,又能提供功能调用接口API,这对程序员来讲无疑有福了,他可以通过PowerShell或者其它程序语言调用来达到自动化的目的,把重复的事情交给机器,让人来做更有意义的事情。UI自动化测试自然是通过程序操作用户界面来达到测试的目的,核心思想就是:“桌面版找控件,网页版找DOM节点”

UI Automation

介绍

这应当是微软最新的桌面UI自动化测试框架,之前还有MSAA,我只听过,还没有用过。UI Automation位于.NET Framework中。关键程序集有两个:

  1. UIAutomationClient.dll
  2. UIAutomationTypes.dll

大概路径为:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\

使用技巧

  • 每个控件都是一个AutomationElement对象。
  • AutomationElement可以通过FindAll和FindFirst方法递归搜索子控件,通过参数可以过滤控件的类型。
  • 每一个AutomationElement都有它本身所支持的可被执行的模式(Pattern),其实就是动作啦,比如按钮自然是点击模式,文本框自然是取值和赋值模式。
  • 一款能够显示当前控件树结构的工具必不可少,visual studio中自带的有Spy++,但是用着不爽。这里推荐和分享一个UISpy:链接: http://pan.baidu.com/s/1jGiITsq 密码: vi56

操作Windows计算器实例

光说不练,咋行!下面使用C#来举例说明:先打开计算器,依次点击 1,6平方根 按钮,其实就是求16的平方根。

//以桌面为根节点,找到计算器窗口
var calcWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children,
    new PropertyCondition(AutomationElement.NameProperty, "计算器"));

//按钮序列求16的平方根AutomationElement
var buttons=calcWindow.FindAll(TreeScope.Descendants,
    new PropertyCondition(AutomationElement.ClassNameProperty, "Button"))
    .Cast<AutomationElement>()
    .Where(b=>new string[]{"1","6","平方根"}.Contains(b.Current.Name));
foreach (AutomationElement btn in buttons)
{
    //获取鼠标点击模式
    var click = btn.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
    //执行点击
    click.Invoke();
}

先手动打开计算器calc.exe,然后运行上面的代码,计算器会停留在该界面:

计算器开平方

计算器开平方

上面的C#代码很容易转换成PowerShell脚本,这不是本章的重点,所以略过。

关于第三方控件

这是微软的测试框架,自然支持标准的Windows控件,但是有些第三方控件可能不支持,比如QQ的密码框(如果支持,还了得)。

UI Automation PowerShell扩展

之前Victor推荐过这个UI Automation PowerShell Extensions。今天由荔非苔在本博客上再正式推荐一下吧!

还是上面的例子,让我们用UI Automation PowerShell扩展来完成吧。既然是PowerShell,没什么好讲的,顾名思义即可,直接看脚本吧:

$calc=Get-UiaWindow -Name '计算器'
'1','6','平方根' | foreach { 
   $calc | Get-UiaButton -Name $_ | Invoke-UiaButtonClick
}

为什么推荐它,您自己眼见为实。您也许会说这例子弱爆了,powershell控制台就可计算平方根。是的!那就下一篇玩个稍微有点意思的,自动给QQ群发消息,敬请期待!

本文链接: https://www.pstips.net/ui-automation-framework.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

37 条评论 “PowerShell UI自动化测试框架