智客公社

标题: Appium图像辨认技术OpenCV,这波操作你必须GET [打印本页]

作者: 惠东小子85    时间: 2020-9-7 14:39
标题: Appium图像辨认技术OpenCV,这波操作你必须GET
[attach]445340[/attach]




在我们做 App 自动化测试的时分,会发现很多场景下的元素没有 id、content-desc、text 等属性,并且有能够会碰到由于开发采用的是自定义 View,View 中的元素也无法辨认到,很多的自动化测试框架对此类场景一筹莫展。

Appium 在 V1.9.0 中给我们带来了针对图像辨认的全新图片元素定位的方法:-image


[attach]445341[/attach]





[attach]445342[/attach]



在 Appium 中用到的图像辨认库是 OpenCV,由于在 Appium V1.9.0 中-image查找元素方式才被引入出去,所以需求保证你有安装 V1.9.0 或以上版本的 Appium。

这里需求留意,Appium 图像辨认的运用只能适用于经过 npm 安装 Appium 的方式,经过 Appium-desktop 安装 Appium 的方式是不适用的。
Step1:经过 npm 安装 Appium

/安拆卸置 Node.js

1. 下载对应系统和位数的node.js安装包https://nodejs.org/en/download/

2. 选择安装途径,我这里选择安装到D盘

3. 进入cmd,输入node-v以及npm-v检测(npm是node.js自带的包管理器)



[attach]445343[/attach]



4. 指定npm安装的全局模块和缓存的途径,假如不指定默许会安装到C盘中【C:\Users\用户名 AppData\Roaming\npm】
■ 在 nodejs 目录下新建【node_cache】和【node_global】目录

[attach]445344[/attach]


■ 输入如下命令指定:

[attach]445345[/attach]


5. 配置 node.js 环境变量

在系统变量中新建【NODE_PATH】变量名,变量值为
【D:\software\nodejs\node_global\node_modules】

在系统变量【PATH】中追加
【%NODE_PATH%】

将用户变量【Path】中原来的【C:\Users\用户名\AppData\Roaming\npm】

修正为【D:\software\nodejs\node_global】

/安装 Appium

1. 设置 npm 淘宝镜像地址

[attach]445346[/attach]


2. npm 经过全局的方式安装 Appium(默许下载安装最新版本 Appium)

[attach]445347[/attach]



Step2:安装opencv4nodejs所需求的依赖

/安装 Cmake

1. 进入到 https://cmake.org/download/下载对应软件包,解压到恣意目录

2.找到系统变量Path
追加【D:\software\cmake-3.18.1-win64-x64\bin】,其中 cmake-3.18.1-win64-x64 是为 Cmake 解压之后的目录名
/安装 building tools

[attach]445348[/attach]



Step3:Appium 中安装图像辨认模块 opencv4nodejs

由于网络和各种环境成绩的影响,经过官方引荐的【npm i -g opencv4nodejs】命令直接安装 opencv4nodejs 模块的话,会发现存在很多的成绩。
https://www.npmjs.com/package/opencv4nodejs#how-to-install外面的阐明,这里运用的是手动安装 OpenCV 的方式

1. 在系统环境变量中添加:【OPENCV4NODEJS_DISABLE_AUTOBUILD】变量名,变量值为【1】
2. 安装choco(windows下面的软件管理方案,可以处理部署软件复杂、容易出错成绩)官网安装:https://chocolatey.org/install,打不开的同窗给大家搬运过来:
运用管理员运转 powershell,检查执行策略:执行指令【Get-ExecutionPolicy】

假如结果为Restricted,那么执行指令【Set-ExecutionPolicy AllSigned】或者【Set-ExecutionPolicy Bypass-Scope Process】,直到结果为【RemoteSigned】


[attach]445349[/attach]



执行下面指令安装

[attach]445350[/attach]



3. 经过 choco 安装 OpenCV,执行下面的安装指令即可。

[attach]445351[/attach]


终了后 choco 默许安装在 C:\tools 目录中。

4. 设置 OpenCV 环境变量

[attach]445352[/attach]



5. 安装opencv4nodejs进入cmd,执行命令

[attach]445353[/attach]


命令执行过程中,会对之前经过 choco 方式下载好的包进入编译,编译过程中能够会出现卡住,关掉 cmd 窗口重新再执行命令即可。


[attach]445354[/attach]




Step1:截取所需停止图像辨认的元素


1. 将需求停止图像辨认元素所在页面截屏
2. 经过 adb pull 命令拉取截屏图片出来

3. 用画图工具打开--划重点,一定要保证图片是原大小的,不能放大或者减少图片


[attach]445355[/attach]



4. 截取其中的元素保存为图片


Step2:代码完成


java-client 库中有提供了“MobileBy.image”以及“findElementByImage”方法,需求留意的是参数类型是 String 类型(以 MobileBy.image 为例)

[attach]445356[/attach]


这里我们需求先将图片转换为 Base64 编码格式,转换代码如下:

[attach]445357[/attach]


测试代码如下:

[attach]445358[/attach]



Step3:执行

1. 开启Appium Server,经过appium-a127.0.0.1-p4723命令启动
2. 启动设备,经过adb devices检测设备
3. 执行case
效果如下:

[attach]445359[/attach]




[attach]445360[/attach]


Appium 图像辨认的准确率是跟 Appium 的截图功能以及我们所提供的元素截图相关的,有时分我们会发现更换一台不同分辨率的手机之后脚本就会执行失败。Appium 提供了一些设置可以提高图像辨认的准确率或加快图像辨认的速度。
运用示例:

[attach]445361[/attach]



以下设置项来自官方阐明

[attach]445362[/attach]



[attach]445363[/attach]



[attach]445364[/attach]



[attach]445365[/attach]



[attach]445366[/attach]




阐明:本文为柠檬班歪歪教师原创,转载需注明出处
有任何成绩都欢迎来回复私信讨论哦~加软件测试交流QQ群:972956275,还可以加微信13327216815,备注:头条,即可获取收费测试学习视频干货材料哦!
作者: 专业学霸5    时间: 2020-9-7 20:23
为了三千积分!
作者: v7270    时间: 2020-9-8 20:52
我有一个大胆的想法。。。
作者: 绿色de阳光    时间: 2020-9-9 13:58
垃圾内容,路过为证。




欢迎光临 智客公社 (http://bbs.cnaiplus.com/) Powered by Discuz! X3.4