实验:核心实验:利用UIAutomation库测试Windows应用(一)
作者:强官涛   类型:测试开发    类别:实验   日期:2020-10-21    阅读:559 次   消耗积分:0 分

 实 验 简 介



前面已经学习的自动化测试框架,除SikuliX之外都只能对B/S架构的系统进行自动化 测试,而Windows平台下的C/S架构用SikuliX来做自动化,可靠性、可维护性比较差。


项目代码中还要夹杂着大量的图片,对于整个项目来说,庞大的数据量里90%都是图片,对于编码者和使用者都会造成困扰,那么Windows平台的自动化测试框架就有了学习和使用的价值了。


目前Windows平台下自动化工具有:Windows API, MSAA - Microsoft Active Accessibility, UIAutomation

Windows API 通过FindWindow和EnumWindows来查找到窗口句柄,然后再调用其它 API(GetWindowText,GetWindowRect, GetWindowLong…)来获取窗口属性,以此来找到想要的控件(窗口),AutoIt工具就是Windows API的技术体现。


MSAA 提供一套接口,让开发人员可以方便的给残疾人开发可以使用的软件,比如读屏程序(鼠标移动到按钮的时候,可以发出声音,辅助视力障碍的人操作电脑),从而实现微软将电脑普及到每一个家庭的梦想。


它本身设计不是为了测试,但它提供一套接口,可以通过调用接口来达到测试的目的,也是目前主流Windows平台测试的基础,通过对其再次封装实现对系统软件的调用和测试。


UIAutomation是微软在MSAA的基础上,对MSAA进行封装,重新设计并实现了 UIAutomation的类库(.Net),微软根据自动化测试的需求,重新实现了一套自动化体系。




 实 验 目 的 



(1).熟练应用UIAutomation完成针对Windows应用程序的自动化测试。

(2).能够在实际测试项目中综合运用Web和Windows应用自动化测试技术完成复杂的测试操作。




 实 验 流 程 



  • UIAutomation运用


UIAutomation支持多种语言,这里就通过python来调用。UIAutomation是第三方库,所以首先需要安装库pip install uiautomation。先用UIAutomation操作Windows自带计算器.


1.定位窗体


首先启动计算器,然后启动UISpy.exe,在Control View的树形结构中,找到计算器。前面已经学习了两种方式定位,二者任选。结果如图所示。


20201021_110126_316.png


可以看出,在UISpy中选择计算器后,计算器就会多一个红色的框,用于提示用户,当前定位的元素指向程序哪个部分。


2.定位元素


在UISpy中找到程序后,可以在其下的树形结构中找到每一个元素。比如按钮“7”,找到后,可以在Properties里看到“7”的属性,同时,计算器上的“7”周围有个红色的小框,如图所示。


20201021_110148_320.png

对于按钮“7”重要的属性已经显示在Properties中,ClassName:‘Button’,AutomationId:

‘137’,Name:’7’等,都是后面代码可能会用到的


3.编码实现


通过UISpy对需要的窗体的元素定位获取属性后,可以通过python代码实现程序自动化。代码如下:


import subprocess

import uiautomation

import time

#打开计算器程序

subprocess.Popen('calc.exe')

time.sleep(2)

#通过UIAutomation定位窗体

calcwindow = uiautomation.WindowControl(searchDepth=1, Name='计算器')

#在最上层显示

calcwindow.SetTopmost(True)

#点击数字“7”

calcwindow.ButtonControl(Name='7').Click()

#点击加号

calcwindow.ButtonControl(Name='加').Click()

#点击数字“5”

calcwindow.ButtonControl(Name='5').Click()

#点击等号

calcwindow.ButtonControl(Name='等于').Click()

#获取数据显示框的内容

result = calcwindow.TextControl(AutomationId="158")

print(result.Name)

#做验证

if result.Name.split(' ')[0] == '12':

    print("测试成功.")

else:

    print("测试失败.")

time.sleep(2)

#关闭窗体

calcwindow.Close()


由于本章技术内容较多,所以分为三部分来分享,接下来会陆续分享UIAutomation API、UIAutomation使用中的问题等内容。





为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。

20190320_095757_834.jpg



版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.woniuxy.com/note/621
上一篇: 资讯:报告:阿多比学员出关了!
下一篇: 访谈:培训期间,从未12点之前离开过教室的他入职了,月薪15K!
提示:登录后添加有效评论可享受积分哦!