██哈罗出行自动化测试抢单测试程序

██哈罗出⾏⾃动化测试抢单测试程序
前⾔赘述:
本博客只对使⽤Android AccessibilityService实现⾃动抢单测试程序Demo的api使⽤,不对AccessibilityService的类结构及相关配置信息做详细说明,如需了解,请查阅⾕歌安卓AccessibilityService的说明⽂档。
google Android官⽹AccessibilityService的⽂档说明:
我最早是想在哈罗出⾏上做个脚本来抢单/单,思考着要如何来实现这样⼀个功能。⽤lua脚本?⽤Android Monkey?很明显,这些都有局限性,实现不了。有⼀天,我想到某个电视台中的情景:某个电视台中,说的是⼩⽶集团(⼩⽶⼿机),在⼀个⼯作房间中的机架上整整齐齐的摆放着有上千乃⾄上万台的⼿机,每个⼿机的屏幕都在疯狂的闪烁着。后来才知道原来那是在做⾃动化交互测试。我在想:我的这个需求功能,是不是也是⾃动化交互测试⽅⾯的技术点?百度了⼀下,并由此接触到了Android AccessibilityService。
public abstract class AccessibilityService
extends
↳android.accessibilityservice.AccessibilityService
继承于android四⼤组件之Service,其使⽤⽅式与service基本相同。但它是⼀个系统级别的“”服务,可监听⼿机上所有应⽤所产⽣的⼩变化、⼤变化(⽐如某个被监听应⽤的发⽣的点击事件控件⽂本内容变化、消息通知等)。另它有⾃⼰独⽴的⽣命周期(思路有点类似于开发中消息与事件的处理),如下:
onCreate()
onServiceConnected()
onAccessibilityEvent(AccessibilityEvent event)//线程阻塞式
onInterrupt()
下⾯进⼊主题:
第⼀步.注册服务
1.1在清单⽂件中注册服务电极材料
1<service
2    android:name=".service.HaloAccessibilityServiceV5"
3    android:enabled="true"
4    android:exported="true"
5    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
6    <intent-filter>
7        <action android:name="android.accessibilityservice.AccessibilityService" />
8    </intent-filter>
9    <meta-data
10        android:name="android.accessibilityservice"
11        android:resource="@xml/accessibilityservice_setting" />
12</service>
1.2meta-data引⼊配置
1<meta-data
2        android:name="android.accessibilityservice"
3        android:resource="@xml/accessibilityservice_setting" />
香蜜果l配置信息项
1<?xml version="1.0" encoding="utf-8"?>
背板制作
2<accessibility-service xmlns:android="schemas.android/apk/res/android"
3    android:accessibilityEventTypes="typeAllMask"
4    android:accessibilityFeedbackType="feedbackGeneric"
5    android:accessibilityFlags="flagReportViewIds|flagRetrieveInteractiveWindows"
6    android:canPerformGestures="true"
7    android:canRetrieveWindowContent="true"
8    android:description="@string/accessibilityservice_setting"
9    android:notificationTimeout="100"
10    android:packageNames="填写你要监听的应⽤完整包名以逗号隔开可填写多个"></accessibility-service>
1.4须⼿动为apk应⽤程序打开⽆障碍权限开关。
位置在设置->快捷与辅助->⽆障碍,到⾃⼰的apk辅助程序应⽤,⼿动将开关打开。
第⼆步.实现辅助功能
思路:实现辅助功能的关键是接受到事件,并使⽤AccessibilityService相关api来获取应⽤控件信息,以及回应适当的事件,来完成"辅助"功能。
1.1下⾯先来看⼀下AccessibilityService做为"系统级"服务可以监听到指定应⽤的哪些事件,或者说可以监听到应⽤的哪些变化。
Event types⽀持的事件类型(全⾯)
AccessibilityEvent#TYPE_VIEW_CLICKED//View控件点击事件
AccessibilityEvent#TYPE_VIEW_LONG_CLICKED//长按事件
AccessibilityEvent#TYPE_VIEW_FOCUSED//焦点事件电动车架
AccessibilityEvent#TYPE_VIEW_SELECTED//选择事件
AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED//⽂本变化
AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED//窗⼝状态变化
AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED//消息通知状态变化
AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START//⼿势START陶瓷球
AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END//⼿势END
AccessibilityEvent#TYPE_VIEW_HOVER_ENTER//悬停
AccessibilityEvent#TYPE_VIEW_HOVER_EXIT//悬停
AccessibilityEvent#TYPE_VIEW_SCROLLED//滚动
AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED//⽂本选择变化
AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED//窗⼝连接变化
AccessibilityEvent#TYPE_ANNOUNCEMENT//公告
AccessibilityEvent#TYPE_GESTURE_DETECTION_START//⼿指检测START
AccessibilityEvent#TYPE_GESTURE_DETECTION_END//⼿指检测END
AccessibilityEvent#TYPE_TOUCH_INTERACTION_START//触摸互动START
AccessibilityEvent#TYPE_TOUCH_INTERACTION_END//触摸互动END
AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED//可访问性
AccessibilityEvent#TYPE_WINDOWS_CHANGED//窗⼝变化
AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED//可访问性清除
1.2获取应⽤控件信息的⽅式有两种
1).通过id寻控件,id格式为:(包名:id/+制定控件的id),对第三⽅应⽤⽆效。这⾥引⼊⼀个⼯具,就是Android Sdk下⾃带的monitor监测器⼯具,可以使⽤它来初步的分析第三⽅应⽤的页⾯控件结构,如id、控件⽂本、层次关系等信息。~/Android/Sdk/tools$ ./monitor。
List<AccessibilityNodeInfo> list = rowNode.findAccessibilityNodeInfosByViewId("com.jingyao.easybike:id/tvAmount");
2).通过控件的text寻控件
缘114
List<AccessibilityNodeInfo> list = rowNode.findAccessibilityNodeInfosByText("不拼车");
1.3.可回应的事件
1)节点可回应执⾏的操作
android.view.accessibility.AccessibilityNodeInfo#performAction(int action)
android.view.accessibility.AccessibilityNodeInfo#ACTION_CLICK//节点点击
android.view.accessibility.AccessibilityNodeInfo#ACTION_FOCUS
android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_FOCUS
android.view.accessibility.AccessibilityNodeInfo#ACTION_SELECT
android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_SELECTION
android.view.accessibility.AccessibilityNodeInfo#ACTION_CLICK
android.view.accessibility.AccessibilityNodeInfo#ACTION_LONG_CLICK
android.view.accessibility.AccessibilityNodeInfo#ACTION_ACCESSIBILITY_FOCUS
android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_ACCESSIBILITY_FOCUS
android.view.accessibility.AccessibilityNodeInfo#ACTION_NEXT_AT_MOVEMENT_GRANULARITY android.view.accessibility.AccessibilityNodeInfo#ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY android.view.accessibility.AccessibilityNodeInfo#ACTION_NEXT_HTML_ELEMENT
android.view.accessibility.AccessibilityNodeInfo#ACTION_PREVIOUS_HTML_ELEMENT
android.view.accessibility.AccessibilityNodeInfo#ACTION_SCROLL_FORWARD
android.view.accessibility.AccessibilityNodeInfo#ACTION_SCROLL_BACKWARD
android.view.accessibility.AccessibilityNodeInfo#ACTION_COPY//复制
android.view.accessibility.AccessibilityNodeInfo#ACTION_PASTE//粘贴
android.view.accessibility.AccessibilityNodeInfo#ACTION_CUT//剪切
android.view.accessibility.AccessibilityNodeInfo#ACTION_SET_SELECTION
android.view.accessibility.AccessibilityNodeInfo#ACTION_EXPAND
android.view.accessibility.AccessibilityNodeInfo#ACTION_COLLAPSE
android.view.accessibility.AccessibilityNodeInfo#ACTION_DISMISS
android.view.accessibility.AccessibilityNodeInfo#ACTION_SET_TEXT
android.view.accessibility.AccessibilityNodeInfo#LAST_LEGACY_STANDARD_ACTION
android.view.accessibility.AccessibilityNodeInfo#ACTION_TYPE_MASK
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_HTML_ELEMENT_STRING android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_SELECTION_START_INT
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_SELECTION_END_INT
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_ROW_INT
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_COLUMN_INT
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_PROGRESS_VALUE
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_MOVE_WINDOW_X
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_MOVE_WINDOW_Y
android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_ACCESSIBLE_CLICKABLE_SPAN
2)全局回应可执⾏的操作
android.accessibilityservice.AccessibilityService#performGlobalAction(int action)
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_BACK//后退,相当于⼿机后退按键android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_HOME//回到⼿机HOME屏幕android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_RECENTS
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_NOTIFICATIONS
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_QUICK_SETTINGS
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_POWER_DIALOG
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_LOCK_SCREEN
android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_TAKE_SCREENSHOT
第三步.写个⾃动化测试DEMO应⽤。
下⾯贴部分对哈罗出⾏⾃动化测试抢单/单的主要逻辑代码,HaloAccessibilityServiceV5.java

本文发布于:2024-09-24 03:20:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/276917.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:控件   事件   功能   实现   信息   变化
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议