Android自动化测试中AccessibilityService获取控件信息(1)

AccessibilityService为一个响应用户发送AccessibilityEvent事件的服务类,主要用作对于一些辅助功能的实现中。对于某些方面有缺陷的人群,可以通过辅助功能反馈给用户。

AccessibilityService的介绍,网络上有很多,我就不多做介绍了。我把怎么实现它跟大家分享一下,以及怎么把它跟Android自动化测试扯上关系的学习过程给大家介绍一下。

第一步 编写辅助程序

创建一个Android项目,创建一个服务类,继承AccessibilityService。

import android.accessibilityservice.AccessibilityService;import android.accessibilityservice.AccessibilityServiceInfo;import android.annotation.SuppressLint;import android.util.Log;import android.view.accessibility.AccessibilityEvent;import android.view.accessibility.AccessibilityNodeInfo;@SuppressLint("NewApi")public class MyAccessibility extends AccessibilityService {private static final String TAG = "MyAccessibility";String[] PACKAGES = { "com.android.settings" };@Overrideprotected void onServiceConnected() {Log.i(TAG, "config success!");AccessibilityServiceInfo accessibilityServiceInfo = new AccessibilityServiceInfo();// accessibilityServiceInfo.packageNames = PACKAGES;accessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;accessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;accessibilityServiceInfo.notificationTimeout = 1000;setServiceInfo(accessibilityServiceInfo);}@SuppressLint("NewApi")@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {// TODO Auto-generated method stubint eventType = event.getEventType();String eventText = "";Log.i(TAG, "==============Start====================");switch (eventType) {case AccessibilityEvent.TYPE_VIEW_CLICKED:eventText = "TYPE_VIEW_CLICKED";break;case AccessibilityEvent.TYPE_VIEW_FOCUSED:eventText = "TYPE_VIEW_FOCUSED";break;case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:eventText = "TYPE_VIEW_LONG_CLICKED";break;case AccessibilityEvent.TYPE_VIEW_SELECTED:eventText = "TYPE_VIEW_SELECTED";break;case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:eventText = "TYPE_VIEW_TEXT_CHANGED";break;case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:eventText = "TYPE_WINDOW_STATE_CHANGED";break;case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:eventText = "TYPE_NOTIFICATION_STATE_CHANGED";break;case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:eventText = "TYPE_TOUCH_EXPLORATION_GESTURE_END";break;case AccessibilityEvent.TYPE_ANNOUNCEMENT:eventText = "TYPE_ANNOUNCEMENT";break;case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START:eventText = "TYPE_TOUCH_EXPLORATION_GESTURE_START";break;case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:eventText = "TYPE_VIEW_HOVER_ENTER";break;case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT:eventText = "TYPE_VIEW_HOVER_EXIT";break;case AccessibilityEvent.TYPE_VIEW_SCROLLED:eventText = "TYPE_VIEW_SCROLLED";break;case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:eventText = "TYPE_VIEW_TEXT_SELECTION_CHANGED";break;case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:eventText = "TYPE_WINDOW_CONTENT_CHANGED";break;}eventText = eventText + ":" + eventType;Log.i(TAG, eventText);Log.i(TAG, "=============END=====================");}@Overridepublic void onInterrupt() {// TODO Auto-generated method stub}}

该服务类继承了3个方法:

1.onServiceConnected():绑定服务所用方法,一些初始化的操作放在这里面。

2.onAccessibilityEvent(AccessibilityEvent event):响应AccessibilityEvent的事件,在用户操作的过程中,系统不断的发送sendAccessibiltyEvent(AccessibilityEvent event);然后通过onAccessibilityEvent()可以捕捉到该事件,然后分析。

3.public void onInterrupt():打断获取事件的过程,本例中暂不适用。

在onServiceConnected()我们做了一些初始化的工作,通过AccessibilityServiceInfo设置了AccessibilityService的一些参数

//ccessibilityServiceInfo.packageNames = PACKAGES:响应某个应用的时间,包名为应用的包名;可以用String[]对象传入多包。如果不设置,默认响应所有应用的事件。

ssibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK:响应时间的类型,事件分很多种:单击、长按、滑动等,需要指定,我设置了所有事件都响应:TYPES_ALL_MASK。

cessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN:设置回馈给用户的方式,是语音播出还是振动。这个我们稍后尝试配置一些TTS引擎,让它发音。

cessibilityServiceInfo.notificationTimeout = 1000:看意思就能明白,响应时间的设置。

接下来我们要在配置文件AndroidManifest.xml配置该服务:

家!甜蜜的家!天下最美好的莫过於家

Android自动化测试中AccessibilityService获取控件信息(1)

相关文章:

你感兴趣的文章:

标签云: