手机自动化测试:appium源码分析之bootstrap十五

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478。

DumpWindowHierarchy

package io.appium.android.bootstrap.handler;

import android.os.Environment;

import com.android.uiautomator.core.UiDevice;

import io.appium.android.bootstrap.AndroidCommand;

import io.appium.android.bootstrap.AndroidCommandResult;

import io.appium.android.bootstrap.CommandHandler;

import io.appium.android.bootstrap.utils.NotImportantViews;

import java.io.File;

/**

* This handler is used to dumpWindowHierarchy.

* https://android.googlesource.com/

* platform/frameworks/testing/+/master/uiautomator

* /library/core-src/com/android/uiautomator/core/UiDevice.java

*/

@SuppressWarnings("ResultOfMethodCallIgnored")

public class DumpWindowHierarchy extends CommandHandler {

// Note that

// "new File(new File(Environment.getDataDirectory(), "local/tmp"), fileName)"

// is directly from the UiDevice.java source code.

private static final File dumpFolder = new File(Environment.getDataDirectory(), "local/tmp");

private static final String dumpFileName = "dump.xml";

private static final File dumpFile = new File(dumpFolder, dumpFileName);

private static void deleteDumpFile() {

if (dumpFile.exists()) {

dumpFile.delete();

}

}

public static boolean dump() {

dumpFolder.mkdirs();

deleteDumpFile();

try {

// dumpWindowHierarchy often has a NullPointerException

UiDevice.getInstance().dumpWindowHierarchy(dumpFileName);

} catch (Exception e) {

e.printStackTrace();

// If there's an error then the dumpfile may exist and be empty.

deleteDumpFile();

}

return dumpFile.exists();

}

/*

* @param command The {@link AndroidCommand} used for this handler.

*

* @return {@link AndroidCommandResult}

*

* @throws JSONException

*

* @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.

* bootstrap.AndroidCommand)

*/

@Override

public AndroidCommandResult execute(final AndroidCommand command) {

NotImportantViews.discard(true);

return getSuccessResult(dump());

}

}

这个方法可能在某些机器上执行到不成功而让很多人对这个方法不甚了解,而我做了很长事件的功能遍历工具的开发,专门研究过这个方法,看看我之前写的文章就理解它是做什么的啦:

dumpWindowHierarchy

它是获取当前手机界面所有控件信息,然后把树形结构保存在/data/local/tmp的目录下的dump.xml文件中,所以我们看见上面类的定义有很多关于路径、文件的字符串,就是这个原因,appium的这个DumpWindowHierarchy首先根据api的不同设置是否禁止布局压缩。如果api为18以上的,那么就启动布局压缩,这对我们获取有用的控件信息是很有作用的。然后执行dump()方法,dump方法会先创建目录,当然该目录一般都会存在,无需创建。然后删除dump.xml文件,因为要创建新的,必须删除旧的,以免获取不到控件信息的时候,dump.xml里仍然有就信息返回。然后调用

UiDevice.getInstance().dumpWindowHierarchy(dumpFileName);

将控件树信息保存在里文件中。

手机自动化测试:appium源码分析之bootstrap十五的更多相关文章

  1. 手机自动化测试:appium源码分析之bootstrap十六

    手机自动化测试:appium源码分析之bootstrap十六   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  2. 手机自动化测试:appium源码分析之bootstrap十四

    手机自动化测试:appium源码分析之bootstrap十四   poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...

  3. 手机自动化测试:appium源码分析之bootstrap十二

    手机自动化测试:appium源码分析之bootstrap十二   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  4. 手机自动化测试:appium源码分析之bootstrap十

    手机自动化测试:appium源码分析之bootstrap十   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣, ...

  5. 手机自动化测试:appium源码分析之bootstrap三

    手机自动化测试:appium源码分析之bootstrap三   研究bootstrap源码,我们可以通过代码的结构,可以看出来appium的扩展思路和实现方式,从中可以添加我们自己要的功能,针对app ...

  6. 手机自动化测试:appium源码分析之bootstrap二

    手机自动化测试:appium源码分析之bootstrap二   在bootstrap项目中的io.appium.android.bootstrap.handler包中的类都是对应的指令类, priva ...

  7. 手机自动化测试:appium源码分析之bootstrap一

    手机自动化测试:appium源码分析之bootstrap一   前言: poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.popte ...

  8. 手机自动化测试:appium源码分析之bootstrap十七

    手机自动化测试:appium源码分析之bootstrap十七   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  9. 手机自动化测试:appium源码分析之bootstrap十三

    手机自动化测试:appium源码分析之bootstrap十三   poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...

随机推荐

  1. 《JavaScript DOM 编程艺术》

    前几天京东买了一本书,在豆瓣上好评如潮,买下了啃一啃,书名<JavaScript DOM 编程艺术>,在好好深造一下javaScript.一边啃,一边敲.当然应该要做好笔记.一些简单的就看 ...

  2. css特殊字符编码

  3. centos 把网卡名称修改为 eth0

    默认网卡名称是 eno16777736 1.修改配置文件 ifcfg-eno16777736 [root@localhost ~]# cd /etc/sysconfig/network-scripts ...

  4. JavaScript定时器及相关面试题

    在单线程JavaScript这篇文章中,在介绍JavaScript单线程的同时,也介绍了setTimeout是如何工作的.但是对于定时器的一些内容,并没有做深入的讨论.这篇文章,会详细说说JS的两种定 ...

  5. Lucas,.net Web框架

    #LucasLucasLucasWeb框架是基于新的魔法糖思想创建的框架.本框架有两大特点.1.所有框架里最简单易学易配置的.2.所有框架里效率最快的.1.UrlRouter没有使用IOC注入及反射, ...

  6. Hibernate一对一主键映射

    Hibernate一对一主键映射                        ------------------------------                            -- ...

  7. Eclipse-ee 启动Tomcat后浏览器无法访问Tomat,并且Web项目服务部署

    环境: Ubuntu 14.04 + Eclipse-ee +  Tomcat7 问题: 在Eclipse中建立Server时选择的Tomcat7,Server的运行时选择的时自己安装的Tomcat目 ...

  8. 3401: [Usaco2009 Mar]Look Up 仰望

    3401: [Usaco2009 Mar]Look Up 仰望 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 136  Solved: 81[Submi ...

  9. 1613: [Usaco2007 Jan]Running贝茜的晨练计划

    1613: [Usaco2007 Jan]Running贝茜的晨练计划 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1252  Solved: 609 ...

  10. Omi应用md2site-0.5.0发布-支持动态markdown拉取解析

    写在前面 Md2site是基于Omi的一款Markdown转网站工具,使用简单,生成的文件轻巧,功能强大. 官网:http://alloyteam.github.io/omi/md2site/ Git ...