技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种仅基于视觉信息的移动应用GUI弹窗检测方法  >  正文

一种仅基于视觉信息的移动应用GUI弹窗检测方法

  • 国知局
  • 2024-08-30 14:31:38

本发明涉及gui测试领域,特别涉及一种仅基于视觉信息的移动应用gui弹窗检测方法。

背景技术:

1、图形用户界面(gui,graphic user interface)是现代软件的重要组成部分,它通过菜单、图标和按钮等图形元素直观地向用户展示信息,引导用户与软件进行交互。良好的gui设计有助于提升用户体验,进而增强用户黏性,提升软件的竞争力。鉴于gui的重要性,gui质量保障成为了软件开发人员重点关注的问题。

2、就移动应用而言,保障gui质量的主流方式是利用appium等测试框架开发自动化测试脚本,对应用gui的显示、布局以及交互等方面进行测试。这些gui测试脚本通常为一组测试事件序列,其中测试事件是由gui控件定位符和交互动作组合而成的,常用的gui控件定位方式为id、xpath和accessibility id等。然而,gui测试脚本的维护成本非常高,因为在应用版本迭代、跨平台(android、ios和web等)以及android碎片化问题等场景下,测试脚本极易因控件定位符和测试事件序列的变化而失效,需要大量人工对失效的脚本进行排查和修复。

3、弹窗是导致测试脚本失效的一种常见原因,例如,应用中的广告投放,或首次在应用中登录用户,都可能导致应用中出现测试脚本开发人员未预期的弹窗,从而导致测试脚本失效。如何自动化地检测弹窗并将其关闭,是保障gui质量、提升gui测试自动化程度的重要问题。因此,本发明旨在仅基于视觉信息对移动应用gui上存在的弹窗进行检测,获取弹窗的边界信息,进而支持对异常弹窗的处理以及gui测试自动化程度的提升。

技术实现思路

1、目前,本发明提出了一种仅基于视觉信息的移动应用gui弹窗检测方法,结合目标检测和基于hsv颜色空间的颜色分割技术,实现对移动应用gui截图中弹窗边界的识别,本发明通过以下技术方案来实现。

2、一种仅基于视觉信息的移动应用gui弹窗检测方法,其特征在于,所述方法包括以下步骤:

3、s1,控件检测:基于开源rico数据集中的移动应用布局结构和gui截图,训练yolov8模型,预测待检测gui页面中存在的控件,从中筛选出弹窗类型的控件;

4、s2,亮度二值化:使用hsv颜色空间表示待检测gui截图,对v通道值进行二值化,获得gui截图的亮度掩码;

5、s3,轮廓检测:在gui截图亮度掩码的四周填充黑色像素,检测填充后亮度掩码中的轮廓,取所有轮廓中面积最大的轮廓作为弹窗边界。

6、进一步的,所述步骤s1控件检测具体包括以下步骤:

7、s11,对于开源rico数据集提供的每个gui页面,获取gui截图的宽度和高度,记ws为gui页面的宽度,hs为gui页面的高度;

8、s12,从所述步骤s1提供的gui页面的布局树的所有节点中筛选出没有子节点的叶子节点,提取所述叶子节点的bounds和componentlabel属性值,并为所述叶子节点赋予唯一的id,在每个gui页面中叶子节点id从0开始,依次递增;

9、s13,将所述步骤s12提取的叶子节点的id、bounds属性值和componentlabel属性值组合成形如<id,<x0,y0,x1,y1>,componentlabel>的元组,其中

10、<x0,y0,x1,y1>来自节点的bounds属性值,(x0,y0)表示控件的左上角坐标,

11、(x1,y1)表示控件的右下角坐标;

