一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种安卓自动化的方法与系统与流程

2021-11-15 18:18:00 来源:中国专利 TAG:


1.本发明属于安卓自动化测试技术领域,更具体地说,是涉及一种安卓自动化的方法与系统。


背景技术:

2.现有技术主要是利用appium框架或者uiautomator框架进行安卓操作系统上的app自动化测试,但是appium框架或者uiautomator框架在测试时,速度不够快,许多底层事件不能快速获取,有些机型同样的控件不能准确定位。随着flutter技术的推广,移动端页面普遍部分或者全部采用flutter开发,而且appium框架或者uiautomator框架都不能完全支持flutter和h5页面的测试。虽然google官方推出了flutter driver和integrationtest,但是在实际使用中存在以下问题:不适用于混合栈app,虽然appium中有相关的driver,但是无法切换环境且元素定位能力相对薄弱。


技术实现要素:

3.本发明的目的在于提供一种安卓自动化的方法与系统,旨在解决现有技术中利用appium框架或者uiautomator框架对安卓操作系统上的app自动化测试时,许多底层事件不能快速获取和元素定位能力薄弱的问题。
4.为实现上述目的,本发明采用的技术方案是:一种安卓自动化的方法,包括以下步骤:
5.步骤1:获取当前界面的根节点;
6.步骤2:根据所述根节点遍历所有节点得到当前界面所有的元素信息;
7.步骤3:将预设逻辑封装为函数;
8.步骤4:当需要测试时,调用所述函数,得到自动化测试结果。
9.优选的,所述步骤1:获取当前界面的根节点,包括:
10.调用androidx.test.platform.app.instrumentationregistry的getinstrumentation方法获得instrumentation的过程记为实例s;
11.通过调用所述实例s的getuiautomation方法获得uiautomation实例;
12.对ui automator service进行能力配置得到配置后的ui automator service;
13.查询所述uiautomation实例的getrootinactivewindow方法来获取当前界面accessibilitynodeinfo类型的根节点。
14.优选的,所述步骤2:根据所述根节点遍历所有节点得到当前界面所有的元素信息,包括:
15.根据所述根节点遍历搜索所有叶子节点和所有非叶子节点,得到当前界面所有的元素信息;所述元素信息包括元素的text属性、元素的classname属性和元素的id属性;其中,在搜索元素的text属性时,调用所述accessbilitynodeinfo类型的根节点的getcontentdescription方法或者gettext方法进行部分匹配搜索。
16.优选的,所述步骤4:当需要测试时,调用所述函数,得到自动化测试结果,包括:
17.利用安卓事件监听方法监听测试时界面的变化。
18.本发明还提供了一种安卓事件监听方法,包括:
19.调用uiautomation实例的setonaccessibilityeventlistener方法得到onaccessibilityevent类;
20.根据所述onaccessibilityevent类来监听当前界面的变化。
21.本发明还提供了一种安卓自动化的系统,包括:
22.根节点获取模块,用于获取当前界面的根节点;
23.节点遍历模块,用于根据所述根节点遍历所有节点得到当前界面所有的元素信息;
24.逻辑封装模块,用于将预设逻辑封装为函数;
25.函数调用模块,用于当需要测试时,调用所述函数,得到自动化测试结果。
26.优选的,所述根节点获取模块,包括:
27.调用单元,用于调用androidx.test.platform.app.instrumentationregistry的getinstrumentation方法获得instrumentation的过程记为实例s;
28.uiautomation实例获取单元,用于通过调用所述实例s的getuiautomation方法获得uiautomation实例;
29.能力配置单元,用于对ui automator service进行能力配置得到配置后的ui automator service;
30.节点获取单元,用于查询所述uiautomation实例的getrootinactivewindow方法来获取当前界面accessibilitynodeinfo类型的根节点。
31.优选的,所述节点遍历模块,包括:
32.遍历单元,用于根据所述根节点遍历搜索所有叶子节点和所有非叶子节点,得到当前界面所有的元素信息;所述元素信息包括元素的text属性、元素的classname属性和元素的id属性;其中,在搜索元素的text属性时,调用所述accessbilitynodeinfo类型的根节点的getcontentdescription方法或者gettext方法进行部分匹配搜索。
33.本发明提供的一种安卓自动化的方法与系统的有益效果在于:与现有技术相比,本发明的一种安卓自动化的方法,首先获取根节点,然后根据根节点遍历所有节点得到当前界面所有的元素信息;调用uiautomation实例监听当前界面的变化;最后,当需要测试时,调用预设的函数,得到自动化测试结果。本发明通过根据uiautomator框架中的api,调用类和方法获取uiautomation实例,可以绕过uiautomator对底层的限制获取根节点,通过该根节点可以识别所有的原生控件和flutter元素,极大的弥补了原生框架很多控件无法识别的问题,此外本方法还可以支持h5页面,微信小程序等除了游戏之外的所有应用场景。
附图说明
34.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
35.图1为本发明实施例提供的一种安卓自动化的方法流程图。
36.图2为本发明实施例提供的一种安卓自动化的系统原理图。
具体实施方式
37.为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
38.本发明的目的在于提供一种安卓自动化的方法与系统,旨在解决现有技术中利用appium框架或者uiautomator框架对安卓操作系统上的app自动化测试时,许多底层事件不能快速获取的问题。
39.请参阅图1,为实现上述目的,本发明采用的技术方案是:一种安卓自动化的方法,包括以下步骤:
40.s1:根据uiautomator框架中的api,调用类和方法获取uiautomation实例;
41.s1具体包括:
42.调用androidx.test.platform.app.instrumentationregistry的getinstrumentation方法获得instrumentation的过程记为实例s;
43.通过调用实例s的getuiautomation方法获得uiautomation实例。
44.在实际应用中,可以将androidx.test.platform.app.instrumentationregistry的getinstrumentation方法获得instrumentation的实例记为实例s;
45.通过实例s的getuiautomation方法获得uiautomation的实例记为u。
46.在本发明中可通过s1绕过uiautomator对底层的限制获取根节点。
47.s2:调用uiautomation实例获取当前界面的根节点;
48.s2具体包括:
49.对ui automator service进行能力配置得到配置后的ui automator service;
50.查询所述uiautomation实例的getrootinactivewindow方法来获取当前界面accessibilitynodeinfo类型的根节点。
51.在实际应用中,在获取根节点之前可以做个服务配置增强它的能力,例如在accessbilityserviceinfo变量中先配置能力:
52.accessibilityserviceinfo info=muiautomation.getserviceinfo();
53.info.flags|=accessibilityserviceinfo.flag_retrieve_interactive_wi ndows;
54.info.flags|=accessibilityserviceinfo.flag_request_enhanced_web_accessibility;
55.通过getserviceinfo方法获得这个变量然后把里面的flag配置下能力,还可以通过info.packagenames来指定需要监听的package名称。
56.s3:根据根节点遍历所有节点得到当前界面所有的元素信息;
57.s3具体包括:
58.根据所述根节点遍历搜索所有叶子节点和所有非叶子节点,得到当前界面所有的元素信息;其中,在搜索元素的text属性时,调用所述accessbilitynodeinfo类型的根节点
的getcontentdescription方法或者gettext方法进行部分匹配搜索。
59.下面对这一过程进行进一步的描述:
60.在本发明中,实时的通过查询uiautomation实例的getrootinactivewindow方法来获取当前界面accessibilitynodeinfo类型的根节点,同时根据该根节点可以遍历得到当前界面所有的元素信息(包含所有元素的id,classname,text等属性)。
61.为了在测试过程中,支持flutter元素以及不同机型元素,需要扫描所有节点,正常来说控件的元素一般在控件树的叶子节点。在本发明中,需要遍历所有元素,因为很多flutter元素的text等属性会存在于非叶子节点上,搜索的时候按元素的text,id,classname属性进行搜索,搜索text值时候用每个accessbilitynodeinfo类型节点的getcontentdescription方法和gettext进行部分匹配搜索,只要任一个方法匹配就算成功搜索到,这个时候可以用accessbilitynodeinfo的performaction方法进行点击,或者根据accessbilitynodeinfo的getboundsinscreen方法获取元素所在的区域,进行按坐标点击。在本发明中采用部分匹配是因为在搜索flutter元素的时候会显示很多的元素属性值。比如搜索商城,在flutter元素中往往是不止显示这个text属性,比如显示的可能是商城index1,所有搜索flutter元素按text搜索的使用部分匹配更准确。
62.有了根节点之后,就有很多方法可以遍历所有节点,在本发明中举例其中一种根据根节点遍历的方法,并且去搜索text为指定文字或者字符的控件。
63.定义一个arraylist<accessibilitynodeinfo>类型的变量记为nodelist用来存放正常节点(收集叶子节点)。
64.定义一个arraylist<accessibilitynodeinfo>类型的变量记为flutterlist用来存放flutter元素节点或者其他非正常节点(搜集非叶子节点)。
65.利用实例u的getrootinactivewindow()方法获取根节点或者获取当前手机界面的accessibilitynodeinfo类型的根节点,记为实例root1;
66.调用函数名为b,函数名记为interate,并且参数类型为accessibilitynodeinfo类型的参数,记为info2的方法。
67.将实例root1传入函数b,然后利用递归循环遍历子节点,遍历时候,当info2的getchildcount方法返回值为0并且info2的isvisibletouser方法的返回值为true时,在这个时候调用当前节点的的getcontentdescription方法和gettext方法进行部分匹配搜索,只要其中一个方法匹配就算成功搜索到,将搜索到的该节点加入nodelist;否则调用当前节点(非叶子节点)的getcontentdescription方法和gettext方法进行部分匹配搜索,看是否包含需要搜索的text,只要任一个方法匹配就算成功搜索到,并将搜索到的节点加入nodelist;继续递归遍历(比如根据调用info2的getchild()反复以上过程)直到所有的节点搜索完成。
68.本发明可以通过s2

