前言
基于spring boot + Appium Client + selenium + testng +winappdriver + Inspect搭建的一套支持客户端UI自动化的框架
- 系统要求: Windows10或Windows Server 2016
- 支持应用程序: UWP, WPF, WinForms, Win32
目前框架还不完善,且inspect的使用还处于研究阶段,欢迎大家补充完善
环境准备
一、winappdriver
Windows Application Driver是一种支持在Windows程序上进行类似Selenium UI测试自动化的服务
初衷:appium目前无法提供Windows程序的自动化测试功能,于是微软官方开发WinAppDriver,目的就是代替appium实现JSON wire协议。
原理:框架启动Windows应用程序时配置了监听的Ip地址和端口号,测试代码运行时,以json方式与WinAppDriver进行通信,使用WinAppDriver调用win32 api来模拟屏幕操作,如鼠标点击、输入、拖拽等
下载地址:https://github.com/microsoft/WinAppDriver/releases,直接运行msi文件进行安装
注意点:
1、必须通过安装文件进行安装,不要复制安装之后的文件夹,在一台新的没有安装过WindowsApplicationDriver.msi的电脑上,只是将其它电脑的安装目录文件夹复制过来,运行的过程会有无法找到控件问题出现
2、运行代码前一定要运行WinAppDriver.exe文件
3、WinAppDriver.exe 4727 WinAppDriver.exe 10.0.0.10 4725 这种方式可以修改启动的Ip地址和端口号
二、Inspect
Inspect是微软官方出的一个检查工具,可以检查当前环境下(包含所有图形界面程序)所有界面元素组成的层次及其属性。一般存在于C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64目录下,如果没有Windows Kits这个目录,可以通过安装Visual Studio获得。
1、鼠标点击应用程序的控件,可以快速在inspect展示控件属性
2、点击inspect上的属性可以黄色框框圈视出是程序的那个区域
3、3 4 5 6 都是可以用于定位元素的属性,对应关系如下图。
注意:
1、上述的方式只有name方式测试成功,其它方式暂时还没有测试成功。
2、RuntimeId inspectd定位出来时16进制,FindElementById需要转化为十进制使用;FindElementByTagName需要把LocalizedControlType 对应的值首字母大写。
3、 可以使用类似的xpath://Spinner[@LocalizedControlType='沙网,多层xpath怎么用暂时还不清楚
三、开启开发者模式
1、在Windows的开始菜单找到"设置",在打开的页面搜索"开发者选项设置"
2、打开"开发人员模式"选项
框架结构
1、底层基础,主要包括driver启动,控件基本操作以及控件元素结果校验三个基本类
2、页面元素定义层,该层只根据inspect定位到元素的方式,定义页面元素,不做任何业务操作
3、业务逻辑层,该层利用pagemodel, 进行业务逻辑的编写,可以包含校验
4、用例层,该层只是简单的调用业务层,也不包含业务逻辑,可以包含校验
drive启动#
driver启动与appium启动脚本差不多
DesiredCapabilities appCapabilities = new DesiredCapabilities();
String appPath= PropertyUtils.getInstance().getString("winAppPath");
appCapabilities.setCapability("app", appPath);
appCapabilities.setCapability("platformName","Windows");
appCapabilities.setCapability("deviceName","WindowsPC");
appCapabilities.setCapability("ms:waitForAppLaunch","5");
driver = new WindowsDriver<WebElement>(new URL(PropertyUtils.getInstance().getString("winAppDriverUrl")), appCapabilities);
aciton介绍
1、public WebElement getWebElement(String locator,int waitTime) 获取元素,waitTime最长等待时间,主要用于检查元素不存在,waitTime自定义减少等待时间。
2、public WebElement getWebElement(String locator)获取元素,默认最长等待时间10秒钟
3、public WebElement click(String locator) 点击元素
4、public void sleep(long time) 等待x秒,这个方法尽量少用,框架已经采用了显示等待,默认等待时长10秒钟
5、public void sendKeys(String locator,String value) 输入操作
6、public void clickByRobot(int x,int y) 点击操作,根据坐标点击
7、public void dragMove(String locator,int x,int y) 拖拽元素到一个指定的位置,注意x,y都是相对鼠标的偏移量。x为负数表示向左拖动,反之向右;y为负数表示向上拖动,反之向下
8、public void mouseRightClick() 鼠标右击
9、public void sendKeyByRobot(int[] values) 根据坐标输入,需要结合clickByRobot使用
10、public void stepInfo(String message) 输出日志,便于排查问题
类图
集成机器准备#
- 修改 “浙江省政府电子印章客户端” 安装目录的权限。右键安装目录–属性–安全,给使用用户授权修改权限
- 辅助切换工具,右键编辑打开TGProjectChange.bat脚本,把index替换为2,跟据使用ukey的环境进行修改,建议固定ukey使用
- 修改安全控制。我的电脑–鼠标右键–安全和维护–更改用户账户控制设置,调整为从不通知
- 如果输入出现乱码,输入法默认值修改为为英文
更多文章请关注公众号