前言

在UI自动化测试中,元素被识别出来后,才能更加精确地模拟相关用户行为,才能更好地开展自动化的其他内容。一般移动端APP会有页面元素属性,比如:ID,ClassName,Text等,可以方便定位需要操控的元素控件。对于相对复杂的APP,尤其是移动APP跨平台开发框架的出现比如,比如RN或者Flutter,又比如小程序,可以通过基于chrome devtool protocol方式定位元素属性,也有通过图片相似度匹配方式。

这类常规的方式是通过自动化框架识别元素,而这类的UI控件识别框架的结果输出往往依赖于开发同学在代码中对控件元素进行合理有效的命名,且一旦这些控件元素被混淆后就很难进行有效的元素定位。

因此,寻找一个更有效地方法,从根本性问题着手,结合现有的端自身的识别能力,把绝大多数的问题解决是否可行的方向出发,从爱奇艺APP的自动化实践中分享一个通用的方案,方便大家学习和参考。

01 面临挑战

挑战1:自动化框架元素识别能力不足

像现在很多应用在PC端目前就没有能识别出元素的自动化框架从而无法进行UI自动化测试,而在移动端市场上常用的一些自动化测试框架,比如python-uiautomator2依赖于开发框架和开发对元素的命名才能识别,对RN页面、H5、小程序等元素的识别支持也不是很好。

挑战2:多机型多分辨率兼容

回归测试中需要对多机型进行覆盖测试,因机型分辨率的问题,同一个页面也会因不同的设备展示效果不一样,哪怕同样的元素在不同的设备上展示的大小会不一致。

挑战3:多样式元素,半透明元素,无属性元素

像现在很多应用都有皮肤主题,不同的皮肤背景色使用的对应的ICON也有不一样。在没有合理的控件元素命名的情况下,如果单纯用图片匹配的方式,很难剔除背景色对图片匹配结果的影响。

APP在不同设备不同皮肤下对比

元素显示:较小

元素中间显示:浅灰

元素边缘显示:浅灰

底部多个tab间距:较宽

元素显示:较大

元素中间显示:黑色

元素边缘显示:黑色

底部多个tab间距:较窄

02 技术探索

初期方案:

服务端保存截取后的待识别控件元素小图,使用多种图片匹配算法方案。

(1.图片Hash 2.模板匹配 3.SIFT特征检测)

基本满足单设备,单背景色的图片查找。

当出现复杂背景,元素变化等情况将无法识别,并且也无法满足多设备多端的识别需求。

技术攻坚:

经过探索发现AI能进行物体识别,既然经过训练AI模型能识别人、物、体等,那么能不能识别APP UI控件元素和图片呢?

首先我们要选择合适的模型,检测有多种网络模型。

对大目标难检测问题的解决——SSD。SSD使用多层特征图进行检测,只是用了高层来进行检测没有底层并没有用来进行物体的检测,SSD速度很快,但与其他物体相比,对小物体的性能较差。

对于小目标难检测问题的解决——FPN。FPN中融入了特征金字塔,自下而上生成了高质量的特征金字塔提高了目标检测的准确率,尤其体现在小物体的检测。FPN可以更好的检测小物体;缺点就是时间成本太高。

采用的网络模型— YOLOv3

YOLOv3吸收了SSD的长处,同时增加了类FPN多尺度预测,能检测识别大目标也能检测小目标,同时检测速度也非常快;缺点是目标位置有偏移,对重叠密集型目标检测不是很好。

下图展示一下YOLOv3的数据(来自网络)

目标检测效果

与其他模型的数据对比

YOLOv3满足了我们即要检测大目标又要检测小目标,同时速度快的需求,我们要针对缺点进行优化。

03 落地实现

自动收集处理素材

AI训练需要大量的素材,如何能快速的收集大量素材,从三个方向着手。

1.在回归测试脚本中增加自动截图,在执行自动化回归用例时自动收集并上传;

2.在新版本APP稳定性测试中,画面变化截图自动收集并上传;

3. 通过AI测试中台提供入口让用户自主上传收集;

为加强训练召回率,我们统一对图片进行MD5去重,并将图片调整为训练需要的尺寸,最后统一将素材保存到素材库服务器。

收集完素材后就进入了我们的训练阶段。

训练封装流程图:

YOLOv3密集型识别能力差的缺点,我们的APP中元素不会密集出现,当出现元素重叠那就是UI的BUG。

解决识别偏移的缺点:

元素识别,提取图片

分析图片,识别边缘

去除边缘

生成返回中心点

滑动查看更多

预测接口将返回给用户以下信息:元素的分类代码,left,top,width,height

元素预测接口落地情况一

在UI自动化测试录制回放落地

目前UI自动化方案:脚本录制使用的是我们自研的web版本IDE,脚本回放执行则使用我们封装python库。在录制时,用户一键可以检测手机设备上的所有元素,并对其进行操作