12、s14,对于所述步骤s13获得的每个<id,<x0,y0,x1,y1>,componentlabel>元组,计算控件相对中心坐标控件相对宽度和控件相对高度将控件id、控件相对中心坐标、控件相对宽度以及控件相对高度按照“<id><xc><yc><w><h>”的格式写入文本文件,控件componentlabel值写入配置文件data.yml,以默认参数训练yolov8模型,所述默认参数为epochs=100和imgsz=640;

13、s15,对于所述步骤s14训练得到的yolov8模型,以待检测的应用gui截图作为输入,预测gui页面上控件的边界和类型,仅保留modal类型的控件,将所有modal类型控件的集合记为s;

14、s16,如果所述步骤s15所述modal类型控件的集合s非空,直接输出s中所有控件的边界信息,否则继续执行所述步骤s2和步骤s3。

15、进一步的,所述步骤s2亮度二值化具体包括以下步骤:

16、s21,将待检测应用gui截图的路径作为参数,调用cv2.imread()方法,获取待检测应用gui截图的bgr像素表示bgr_image,bgr_image为hs×ws矩阵,所述hs×ws矩阵中的每个元素为一个由3个整数组成的元组,所述3个整数分别为像素点b、g、r通道的值;

17、s22,将待检测应用gui截图的bgr像素表示bgr_image以及cv2.color_bgr2hsv作为参数,调用cv2.cvtcolor()方法,获取待检测应用gui截图的hsv像素表示hsv_image,hsv_image为hs×ws矩阵,所述hs×ws矩阵中的每个元素为一个由3个整数组成的元组,所述3个整数分别为像素点h、s、v通道的值;

18、s23,使用hsv_image[:,:,2]对hsv_image进行切片获取待检测应用gui截图的v通道矩阵,记为v_image,令参数为src=v_image,thresh=0,maxval=255,type=cv2.thresh_binary|cv2.thresh_otsu,调用cv2.threshold()方法,获取对v通道进行二值化后的亮度掩码v_mask。

19、进一步的,所述步骤s3轮廓检测具体包括以下步骤:

20、s31,设置令参数为src=v_mask,top=p,bottom=p,left=p,right=p,bordertype=cv2.border_constant,value=(0,0,0),调用cv2.copymakeborder()方法,在亮度掩码v_mask四周填充宽度为p的黑色像素,记四周填充黑色像素后的亮度掩码为v_mask_ext;

21、s32,令参数image=v_mask_ext,threshold1=5,threshold2=500,aperturesize=3,调用cv2.canny()方法进行canny边缘检测,记边缘检测结果为canny_image;

22、s33,令参数为src=canny_image,kernel=np.ones((3,3),np.uint8),iterations=2,调用cv2.dilate()方法对canny_image中检测出的边缘进行膨胀,迭代次数为2,得到膨胀后的边缘检测结果dlt_canny_image;

23、步骤34:令参数为image=dlt_canny_image,mode=cv2.retr_external,method=cv2.chain_approx_simple,调用cv2.findcontours()寻找膨胀后边缘检测结果dlt_canny_image中的轮廓,对于嵌套轮廓仅保留最外层的轮廓,得到一组轮廓contours;

24、步骤35:按照面积大小对所有检测到的轮廓进行降序排序,使用python内置的sorted()方法,参数为iterable=contours,key=cv2.contourarea,reverse=true,取排序结果中的第一个轮廓cnt,即面积最大的轮廓;

25、步骤36:调用cv2.boundingrect()方法获取面积最大的轮廓cnt的左上角坐标(x0,y0)、宽度w以及高度h,输出元组<x0,y0,x0+w,y0+h>作为检测到弹窗的边界信息。

26、本发明采用以上技术方案,具有以下有益效果:

27、本发明实现了仅基于视觉信息的移动应用gui弹窗检测,整个检测过程与平台无关,从而使得该弹窗检测方法能够应用于所有可提供gui截图的移动平台(或设备),进而支持gui测试中对异常弹窗的处理以及自动化程度的提升。

本文地址:https://www.jishuxx.com/zhuanli/20240830/282478.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。