@@ -14,11 +14,25 @@ Android 平台所有自动化测试框架的底层实现都依赖官方提供的
1414
1515PC 端 GUI 工具,扫描和分析 Android 设备上当前显示的 UI 组件。展示 UI 布局层次结构,查看设备上当前对用户可见的 UI 组件的属性。从名称可以看出,它是 UI Automator 的只读功能部分,即只能查看 UI 组件的树形结构和属性,不能操作控制 UI 组件。
1616
17- ` uiautomatorviewer ` 位于 ` <android-sdk>/tools/bin ` 目录。启动入口是一个bash文件,实际调用 ` <android-sdk>/tools/lib ` 目录的 ` uiautomatorviewer-26.0.0-dev.jar ` 。 GUI 基于 Eclipse + SWT 实现,使用 Gradle 构建。系列工具源码在 ` https://android.googlesource.com/platform/tools/swt/ ` ,依赖 ` https://android.googlesource.com/platform/tools/base/ ` 。活跃分支: ` mirror-goog-studio-master-dev ` 。该仓库还包含 ` chimpchat, ddms, hierarchyviewer2, monkeyrunner, swtmenubar, traceview ` 这些工具。
17+ ` uiautomatorviewer ` 位于 ` <android-sdk>/tools/bin ` 目录。
18+ 启动入口是一个bash文件,实际调用 ` <android-sdk>/tools/lib ` 目录的 ` uiautomatorviewer-26.0.0-dev.jar ` 。
19+ GUI 基于 Eclipse + SWT 实现,使用 Gradle 构建。
20+ 系列工具源码在 ` https://android.googlesource.com/platform/tools/swt/ ` 。
21+ 依赖 ` https://android.googlesource.com/platform/tools/base/ ` 。
22+ 活跃分支: ` mirror-goog-studio-master-dev ` 。
23+ 该仓库还包含以下工具。
24+
25+ + chimpchat
26+ + ddms
27+ + hierarchyviewer2
28+ + monkeyrunner
29+ + swtmenubar
30+ + traceview
1831
1932其内部实现基于 ` adb shell uiautomator dump ` 。从源码仓库提交记录看,主要功能开发的活跃时间是 2014-2015,2016之后已经很少更新维护。那个年代的 Android 开发主要使用 Eclipse , 所以基于 SWT 实现多平台 PC GUI ,在当时合理。
2033
21- 该工具实际使用运行不稳定,极易报错:` Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist! `
34+ 该工具实际使用运行不稳定,极易报错。
35+ > ` Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist! `
2236
2337错误原因通常是:
2438
@@ -32,9 +46,9 @@ PC 端 GUI 工具,扫描和分析 Android 设备上当前显示的 UI 组件
3246
3347https://developer.android.com/studio/test/monkeyrunner
3448
35- 官方提供的另外一个工具,封装 uiautomator API,供 Python 脚本调用,也可注入 java 扩展插件。相比 ` uiautomatorviewer ` 和 ` uiautomator ` 命令行工具,可编程扩展性更佳。
36-
37- MonkeyRunner 使用了比较冷门的 Jython 实现。
49+ 官方提供的另外一个工具,封装 uiautomator API,供 Python 脚本调用,也可注入 java 扩展插件。
50+ 相比 ` uiautomatorviewer ` 和 ` uiautomator ` 命令行工具,可编程扩展性更佳。
51+ MonkeyRunner 使用了比较冷门的 Jython 实现。
3852
3953### 1. 启动运行入口
4054
@@ -52,7 +66,7 @@ $ANDROID_HOME/tools/bin/monkeyrunner uiparser.py
5266#### MonkeyDevice.getProperty()
5367
5468等同于调用 ` adb shell getprop <keyword> ` 。获取设备系统环境变量。
55- 不同厂商的设备,key可能不同。针对具体测试机型,可使用 ` adb shell getprop ` ,显示所有系统环境变量的key字符串 。
69+ 不同厂商的设备,key可能不同。针对具体测试机型,可使用 ` adb shell getprop ` ,显示所有系统环境变量的key 。
5670
5771#### MonkeyDevce.shell()
5872
@@ -130,9 +144,10 @@ events: prints out accessibility events until terminated
130144
131145# ## uiautomator 源码
132146
133- PC端工具源码位于仓库 https://android.googlesource.com/platform/frameworks/testing/ 的 ` master` 分支,最新更新于 2014.11.14。之后活跃分支变更为 ` android-support-test` 分支。` uiautomator` 源码被移除,改成 ` android.support.test library, expresso` 等工具的源码工程。
134- 手机端框架源码位于仓库 https://android.googlesource.com/platform/frameworks/base/ 的 ` master` 分支。
135- 关键代码 ` uiAutomation.waitForIdle(1000, 1000 * 10); ` 即单次超时等待1秒,最长超时等待10秒。超时抛出异常。
147+ PC端工具源码位于仓库 https://android.googlesource.com/platform/frameworks/testing/ ` master` 分支。
148+ 最新更新于 2014.11.14。之后活跃分支变更为 ` android-support-test` 分支。` uiautomator` 源码被移除,改成 ` android.support.test library, expresso` 等工具的源码工程。
149+ 手机端框架源码位于仓库 https://android.googlesource.com/platform/frameworks/base/ ` master` 分支。
150+ ` uiAutomation.waitForIdle(1000, 1000 * 10); ` 是报错的关键代码,即单次超时等待1秒,最长超时等待10秒。超时抛出异常。
136151
137152` DumpCommand.java`
138153> https://android.googlesource.com/platform/frameworks/testing/+/master/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/DumpCommand.java
@@ -235,7 +250,6 @@ https://developer.android.com/studio/debug/layout-inspector
235250
236251https://github.com/9468305/python-script/tree/master/monkeyrunner
237252
238-
239253## TODO
240254
241255基于上述问题,我准备写一个更智能更稳定更高效的 UI Inspecotr ,基于 AndroidX UIAutomation ,使用 Kotlin 实现。
0 commit comments