Android uiautomator dump 命令介绍
  SIfPk5VBxj4g 2023年11月02日 45 0


先来看看uiautomator命令的说明

Usage: uiautomator <subcommand> [options]

Available subcommands:

help: displays help message

runtest: executes UI automation tests
    runtest <class spec> [options]
    <class spec>: <JARS> [-c <CLASSES> | -e class <CLASSES>]
      <JARS>: 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.
      <CLASSES>: 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 <NAME> <VALUE>: 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.xml

events: 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 命令介绍_android

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

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

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

<node index="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版本修复了。



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  UP4ONKOBnkdD   2023年11月28日   24   0   0 java
  9JCEeX0Eg8g4   2023年12月10日   30   0   0 应用程序javaApache
  jnZtF7Co41Wg   2023年12月11日   37   0   0 文件系统xmlGNU
  KRsXEGSB49bk   2023年11月27日   29   0   0 javaApache
  4Txe79BjyroE   2023年12月10日   36   0   0 xmlSOAP
  it2nV7RK7uw1   2023年11月28日   25   0   0 Dockerui
  it2nV7RK7uw1   2023年11月28日   24   0   0 Dockerawsui
SIfPk5VBxj4g