Skip to content

Commit bbe1f55

Browse files
chenqichenqi
authored andcommitted
Update MonkeyRunner doc
1 parent a541fe8 commit bbe1f55

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

monkeyrunner/README.md

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,25 @@ Android 平台所有自动化测试框架的底层实现都依赖官方提供的
1414

1515
PC 端 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

3347
https://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
236251
https://github.com/9468305/python-script/tree/master/monkeyrunner
237252
238-
239253
## TODO
240254
241255
基于上述问题,我准备写一个更智能更稳定更高效的 UI Inspecotr ,基于 AndroidX UIAutomation ,使用 Kotlin 实现。

0 commit comments

Comments
 (0)