Android不同手机可能分辨率不一样,就会出现一个问题,同一个APP相同控件在不同手机上的坐标不一样,自动化的时候需要点击控件,为了适配这种场景,就需要动态获取控件所在的位置
- dump到空间所在页面的xml 布局信息
PC端在adb shell 下执行,APK内部直接使用命令
uiautomator dump --compressed [xml保存的路径]
- 解析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("=====================");
}
}
}
}