我们的自动化测试框架的Fitnesse + Powerslim,一般情况下会尽量避免在UI层面的操作,但是有些时候没有对应的命令行接口只能用UI去测试。
Powershell里面作UI测试用得比较多的库是UI Automation,但是Powershell的语句相对来说比较繁琐,例如:
Get-UIAWindow -ProcessName abc -Seconds 10 | Get-UIATab | Get-UIATabItem -Name “General”|Invoke-UIATabItemSelectItem -ItemName “General”
需要用管道由外到内获取和传递对象,一般有两到三个控件对象才找得到需要操作的控件,用全语句来查找有几个问题:
重用率比较低。一般相同的结构下,同一层的控件前面的管道内容都是一样的,冗余的代码比较多。
阅读不方便,特别在Fitnesse下。
编写困难。每写一次可能要去找回以前类似的case作参照,或者运行UI Automation Spy去获取控件结构。
由于新feature的AT不得不用到UI Automation,我用了这样的思路去抽取出UI操作的方法:
首先,建一个XML文件,把所有控件的结构记录在里面,包括获取它要用的方法,传递的参数(Name, Id),结构就用XML的层级关系,以上面的语句为例,可以创建XML:
每个结点的名称都是唯一的,这样XML里每个结点都与界面上的控件一一对应。建议以最外层UIA window为单位,每个UIAwindow建一个XML。
然后,定义一个公用的拼接Powershell语句的function:
通过这个方法,返回字符串:Get-UIAWindow -ProcessName abc -Seconds 10 | Get-UIATab | Get-UIAButton -Name “OK”
然后给每一种操作(click, set text)封装一个方法,比如:
在代码里面我们直接调用这个方法去操作:
click “OKButton”
这样,整个case就会相当整洁,没有太多的冗余,操作也一目了然。