从上图我们可以看到,我们会将AI识别的元素设备画面中,同时在右侧会有一个LIST展示并可以对元素进行操作,操作时会自动生成脚本,将脚本发送给py库,如果是点击操作py库会以元素的中心点坐标为操作。

# 录制脚本生成的代码示例

# 判断搜索元素是否存在

if iqy.AI(btn=”btnsearch”).exists():

# 搜索元素存在则点击

iqy.AI(btn=”btnsearch”).click()

# 也可以写成

iqy.AI(btn=”btnsearch”).click_exists()

# 进阶用法

els=iqy.AI(btn=”btnsearch”)

#获取相关属性

data=els[0]

print(data["ratio"],"AI预测匹配度")

print(data["w"],"矩形width")

print(data["h"],"矩形height")

print(data["x"],"矩形左上x坐标")

print(data["x0"],"矩形左上x坐标")

在录制回放中最常见的是各种关闭按钮问题。我们在回归执行自动化时,经常会遇到突然出现一个弹窗,当遇到这种回放就无法继续了。

使用iqy.AI(btn="close").click_exists(),可精准处理APP内部各种广告弹窗。解决了因为活动无法关闭导致case执行失败问题。

播放器在播放节目的时候画面一直在变,而播放器中的播放、暂停按钮也是高频使用的。

通过传统方式比较难识别,使用AI就变得很简单。

iqy.AI(btn="play")

iqy.AI(btn="pause")

目前我们经过训练了200+个元素(移动端60余个,PC端140余个)。像关闭按钮的识别召回率达94%,其他按钮80%+

实际收益:已在录制回放中广泛使用,每日自动运行CASE任务稳定率使用AI与未使用对比提升15%

元素预测接口落地情况二

在无属性页面中使用(安卓端,IOS端,PC端)。

我们使用元素预测+图片算法+文字识别研发出页面结构拆分功能。

落地APP稳定性测试,PC端稳定性测试中。

页面拆分功能对无属性控件的页面(小程序,RN,H5)的自动化提供了有效的解决方案。

具体实现如下:

原图处理

元素、图片、文字识别

元素聚合

返回单元素,聚合元素

滑动查看更多

实际收益:安卓APP 使用AI增强算法与未使用前对比,activity的覆盖率增加60%,bug总量增加30%

04 将AI能力拓展外部

对接其他业务打造部署一体化AI测试中台

AI测试中台给予用户从自主上传素材,素材标注,标注审核到训练产出模型,一条完整链路的操作能力。

AI预测服务调用方只需要提交一张图片或给一个图片的URL地址,预测服务就会调用到API接口输出对应的控件元素分类、坐标等预测结果。

AI测试中台在用户提交图片后,会在画面上展示预测结果,同时给出Py库的写法示例和python请求API示例。

对接手机云测平台

在云测平台用户一键点击就可以直接调起AI预测接口。

AI测试中台部署中遇到的难点

1.同等性能的CPU和GPU的价格可能也会接近十倍;

2.同等价格的CPU和GPU速度差可能在十倍以上。

因此我们的AI测试中台的预测接口使用的是GPU环境。

GPU品牌使用较多的是Intel和NVIDIA,在预测接口部署中我们遇到一个重大问题。我们训练是在Inter的GPU上生产出的模型,部署后发现一直未使用GPU进行计算。这使得请求耗时需要5~10秒,这么长的请求耗时对用户来说是较糟糕的体验。

GPU计算和CPU计算时间相差数十倍。正常情况下GPU预测都在几百毫秒。经调研发现是模型类型的原因,不同的模型类型对GPU环境有不同的要求;Inter的GPU上训练出来的YOLOv3模型无法在NVIDA的GPU环境上使用,最终采用转换模型才解决GPU预测环境耗时过长的问题。

解决方案:YOLOv3 weights模型 转换Keras模型。

05 后续规划

AI赋能自动化测试,我们已经迈出第一步,元素识别上相较原始的图片对比方案也取得了一定成果,落地也得到了用户的一致好评,为更好的服务用户带来更大的收益我们也面临了更大的挑战。

1.对复杂画面中与背景融合度高的控件识别数量需增加,需继续支持更多icon元素识别。

2.对复杂页面的拆图能力有限,需增加对悬浮小图标,层叠图片的支持。

3.Card复杂度提升,左中右分栏card,上中下分类card,文字围绕card都是需要解决的问题。

4.Banner、menus、tabs、input的识别。

5.训练基于素材,素材的多样性和数量直接影响召回率,原始图片素材来源于自动化任务,自动化产出的多样性新图片增长受限。后续调研在原有图片基础上进行处理图片,生成多样训练素材。

6.支持更复杂的元素操作:例如计算从某元素到指定元素,能过某个特征验证元素。

‍也许你还想看

0.7秒完成动漫线稿上色,爱奇艺发布AI上色引擎

