AccessibilityService-weditor获取节点元素信息&Assists实现自动化
1. weditor 简介
在使用AccessibilityService开发自动化工具或自动化测试脚本时需要知道控件属性才能自动化逻辑。weditor 是一个用于 Android UI 自动化测试的可视化工具,它提供一个 Web 界面,方便查看 Android 设备 UI 层级、获取控件属性。
2. 安装前的准备
在安装 weditor 之前,需要先安装以下依赖环境:
2.1 安装 Python
weditor 依赖 Python 运行环境,建议使用 Python 3.6 及以上版本。
在 Windows 上,可以从 Python 官网 下载并安装。
在 macOS/Linux 上,可以使用包管理工具安装,如:
sudo apt install python3 # Ubuntu/Debian
brew install python3 # macOS
3. 安装 weditor
使用 pip 命令安装 weditor:
pip install -U weditor
安装完成后,可以通过以下命令检查是否安装成功:
weditor --help
如果输出帮助信息,则说明安装成功。
4. 连接 Android 设备
4.1 启用 USB 调试模式
在手机上开启 开发者模式 并启用 USB 调试。
4.2 连接设备
通过 USB 连接手机,并运行以下命令查看设备是否被识别:
adb devices
如果设备列表中显示了设备编号,则表示连接成功。
5. 启动 weditor
在终端执行以下命令启动 weditor:
weditor
默认情况下,它会在 localhost:17310 启动一个 Web 服务器。在浏览器中访问:
http://localhost:17310
即可打开 weditor 界面,并且显示手机当前的界面即可查看节点元素信息,如下:
6. 使用Assists实现简单自动点击和输入
Assists是一个基于AccessibilityService封装的开发框架,主要是为了简化自动化脚本开发、提供增强能力、提高代码易维护性的一个框架。
6.1集成Assists
项目根目录build.gradle添加
以下是Groovy DSL写法,Kotlin DSL的可GPT问下
allprojects {
repositories {
//添加jitpack仓库
maven { url 'https://jitpack.io' }
}
}
主模块build.gradle添加
dependencies {
//按需添加
//基础库(必须)
implementation "com.github.ven-coder.Assists:assists-base:v3.2.11"
//屏幕录制相关(可选)
implementation "com.github.ven-coder.Assists:assists-mp:v3.2.11"
//opencv相关(可选)
implementation "com.github.ven-coder.Assists:assists-opcv:v3.2.11"
}
主模块AndroidManifest.xml中注册服务
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.ven.assists.simple">
<application
android:name="com.ven.assists.simple.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<!-- 添加代码 ↓-->
<service
android:name="com.ven.assists.service.AssistsService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<!--android:priority="10000" 可提高服务在设置中的权重,排在前面-->
<intent-filter android:priority="10000">
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/assists_service" />
</service>
<!-- 添加代码 ↑-->
</application>
</manifest>
6.2 实现点击微信搜索并输入搜索内容
6.2.1 获取微信搜索节点元素id
注意: 选中的搜索节点的clickable需要是true才行,代表该节点是可点击的
6.2.2 实现点击
class SimpleStep: StepImpl() {
override fun onImpl(collector: StepCollector) {
collector.next(stepTag = 1){
//第1步
"点击搜索".overlayToast()
delay(1000)
AssistsCore.findById("com.tencent.mm:id/jha").firstOrNull()?.click()
//执行第2步
return@next Step.get(2, delay = 2000)
}
}
}
6.2.3 查找输入框并输入文字
除了可以通过id获取节点,还可以通过节点类型获取
6.2.4 实现输入
class SimpleStep: StepImpl() {
override fun onImpl(collector: StepCollector) {
collector.next(stepTag = 1){
//第1步
"点击搜索".overlayToast()
delay(1000)
AssistsCore.findById("com.tencent.mm:id/jha").firstOrNull()?.click()
//执行第2步
return@next Step.get(2, delay = 2000)
}.next(stepTag = 2){
//第2步
"输入搜索内容".overlayToast()
delay(1000)
AssistsCore.findByTags("android.widget.EditText").firstOrNull()?.setNodeText("自动输入的搜索内容")
//结束执行
return@next Step.none
}
}
}
最终效果
教程源码:https://github.com/ven-coder/autoci.git
AccessibilityService-weditor获取节点元素信息&Assists实现自动化的更多相关文章
- Python+Selenium 自动化实现实例-获取页面元素信息(百度首页)
#coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.ba ...
- doucment的获取节点的信息
document.activeElement 返回当前获取焦点元素 document.addEventListener() 向文档添加句柄 document.adoptNode(node) 从另外一个 ...
- javascript 获取节点元素的封装
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- wx.createSelectorQuery() 获取节点信息 获取不到解决方法
场景:一个气泡的宽度由加载来的数据填充所决定,不定宽, wx.createSelectorQuery().selectAll('.talkbubble').boundingClientRect ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比
Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比 上一篇文章: Android自动化测试中AccessibilityService获取控件信息(1 ...
- vue 组件传递值以及获取DOM元素的位置信息
1.父组件 select_li.vue 1.1 父组件模板 <template> <div id='selectLi' ref="selectLi"> &l ...
- 使用jquery获取父元素或父节点的方法
今天面试题问到了,没答上,jq要继续学习啊 jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: 先举个 ...
- JavaScript获取HTML DOM节点元素详解(转)
在Web运用程序特别是Web 2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要处理的疑问. 51CTO推荐阅读:JavaScript DOM文档 ...
- js获取HTML DOM节点元素方法总结
1. 通过顶层document节点获取: (1)document.getElementById(elementId) :通过ID获得节点,如果页面上含有多个相同id的节点,那么只返回第一个节点. ...
随机推荐
- JAVA Swing日期选择控件datepicker的使用
声明:本控件来自互联网,仅可应用于个人项目,不可商用,如您未遵守造成的任何问题请自行承担点击下载 datepicker.jar 使用方法1.导入 在eclipse中,单击你的项目名,右键–>Bu ...
- IM跨平台技术学习(十三):从理论到实践,详细对比Electron和Tauri的优劣
本文由京东技术王泽知分享,原题"基于Web的跨平台桌面应用开发",下文进行了排版和内容优化. 1.引言 近些年来,跨平台跨端一直是比较热门的话题,Write once, run a ...
- Object.freeze冻结属性和v-if结合requestAnimationFrame分帧渲染解决白屏
计算100W条数据的长度造成2s延迟 <template> <div> <h1>数据总长度{{ arrList.length }}</h1> </ ...
- Superset 用户集成方案
注意,一下内容来自外网浏览器翻译,本人使用了将superset集成进入第三方系统,superset采用自定义身份验证+第三系统iframe嵌入方式,但是这个方式存在一个问题,iframe与redire ...
- delphi编写sql脚本文件批量执行程序
程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...
- Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到 Guid
Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到 Guid 在软件开发中,数据库主键的选择,Guid 还是自增整数 ID,一直是一个备受开发者关注和讨 ...
- NSSM使用说明
1.说明 NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行.同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大.它的特点如下: ...
- SNMP简介
复习几组概念带内管理和带外管理区别:传送的物理通道不同.1.带内管理是管理控制信息与数据信息使用统一物理通道进行传送.当网络出现故障中断时数据传输和管理都无法正常进行.2.带外管理在于通过不同的物理通 ...
- SpringBoot利用@Async注解实现异步调用
前言:异步编程是让程序并发运行的一种手段,使用异步编程可以大大提高我们程序的吞吐量,减少用户的等待时间.在Java并发编程中实现异步功能,一般是需要使用线程或者线程池.而实现一个线程,要么继承Thre ...
- Luogu P3041 USACO12JAN Video Game G 题解 [ 紫 ] [ AC 自动机 ] [ 动态规划 ]
Video Games G:弱智紫题,30min 切了,dp 思路非常板. 多模式串一看肯定就是要建出 AC 自动机,然后在 fail 树里下传标记,预处理每个节点到达后的得分. 然后设计 \(dp_ ...