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实现自动化的更多相关文章

  1. Python+Selenium 自动化实现实例-获取页面元素信息(百度首页)

    #coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.ba ...

  2. doucment的获取节点的信息

    document.activeElement 返回当前获取焦点元素 document.addEventListener() 向文档添加句柄 document.adoptNode(node) 从另外一个 ...

  3. javascript 获取节点元素的封装

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. wx.createSelectorQuery() 获取节点信息 获取不到解决方法

    场景:一个气泡的宽度由加载来的数据填充所决定,不定宽,     wx.createSelectorQuery().selectAll('.talkbubble').boundingClientRect ...

  5. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  6. Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比

    Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比   上一篇文章: Android自动化测试中AccessibilityService获取控件信息(1 ...

  7. vue 组件传递值以及获取DOM元素的位置信息

    1.父组件 select_li.vue 1.1 父组件模板 <template> <div id='selectLi' ref="selectLi"> &l ...

  8. 使用jquery获取父元素或父节点的方法

    今天面试题问到了,没答上,jq要继续学习啊 jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: 先举个 ...

  9. JavaScript获取HTML DOM节点元素详解(转)

    在Web运用程序特别是Web 2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要处理的疑问. 51CTO推荐阅读:JavaScript DOM文档 ...

  10. js获取HTML DOM节点元素方法总结

    1. 通过顶层document节点获取:    (1)document.getElementById(elementId) :通过ID获得节点,如果页面上含有多个相同id的节点,那么只返回第一个节点. ...

随机推荐

  1. 按部就班--从零开始建设k8s监控(二)

    前言 书接上文,prometheus已经安装好了,并且能够对k8s的整体状态进行监控,但是我们还需要更多 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS docker 24.0. ...

  2. [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image部件的使用介绍)

    前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发. iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动. 本合集是基于新版本的关于分 ...

  3. 利用Linq Skip() Take()分页

    private void TestPostData() { string all = ""; List<int> listTimeCard = new List< ...

  4. RPC简介及框架选择-copy

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点.常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式 ...

  5. runoob-pandas(python)

    https://www.runoob.com/pandas/pandas-tutorial.html Pandas 教程 Pandas 是 Python 语言的一个扩展程序库,用于数据分析. Pand ...

  6. c代码部分封装为lib

    需求:将一个C工程中的核心代码封装为静态文件:lib. 环境 工具:VC6.0++ 语言:c 以封装一个DES工程为例 封装 (1)新建一个静态工程 (2)新建c文件和h文件 (3)挑选封装内容 在原 ...

  7. Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)

    题目链接:Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) 总结:Bwa两发,C读假题.发挥很一般,补题感觉到E都是能做的,红温. A. ...

  8. react之state两种不同的写法

    我发现 state 有两种不同的写法 在构造器 constructor 中是这样的 有 this. constructor(props){//参数必须要有 super(props); this.sta ...

  9. 天翼云CDN全站加速产品对websocket协议的支持

    本文分享自天翼云开发者社区<天翼云CDN全站加速产品对websocket协议的支持>,作者:郭****迎 1.背景介绍 HTTP 协议有一个缺陷:通信只能由客户端发起.这种单向请求的特点, ...

  10. Protobuf生成文件报错

    Mac下protobuf生成文件报错问题解决办法,windows下就不会这么麻烦了,如果linux下出现类似报错信息按照下面的解决逻辑依然适用. 1.由--go_out引发的报错 1.报错信息: us ...