爱奇艺知识移动端组件化探索和实践

扫一扫下方二维码,更多精彩内容陪伴你!

通用AI元素识别在UI自动化测试的最佳实践相关推荐

  1. 您应该遵循的15个UI测试自动化最佳实践(上)

    本文转载自晨小菜订阅号,感谢大佬的分享 我们知道,在过去二十年UI端的自动化测试一直是我们项目上做自动化测试的重点.随着敏捷的发展,慢慢的越来越多人开始诟病UI自动化测试,觉得在UI端做自动化其稳定性 ...

  2. AI运动:阿里体育端智能最佳实践

    简介: 过去一年,阿里体育技术团队在端智能方面不断探索,特别在运动健康场景下实现了实践落地和业务赋能,这就是AI运动项目.AI运动项目践行运动数字化的理念,为运动人口的上翻提供了重要支撑,迈出了阿里体 ...

  3. 基于AI的网易UI自动化测试方案与实践

    参考:https://time.geekbang.org/dailylesson/detail/100016410

  4. 《基于AI+大数据的医疗大健康最佳实践》---- AI 赋能临床试验受试者招募助力企业药物研发

    文章大纲 简介 现状 国内外志愿者招募公司 捷信医药 - 上海 皓推科技 - 上海 厚普医药(被零氪收购)- 北京 思默招募 - 杭州 国外 市场价值评估(从AI+患者招募角度) 患者招募的痛点/大数 ...

  5. iShow UI for React 最佳实践

    React 与 AJAX React只负责处理View这一层,它本身不涉及网络请求/AJAX,所以这里我们需求考虑两个问题: 第一,用什么技术从服务端获取数据: 第二,获取到的数据应该放在react组 ...

  6. 微信小程序python自动化测试_微信小程序UI自动化测试实践:Minium+PageObject

    小程序架构上分为渲染层和逻辑层,尽管各平台的运行环境十分相似,但是还是有些许的区别(如下图),比如说JavaScript 语法和 API 支持不一致,WXSS 渲染表现也有不同,所以不论是手工测试,还 ...

  7. 微信小程序UI自动化测试实践:Minium+PageObject

    小程序架构上分为渲染层和逻辑层,尽管各平台的运行环境十分相似,但是还是有些许的区别(如下图),比如说JavaScript 语法和 API 支持不一致,WXSS 渲染表现也有不同,所以不论是手工测试,还 ...

  8. app自动化测试最佳实践

    众所周知,在app的UI测试方面,自动化测试可以减少人工参与.降低成本.提升测试效率.传统的自动化测试一般使用appium等工具完成,但需要有较强的编程能力,测试代码需要经常修改,一般测试人员很难搞定 ...

  9. AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium

    2019独角兽企业重金招聘Python工程师标准>>> AI考拉日常技术分享会,前有众多前后端以及android大神分享,这次测试老司机Eric也放招,手把手带devs入门UI自动化 ...

最新文章

  1. Swift 5 将进一步减小 iOS 应用安装包大小
  2. carsim学习笔记1—界面工具的含义
  3. OpenCV方形检测Square Detection的实例(附完整代码)
  4. Yii的action
  5. Excel 用于批量把单元格设置为文本格式保存的数字的宏
  6. php仿伊人集源码,仿伊人集wecenter()包含所有功能及官方付费插件,整站带数据...
  7. g++链接boost库
  8. android 判断资源是否使用6,android-download-manager – Android 6获取下载文件的路径
  9. java定长池,java线程池源码学习
  10. 固态硬盘安装与系统安装流程
  11. 富文本编辑器防xss攻击
  12. 聊聊泰国的工作和生活
  13. VSCode配置Python教程
  14. java实现微信企业号API服务端调用封装
  15. 洛谷1156 垃圾陷阱
  16. surface pro4应用软件安装
  17. 广义表的表头和表尾是什么?
  18. 扫描普通二维码,进入微信小程序
  19. 重要提醒:三星note20fe和三星s20fe哪个好-参数对比-三星note20fe和三星s20fe区别-哪个更值得入手-
  20. 修改计算机桌面壁纸影响计算机考试吗,计算机考试

热门文章

  1. 微信公众号网页授权40029错误「建议收藏」
  2. WIN7封装教程2018系列(六)—封装
  3. Win10安装Kafka步骤
  4. 懒人起名神器,百度翻译内容改为驼峰格式
  5. 深入解析网页防篡改技术
  6. TSCH协议及WIA-PA系统芯片
  7. 王学岗移动架构34——IOC注入框架设计
  8. 怎么把做好的ps保存成图片_PS保存图片提示“无法完成请求”,这里有4种解决方法...
  9. 化工原理计算机辅助设计,化工原理课程设计心得三篇
  10. Visio 2016去掉页边距(图形四周的空白区域)的解决办法 (适用于适应绘图)