xml解析

Android不同手机可能分辨率不一样,就会出现一个问题,同一个APP相同控件在不同手机上的坐标不一样,自动化的时候需要点击控件,为了适配这种场景,就需要动态获取控件所在的位置

  1. dump到空间所在页面的xml 布局信息
PC端在adb shell 下执行,APK内部直接使用命令
uiautomator dump --compressed [xml保存的路径]
  1. 解析XML
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class Test {
    public static void main(String[] args) {
        String path = "D:\\XXXX\\ui.xml";
        Document mDocument = null;

        // 1: 得到DOM工厂解析器工厂实例
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            // 2: 从DOM工厂中获得DOM解析器
            DocumentBuilder documentBuilder = factory.newDocumentBuilder();
            // 3: 解析XML文件,获得Document对象, 即DOM树
            mDocument = documentBuilder.parse(path);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 不分层级,只要是node标签 全部都会得到
        NodeList dumpHead = mDocument.getElementsByTagName("node");
        Node node;
        Element element;
        String className;
        String resourceID;
        String bound;

        for (int i = 0; i < dumpHead.getLength(); i++) {
            node = dumpHead.item(i);
            element = (Element)node;
            className = element.getAttribute("class");
            resourceID = element.getAttribute("resource-id");

            // 根据需求找到需要的节点信息
            if (("classNameDemo".equals(className)) &&
                    ("resourceIDDemo".equals(resourceID))){
                bound = element.getAttribute("bounds");

                System.out.println("=====================");
                System.out.println(bound);
                System.out.println("=====================");
            }
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容