先来看看uiautomator命令的说明

Usage: uiautomator  [options]Available subcommands:help: displays help messageruntest: executes UI automation tests    runtest <class spec> [options]    <class spec>:  [-c  | -e class ]      : a list of jar file containing test classes and dependencies. If        the path is relative, it's assumed to be under /data/local/tmp. Use        absolute path if the file is elsewhere. Multiple files can be        specified, separated by space.      : a list of test class names to run, separated by comma. To        a single method, use TestClass#testMethod format. The -e or -c option        may be repeated.    options:      --nohup: trap SIG_HUP, so test won't terminate even if parent process               is terminated, e.g. USB is disconnected.      -e debug [true|false]: wait for debugger to connect before starting.      -e runner [CLASS]: use specified test runner class instead. If        unspecified, framework default runner will be used.      -e  : other name-value pairs to be passed to test classes.        May be repeated.dump: creates an XML dump of current UI hierarchy    dump [file]      [file]: the location where the dumped XML should be stored, default is      /mnt/sdcard/window_dump.xmlevents: prints out accessibility events until terminated

根据google官方的说明,uiautomator使用是有版本限制的。

Android SDK Tools, Revision 21 or higher
Android SDK Platform, API 16 or higher


一般使用的都是使用jar包的方式,进行ui测试。
但是查看该命令说明,还有个dump命令。下面就来详细讲解这个命令。

dump: creates an XML dump of current UI hierarchy
这个说明说的很清楚,这个命令是用来成成当前界面的UI层次,并用XML格式进行展示

那么我们来使用一下,界面使用豌豆荚手机客户端首页做展示。
界面如下:
Android uiautomator dump 命令介绍_第1张图片

然后在命令行工具中,执行如下命令

adb shell uiautomator dump

执行成功 系统会返回
UI hierchary dumped to: /mnt/sdcard/window_dump.xml

当然 这个文件地址也是可以更改的。

adb shell uiautomator dump [file]

我们把这个文件从手机上pull下来,写到本地计算机进行分析

XML下载网盘地址:http://pan.baidu.com/s/1pJ5YNW3

文件内容较多,我们截取出一些进行讲解。

"1" text="理财范" class="android.widget.TextView" package="com.wandoujia.phoenix2" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[174,802][402,835]" />

界面上的 ‘理财范’TextView 在dump后显示成这样的节点

index 在当前的ViewGroup中的序号 从0开始
text 控件中显示的文本内容
class 控件的类型
package 包名
content-desc 说明
checkable 是否允许check
checked check状态
clickable 是否允许click
enabled 控件状态
focusable 是否允许获取焦点
focused 是否获取到焦点
scrollable 是否允许滚动
long-clickable 是否允许长安
password 是否是密码控件
selected select状态
bounds 控件绘制的长宽及位置 四个数据,分成两组,分别是 左上坐标和右下坐标


在使用这个命令时会遇到的一些问题:
1、在使用shell命令下 使用uiautomator dump时会报出下面的异常
java.lang.IllegalArgumentException: Illegal character (d83d)
at org.kxml2.io.KXmlSerializer.reportInvalidCharacter(KXmlSerializer.java:144)
at org.kxml2.io.KXmlSerializer.writeEscaped(KXmlSerializer.java:130)
at org.kxml2.io.KXmlSerializer.attribute(KXmlSerializer.java:465)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:111)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpNodeRec(AccessibilityNodeInfoDumper.java:129)
at com.android.uiautomator.core.AccessibilityNodeInfoDumper.dumpWindowToFile(AccessibilityNodeInfoDumper.java:89)
at com.android.commands.uiautomator.DumpCommand.run(DumpCommand.java:99)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
at dalvik.system.NativeStart.main(Native Method)
Killed

这个错是因为,界面中包含了一些无法解析的文本,比如表情图标。

根据官方说明,已经修复了这个问题 以下为修复的源码
https://android.googlesource.com/platform/frameworks/testing/+/2b6d1da16a4e38a9704c2c67b33aadf44a85b1d2

但必须是Android4.4+(不包含4.4)版本的Android系统才修复了

2、关于5.0上dump出来中文字符为?的bug
这个问题也是5.0底层的bug ,在5.1版本修复了。


更多相关文章

  1. 【特效】【自定义控件】关键字飘飞效果
  2. Ant 命令行创建一个Android工程
  3. Android 一个简单的登录界面
  4. Android 登录界面xml代码
  5. android 运行一个cp命令
  6. 日期选择控件
  7. android emulator命令
  8. 控件 -- WebView -- Android与JS交互
  9. Android--取得布局中指定控件的宽高

随机推荐

  1. (超详细)android中SqLite数据库的使用(一文
  2. Android 系统的架构
  3. AlertDialog实现普通对话框和登录对话框
  4. Android(安卓)VideoView如何播放RTSP的流
  5. Android开发(二十七)——android:layout_we
  6. Android EventBus框架入门
  7. android 自学日记(三) ---Intent
  8. Android和js进行交互
  9. Android内核开发:为什么刷机后系统第一次
  10. 深入理解android之IPC机制与Binder框架