[java开发篇][dom4j模块]遍历,解析xml
package com.softwinner.performance.benchmark; /** * Created by Administrator on 2017/7/21. */ import org.dom4j.Element; /** * 数据实体类 * * @author*/ public class XMLBean { public final Element element; public final int index; public final String text; public final String resourceId; public final String classText; public final String packageText; public final String contentDesc; public final boolean checkable; public final boolean checked; public final boolean clickable; public final boolean enable; public final boolean focusable; public final boolean focused; public final boolean scrollable; public final boolean long_clickable; public final boolean password; public final boolean selected; public final String bounds; public XMLBean(Element element) { this.element = element; index = Integer.parseInt(element.attributeValue("index")); text = element.attributeValue("text"); resourceId = element.attributeValue("resource-id"); classText = element.attributeValue("class"); packageText = element.attributeValue("package"); contentDesc = element.attributeValue("content-desc"); checkable = Boolean.parseBoolean(element.attributeValue("checkable")); checked = Boolean.parseBoolean(element.attributeValue("checked")); clickable = Boolean.parseBoolean(element.attributeValue("clickable")); enable = Boolean.parseBoolean(element.attributeValue("enabled")); focusable = Boolean.parseBoolean(element.attributeValue("focusable")); focused = Boolean.parseBoolean(element.attributeValue("focused")); scrollable = Boolean.parseBoolean(element.attributeValue("scrollable")); long_clickable = Boolean.parseBoolean(element.attributeValue("long-clickable")); password = Boolean.parseBoolean(element.attributeValue("password")); selected = Boolean.parseBoolean(element.attributeValue("selected")); bounds = element.attributeValue("bounds"); } @Override public String toString() { return "XMLBean [index=" + index + ", text=" + text + ", resourceId=" + resourceId + ", classText=" + classText + ", packageText=" + packageText + ", contentDesc=" + contentDesc + ", checkable=" + checkable + ", checked=" + checked + ", clickable=" + clickable + ", enable=" + enable + ", focusable=" + focusable + ", focused=" + focused + ", scrollable=" + scrollable + ", long_clickable=" + long_clickable + ", password=" + password + ", selected=" + selected + ", bounds=" + bounds + "]"; } }
package com.softwinner.performance.benchmark; import android.content.Context; import android.content.Intent; import android.support.test.InstrumentationRegistry; import android.support.test.uiautomator.By; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject; import android.support.test.uiautomator.UiObjectNotFoundException; import android.support.test.uiautomator.UiSelector; import android.support.test.uiautomator.Until; import android.util.Log; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Before; import org.junit.Test; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * Created by Administrator on 2017/7/21. */ public class test { private static List<XMLBean> list; private static final String PATH = "/sdcard/window_dump.xml"; private final static int LAUNCH_TIMEOUT = 5000; UiDevice device; private final String mLogTag = "testliuzhipeng"; @Before public void setup() throws InterruptedException { device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); this.grantPermission(); openApplication("com.antutu.videobench"); Thread.sleep(20000); device.waitForIdle(); Log.i(mLogTag, "sleep finished"); } @Test public void testAA() throws UiObjectNotFoundException, IOException, InterruptedException { File file = new File(PATH); if(file.exists()){ assertTrue(String.format("delete %s fail ",PATH), file.delete()); } device.dumpWindowHierarchy(file); if (!file.exists()) { Log.i(mLogTag, "dump fail"); assertTrue("dump fail", false); } try { list = new LinkedList<XMLBean>(); // 1、读取xml文件 SAXReader reader = new SAXReader(); Document document = reader.read(file); // 2、获取根节点 Element rootNode = document.getRootElement(); treeWalk(rootNode); Log.i(mLogTag, "list::" + list.toString()); Log.i(mLogTag, "list.size::" + list.size()); if (list != null) list.clear(); list = null; Log.i(mLogTag, "End"); } catch (Exception e) { e.printStackTrace(); } } private static void print(Object obj) { System.out.println(obj); } private void treeWalk(Element element) throws UiObjectNotFoundException { String text; for (Iterator i = element.elementIterator(); i.hasNext(); ) { Element elementNode = (Element) i.next(); if (elementNode.elements().size() > 0) { treeWalk(elementNode); } print(elementNode.toString()); Log.i(mLogTag, elementNode.toString()); XMLBean bean = new XMLBean(elementNode); print("-------------------------------------------"); Log.i(mLogTag, "-------------------------------------"); if (bean.text.equals("Play Music")) { print(bean.bounds); Log.i(mLogTag, bean.bounds); } print("-------------------------------------------"); list.add(bean); } } public void openApplication(String packageNameStr){ // wakeScreen(); /* Start from the home screen*/ device.pressHome(); final String launcherPackage = device.getLauncherPackageName(); assertThat(launcherPackage,notNullValue()); device.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT); // launch the app Context context = InstrumentationRegistry.getContext(); final Intent intent = context.getPackageManager() .getLaunchIntentForPackage(packageNameStr); // Clear out any previous instances intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(intent); // Wait for the app to appear // try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} // wakeScreen(); device.wait(Until.hasObject(By.pkg(packageNameStr).depth(0)), LAUNCH_TIMEOUT); } public void grantPermission(){ openApplication("com.softwinner.performance.frameratetest"); try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} Log.i(mLogTag,"after open test apk success, grant stored permission"); // wakeScreen(); UiObject permission = device.findObject(new UiSelector() .resourceId("com.android.packageinstaller:id/permission_allow_button") ); if(permission.waitForExists(1000)){ try { // wakeScreen(); permission.clickAndWaitForNewWindow(); Log.i(mLogTag,"click grant store permission"); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } } } public void printMessage(final InputStream input){ new Thread(new Runnable() { @Override public void run() { Reader reader = new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader); String line = null; try{ while((line = bf.readLine()) != null ){ Log.i(mLogTag, line); } } catch (IOException e){ e.printStackTrace(); } } }).start(); } }