s3快速精准查找到所有flutter元素。
69.s4:将预设逻辑封装为函数;
70.s5:当需要测试时,调用函数,得到自动化测试结果。
71.在本发明中,可以利用安卓事件监听方法监听测试时界面的变化。
72.本发明还提供了一种安卓事件监听方法,包括:
73.调用uiautomation实例的setonaccessibilityeventlistener方法得到
onaccessibilityevent类;
74.根据所述onaccessibilityevent类来监听当前界面的变化。具体的,本发明可以通过调用new uiautomation.onaccessibilityeventlistener()里的onaccessibilityevent方法来监听界面的变化。
75.下面结合具体的实施例对本发明提供的一种安卓事件监听方法进行进一步的说明:
76.public void onaccessibilityevent(accessibilityevent event){
77.int eventtype=event.geteventtype();
78.switch(eventtype){
79.case accessibilityevent.type_view_clicked:
80.case accessibilityevent.type_window_state_changed:
81.case accessibilityevent.type_windows_changed:
82.case accessibilityevent.type_view_scrolled:
83.case accessibilityevent.type_window_content_changed:
84.需要说明的是,以上代码只是本发明一种较佳的实施方式,并不用以限制本发明。
85.现有技术中,常常存在着appium框架对android的toast组件无法操作的问题,因为本发明可以实现监听界面的变化,进而检测到toast组件的界面变化,实现对toast组件的操作。
86.本发明通过获取界面根节点,遍历当前界面元素的text属性,然后去等待监听toast中所显示文字信息有没有出现,也可以基于本发明封装一个函数来达到这个目的,例如:通过onaccessibilityevent(accessibilityevent event)中通过geteventtype()获取int类型的eventtype。
87.当它为accessibilityevent.type_windows_changed的时候说明界面发生变化。以上内容仅为了便于理解本发明,而结合具体的实施例进行的进一步说明,但不作为限制本技术应用范围的依据。
88.本发明可以利用安卓事件监听方法绕过限制达到辅助服务的功能,这样基于此方法可以做很多事情比如判断页面加载的时间,智能等待等。本发明可以利用安卓事件监听方法接收到页面变化的事件,这个时候可以获取根节点去查当前的界面的元素,而不是不断的查询根节点。
89.未改造之前uiautomator框架中很多元素特别是flutter页面元素无法获取,在采用了本发明中的安卓自动化的方法之后,uiautomator框架可以识别原生控件和flutter元素,极大的弥补了原生uiautomator框架很多控件无法识别,且有些机型也不能识别的问题,本发明可以用底层的方式去搜索到所有元素。
90.此外,本发明还可以绕过限制达到辅助服务的功能,不需要启动辅助服务,就可以精准捕获页面的事件。本方法支持h5页面,微信小程序等除了游戏之外的所有应用场景。
91.请参阅图2,本发明还提供了一种安卓自动化的系统,包括:
92.根节点获取模块,用于获取当前界面的根节点;
93.节点遍历模块,用于根据所述根节点遍历所有节点得到当前界面所有的元素信息;
94.逻辑封装模块,用于将预设逻辑封装为函数;
95.函数调用模块,用于当需要测试时,调用所述函数,得到自动化测试结果。
96.优选的,所述根节点获取模块,包括:
97.调用单元,用于调用androidx.test.platform.app.instrumentationregistry的getinstrumentation方法获得instrumentation的过程记为实例s;
98.uiautomation实例获取单元,用于通过调用所述实例s的getuiautomation方法获得uiautomation实例;
99.能力配置单元,用于对ui automator service进行能力配置得到配置后的ui automator service;
100.节点获取单元,用于查询所述uiautomation实例的getrootinactivewindow方法来获取当前界面accessibilitynodeinfo类型的根节点。
101.优选的,所述节点遍历模块,包括:
102.遍历单元,用于依次按照元素的text属性、元素的id属性和元素的classname属性的顺序根据所述根节点遍历搜索所有叶子节点和所有非叶子节点,得到当前界面所有的元素信息;其中,在搜索元素的text属性时,调用所述accessbilitynodeinfo类型的根节点的getcontentdescription方法或者gettext方法进行部分匹配搜索。
103.本发明公开了一种安卓自动化的方法与系统,本发明提供的一种安卓自动化的方法,首先根据uiautomator框架中的api,调用类和方法获取uiautomation实例;然后,调用uiautomation实例获取当前界面的根节点;根据根节点遍历所有节点得到当前界面所有的元素信息;调用uiautomation实例监听当前界面的变化;最后,当需要测试时,调用预设的函数,得到自动化测试结果。本发明通过根据uiautomator框架中的api,调用类和方法获取uiautomation实例,可以绕过uiautomator对底层的限制获取根节点,通过该根节点可以识别所有的原生控件和flutter元素,极大的弥补了原生框架很多控件无法识别的问题,此外本方法还可以支持h5页面,微信小程序等除了游戏之外的所有应用场景。
104.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献