小卡片,回复 “合集” 获取系统性的学习笔记和测试开发技能图谱 背景 在之前的一篇文章《移动端UI自动化过程中的难点及应对策略》中,我们提到在Android自动化测试执行过程中经常会遇到一些非预期的系统弹框...,我们可以通过无障碍服务来实现智能点击处理,但是通常这个服务只能手动到设置中开启,今天就跟大家分享一下如何实现一个自定义的无障碍服务以及如何自动化的开启它。...实现自定义的无障碍服务 自定义一个服务继承自AccessibilityService package com.android.jarvis.accessibility import android.accessibilityservice.AccessibilityService...= null) { if (findblockingUI("是否允许 USB 调试?"...="@xml/accessibility_service_config" /> 自动开启无障碍服务 可以通过执行下面的命令就可以自动开启指定的无障碍服务: adb
这些事件表示在用户界面中的一些状态的改变,例如:焦点的改变、按钮被点击等。这类服务可以有选择性地请求查询活动窗口的内容。...> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description...="true" /> 属性名称 属性简介 android:accessibilityEventTypes 指定我们在监听窗口中可以模拟哪些事件 android:accessibilityFeedbackType...指定无障碍服务的反馈方式 android:accessibilityFlags 指定额外的标志 android:canRetrieveWindowContent 指定是否允许我们的程序读取窗口中的节点和内容...指定监听的应用程序包名,多个以,隔开 更多属性介绍请参考:AccessibilityServiceInfo 4.AndroidManifest配置 <?
请求允许BIND_ACCESSIBILITY_SERVICE确保只有系统可以绑定到它。...> 配置 AccessibilityService可以配置为接收特定类型的辅助的事件,监听特定的包,给定的时间内得到每种事件,检索窗口内容, 指定一个设置的activiy,等等。...注意:这种方法只允许设置动态可配置属性:eventTypes, feedbackType, flags, notificationTimeout, packageNames 检索视图内容 服务可以指定在其声明...逻辑: 我们可以指定监测的某个包,这里我为了实现自动安装,因此监测com.android.packageinstaller“包下的com.android.packageinstaller.InstallerActivity...,用户未打开辅助服务,因此我做了是否开启本服务的判断,如果未打开则跳到设置页面开启此服务,开启了本服务的情况则直接安装; public static boolean isAccessibilityOn
从上图来看,整个模块分为两大块: 导入相关的基础模块或资源 从webdriver.Remote继承,定义和实现了Appium Python版本的客户端驱动webdriver类 由此我们可以清楚的得出以下几个结论...只要是selenium2中定义的webdriver方法在移动设备端可用,那么在移动测试时,可以直接用 API说明 下面我们把上述的API以一个表格的方式进行说明,以便后续大家在使用appium进行自动化测试时使用...= MobileBy.ANDROID_UIAUTOMATOR By.ACCESSIBILITY_ID = MobileBy.ACCESSIBILITY_ID 关键函数分析 在webdirver...id查找N个元素 用法:driver.find_elements_by_accessibility_id() 函数:create_web_element 参数:element_id 描述:使用指定的element..., app_activity, **opts 描述:启动指定参数的app, android专用 函数:lock 参数:seconds 描述:锁屏一段时间,ios专用 用法:driver.lock(5)
其中,packageNames 指定监听的应用程序对象的应用包名;accessibilityEventTypes 指定要监听的事件类型;description 为无障碍服务的描述信息;notificationTimeout...> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...,针对每一个事件类型,可以编写对应的应用逻辑。...接着,需要在项目的配置文件 AndroidManifest.xml 中 配置服务,并指定上面编写的配置文件。..." android:resource="@xml/config_accessibility" /> 最关键的是 编写事件的逻辑,根据配置文件中指定的事件类型和页面元素
<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility"/...<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" <!...--是否要能够检索活动窗口的内容,此设置不能在运行时改变-- android:canRetrieveWindowContent="true" <!...(text) 2、根据组件 id 找到对应的组件(注:方法返回的是集合,找到的组件不一点唯一,组件的 id 获取可以通过 Android Studio 内置的工具 monitor 获取,该工具路径:C:...希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn的支持。
description指定在无障碍服务当中显示给用户看的说明信息,上图中360手机助手的一大段内容就是在这里指定的。...accessibilityFlags可以指定无障碍服务的一些附加参数,这里我们传默认值flagDefault就行。...accessibilityFeedbackType指定无障碍服务的反馈方式,实际上无障碍服务这个功能是Android提供给一些残疾人士使用的,比如说盲人不方便使用手机,就可以借助无障碍服务配合语音反馈来操作手机...最后canRetrieveWindowContent指定是否允许我们的程序读取窗口中的节点和内容,必须写true。...> 智能安装服务,无需用户的任何操作就可以自动安装程序。
三、 使用情况 依据Android官方的详细介绍,开发者应该从自身应用出发,在增加视图属性如contentDescription等内容后,可以在不修改原有代码逻辑的情况下使用户体验得到优化,如预装在Android...根据Android官方的说明,TalkBack会使用语音反馈描述用户所执行的操作,以及告知用户收到的提醒和通知,可以帮助视力水平较低的用户顺利进行手机的触控、阅读内容的进行。...在国内,Accessibility被更多地用于免ROOT自动安装以及自动抢红包功能的实现,免ROOT自动安装可以优化用户体验,但自动抢红包功能既没有帮助有缺陷用户更好的使用手机,也没有提升用户体验,与Android...正如硬币有正反两面那样,在Accessibility使用趋势明显上升的势头发生之时,是否也有木马或者恶意软件趁机混迹于其中呢?图2.4是带有Accessibility功能的恶意样本数量统计。 ?...三、 滥用原因 通过对Accessibility相关技术和样本的分析,发现Accessibility可以获取用户操作界面的信息、获取用户输入信息甚至可以获取到用户操作手机的状态,那么,Accessibility
元素定位 本章节讲解是指在原生(APP)下进行元素定位,如果是Web(移动端里的浏览器)、混合(APP与WEBVIEW)里含有WEBVIEW页面进行元素定位,元素定位方法同Selenium一致,则可以参考...本章节讲解使用的元素定位工具: Android使用Android SDK里的uiautomatorviewer工具。..."accessibility_id") Android: 如图所示:利用uiautomatorviewer工具查看,accessibility_id指的是content-desc属性。...Views label:绝大多数情况下,与name作用一致 enabled:元素是否可点击,一般值为true或者false visible:元素是否可见,一般值为true或者false 9.1元素定位方式...+s$' 9.2以一种属性定位元素 可以用元素的属性:type、value、name、label、enabled、visible进行定位。
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...intercepted) { 凡是涉及到 Accessibility 功能的 , 直接忽略 , 与当前分析的事件分发无关 ; View childWithAccessibilityFocus...insertIndex - 1).getZ() > currentZ) { insertIndex--; } // 将当前遍历的组件插入到指定索引位置上...insertIndex - 1).getZ() > currentZ) { insertIndex--; } // 将当前遍历的组件插入到指定索引位置上...= null) { // 判断是否需要拦截 , 可以使用 requestDisallowInterceptTouchEvent 方法进行设置
这里的配置有很多属性,我们只研究其中的6个: android:packageNames:指定辅助服务监听哪些应用发出事件,多个应用包名之间用逗号分隔,如果不填,则监听手机上所有应用。...例如FLAG_REPORT_VIEW_IDS可以使回调的事件带上view的ID。...android:notificationTimeout:两个同样类型的监听事件发给辅助类的最小时间间隔 android:canRetrieveWindowContent:是否可以获取窗口内容,一般设置为...id,而且辅助的配置标记必须是android:accessibilityFlags="flagReportViewIds"才能获取节点的id,可以使用Android Device Monitor或者Layout...getChild(i)) } } 此外,在MainActivity里面,还有判断服务是否开启的逻辑,如果没有开启,则可以点击跳转带开启页面: // 代码片段6 MainActivity.kt class
resource-id 唯一标识该元素的值(id有时候并不唯一) 使用前最好先判断下id是否唯一 一般优先根据id定位 # resource-id = 'io.manong.developerdaily...driver.find_element_by_class_name('android.widget.Button') 通过content-desc定位元素find_dlement_by_accessibility_id...content-desc属性是用来描述该元素的作用 如果要查询的界面元素的content-desc在当前界面唯一,则可以使用此方法 大部分情况下,该字段为空 driver.find_dlement_by_accessibility_id...('test') 通过text定位元素driver.find_element_by_android_uiautomator("text('xxx')") 元素id相同时,可以根据text来进行定位...' # 指定apk的启动界面(通常启动界面是唯一的) 通过aapt命令查找 desired_caps['unicodeKeyboard'] = True # 安装中文输入法,以便于控制,及部分中文的输入
要在Android上实现一个订票机器人,其实需求可以转化为,Android可以自动开打开某个App,然后,进入某个App的行程预定页面,填上你的出发地,目的地,然后点击查找,当然,为了预定到比较廉价的机票...package com.example.android.apis.accessibility; import android.accessibilityservice.AccessibilityService...android:resource="@xml/accessibility_service_config" /> step4.新增上面Android描述文件引用的资源文件...> " android:accessibilityEventTypes...一些技巧 1、如何判断当前应用是否是某应用,对,就是通过包名来判断,有人可能会问,我怎么知道包名呢?
,可以确定两个地方: Settings里Accessibility选项的入口 packages/apps/Settings/res/xml/accessibility_settings.xml Accessibility...的控制代码 packages/apps/Settings/src/com/android/settings/accessibility/AccessibilitySettings.java AccessibilitySettings.java...这里通过KEY的命名和相关类的命名,可以知道,Accessibility Shortcut打开后,相关的手势被称为Global Gesture,全局手势。...有机会可以深入了解一下。 在onStart的地方,通过阅读注释,可以知道,这里处理打开Accessibility后的双指触摸,触摸时不销毁弹出的关机选项对话框。...代码中有一个非常重要的判断,它决定是否进入Accessibility模式。
其中包含的内容为: 节点 node 节点属性:包括 clickable(是否可点击)、content-desc(内容)、resource-id(元素 id)、text(文本)、bounds(坐标)等。...通过 ID 定位 在 Android 系统元素的 ID 称为 resource-id,使用页面分析工具比如 Appium Inspector 能够获取元素的唯一标识是 ID 属性,可以使用 ID 进行元素定位...通过 Accessibility 定位 当分析工具能抓取到的 content-desc 的属性值是唯一时,可以采用 Accessibility 的定位方式,示例代码: Python 版本 driver.find_element_by_accessibility_id...如果只想定位 Android 系统的页面元素,可以直接使用 uiautomatorviewer,速度快并且不需要配置任何参数,直接点击获取页面的图标就可以将客户端页面抓取出来。...另外,uiautomatorviewer 只能抓取 android8 以下的版本,如果要抓取 android8 以上的版本的页面信息,可以使用 Appium Inspector 或 WEditor。
现在的微信跳一跳小游戏都是通过 PC 端破解的,于是我就写了一个只用 Android 手机就能破解的插件。...【建议】应该还可以通过Accessibility直接在手机端实现 分析 kotlin, Android Studio, Accessibility, adb, root Accessibility https...://developer.android.com/guide/topics/ui/accessibility/services.html Accessibility 可以用来辅助操作,自动化测试等,可以参考微信抢红包插件...我们可以监测微信,如果是跳一跳界面就触发插件。 查了一下文档,好像只有长按,不能自己控制时间。用 Accessibility 实现跳跃是不行了。...adb 如果是连接 PC 端,可以通过 adb 命令截图,模拟跳跃的长按(点击拖动)操作。
其中包含的内容为:节点 node节点属性:包括 clickable(是否可点击)、content-desc(内容)、resource-id(元素 id)、text(文本)、bounds(坐标)等。...通过 ID 定位在 Android 系统元素的 ID 称为 resource-id,使用页面分析工具比如 Appium Inspector 能够获取元素的唯一标识是 ID 属性,可以使用 ID 进行元素定位...通过 Accessibility 定位当分析工具能抓取到的 content-desc 的属性值是唯一时,可以采用 Accessibility 的定位方式,示例代码:Python 版本driver.find_element_by_accessibility_id...如果只想定位 Android 系统的页面元素,可以直接使用 uiautomatorviewer,速度快并且不需要配置任何参数,直接点击获取页面的图标就可以将客户端页面抓取出来。...另外,uiautomatorviewer 只能抓取 android8 以下的版本,如果要抓取 android8 以上的版本的页面信息,可以使用 Appium Inspector 或 WEditor。
:name="android.permission.BIND_ACCESSIBILITY_SERVICE" / <service android:name=".DingService" android...<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...; import android.util.Log; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo...AccessibilityNodeInfo nodeInfo) { if(type == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED){ //判断当前是否是主页的签到页..., 1).show(); index = 1; } } 以上基本是所有代码,这个小程序中可以不用Activity组件,也可以加一个小的Activity,用来作为系统的总开关,当然也可以自动检测时间,来判断是否开启服务
Appium简介 Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。支持多种语言。...SDK环境变量配置: 先下载安卓的sdk工具: http://tools.android-studio.org/index.php/sdk 也可以从我网盘下载我已经下载好的包: 链接:https:/...两个路径: %ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools; 配置好后,在命令行窗口输入adb version 即可检查是否配置好。...接下来执行一段脚本来验证环境是否搭建成功,是否可以正常操作app,以华为P20手机上的系统自带的计算器软件为例,演示一下如何操作app的一个最简单的demo。...2、安卓app除了使用Appium Desktop里面的Inspector功能定位/录制元素之外,还可以使用android sdk目录下的tools目录下的uiautomatorviewer.bat进行元素定位
领取专属 10元无门槛券
手把手带您无忧上云