package org.webdriver.patatiumappui.pageObjectConfig; import com.esotericsoftware.yamlbeans.YamlReader; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.webdriver.patatiumappui.utils.Locator; import org.webdriver.patatiumappui.utils.Log; import java.io.*; import java.util.*; //通过解析xml文件自动生成对象库代码 public class PageObjectAutoCodeForYaml { Log log=new Log(this.getClass()); static String path="src/main/java/org/webdriver/patatiumappui/pageObjectConfig/UILibrary.yaml"; public static void autoCode() throws Exception { File file = new File(path); if (!file.exists()) { throw new IOException("Can't find " + path); } YamlReader yamlReader=new YamlReader(new FileReader(file)); Object yamlObject=yamlReader.read(); Map yamlMap=(Map) yamlObject; ArrayList<HashMap<String,Object>> pages=(ArrayList<HashMap<String,Object>>)yamlMap.get("pages");//page列表 for (int i=0;i<pages.size();i++) { HashMap<String,Object> pageNode=pages.get(i);//获取page节点 HashMap<String,Object> pageElement=(HashMap<String,Object>)pageNode.get("page"); //获取page节点的name属性值 String pageName=pageElement.get("pageName").toString(); System.out.println(pageName); //将pageName存储为数组 String[] pageNameArray=pageName.split("\\."); System.out.println(pageNameArray); System.out.println(pageNameArray[0]); //获取要写入的page所属的类名 String pageClassName=pageNameArray[4].toString(); //获取对象库包名 String packageName=pageNameArray[0].toString()+"."+pageNameArray[1].toString()+"."+pageNameArray[2].toString()+"."+pageNameArray[3].toString(); //--自动编写对象库代码(XXPage.java)开始-- StringBuffer sb=new StringBuffer("package "+packageName+";\n"); sb.append("import java.io.IOException;\n"); sb.append("import java.io.InputStream;\n"); sb.append("import org.webdriver.patatiumappui.utils.BaseAction;\n"); sb.append("import org.webdriver.patatiumappui.utils.Locator;\n"); sb.append("import org.webdriver.patatiumappui.pageObjectConfig.PageObjectAutoCodeForYaml;"); sb.append("//"+pageElement.get("desc")+"_对象库类\n"); sb.append("public class "+ pageClassName+" extends BaseAction {\n"); sb.append("//用于eclipse工程内运行查找对象库文件路径\n"); sb.append("private String path=\"src/main/java/org/webdriver/patatiumappui/pageObjectConfig/UILibrary.yaml\";\n"); sb.append(" public " + pageClassName + "() {\n"); sb.append("//工程内读取对象库文件\n "); sb.append("setXmlObjectPath(path);\n"); sb.append("getLocatorMap();"); sb.append("\n}"); System.out.println(pageElement.get("desc")); List<HashMap<String,Object>> locators=(List<HashMap<String,Object>>)pageElement.get("locators");//获取locators列表 for (int j=0;j<locators.size();j++)//遍历locators列表 { //获取locator节点 HashMap<String,Object> locatorNode=locators.get(j); String locatorName=locatorNode.get("name").toString(); if (locatorNode.size()>3) { sb.append("\n/***\n" + "* "+locatorNode.get("value")+"\n" + "* @return\n" + "* @throws IOException\n" + "*/\n"); } else { sb.append("\n"); } sb.append("public Locator "+locatorName+"() throws IOException\n {\n"); sb.append(" Locator locator=getLocator(\""+locatorName+"\");\n"); sb.append(" return locator;\n }\n"); } sb.append("}"); //将自动生成的PageObject代码写入文件 File pageObjectFile=new File("src/main/java/org/webdriver/patatiumappui/pageObject/"+pageClassName+".java"); if(pageObjectFile.exists()) { pageObjectFile.delete();; } try { FileWriter fileWriter=new FileWriter(pageObjectFile, false); BufferedWriter output = new BufferedWriter(fileWriter); output.write(sb.toString()); output.flush(); output.close(); } catch (IOException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } System.out.println(sb); Log log=new Log(PageObjectAutoCodeForYaml.class); log.info("自动生成对象库java代码成功"); } } public static void autoCode2() throws Exception { File file = new File(path); if (!file.exists()) { throw new IOException("Can't find " + path); } SAXReader reader = new SAXReader(); Document document = reader.read(file); //对象库xml文件根节点 Element root = document.getRootElement(); //遍历根节点下的第一个节点(page节点) for(Iterator<?> i=root.elementIterator();i.hasNext();) { Element page=(Element)i.next(); //获取page节点的name属性值 String pageName=page.attribute(0).getValue(); System.out.println(pageName); //将pageName存储为数组 String[] pageNameArray=pageName.split("\\."); System.out.println(pageNameArray); System.out.println(pageNameArray[0]); //获取要写入的page所属的类名 String pageClassName=pageNameArray[4].toString(); //获取对象库包名 String packageName=pageNameArray[0].toString()+"."+pageNameArray[1].toString()+"."+pageNameArray[2].toString()+"."+pageNameArray[3].toString(); //--自动编写对象库代码(XXPage.java)开始-- StringBuffer sb=new StringBuffer("package "+packageName+";\n"); sb.append("import java.io.IOException;\n"); sb.append("import java.io.InputStream;\n"); sb.append("import org.webdriver.patatiumappui.utils.BaseAction;\n"); sb.append("import org.webdriver.patatiumappui.utils.Locator;\n"); sb.append("import org.webdriver.patatiumappui.pageObjectConfig.PageObjectAutoCode;"); sb.append("//"+page.attribute(2).getValue()+"_对象库类\n"); sb.append("public class "+ pageClassName+" extends BaseAction {\n"); sb.append("//用于eclipse工程内运行查找对象库文件路径\n"); sb.append("private String path=\"src/main/java/org/webdriver/patatiumappui/pageObjectConfig/UILibrary.xml\";\n"); //sb.append("//用户打包成jar后查找对象库文件路径\n"); //sb.append("private InputStream pathInputStream=PageObjectAutoCode.class.getClassLoader().getResourceAsStream(\"net/hk515/pageObjectConfig/UILibrary.xml\"); \n"); sb.append(" public " + pageClassName + "() {\n"); sb.append("//工程内读取对象库文件\n "); sb.append("setXmlObjectPath(path);\n"); sb.append("getLocatorMap();"); sb.append("\n}"); //sb.append("\n private String path=PageObjectAutoCode.class.getClassLoader().getResource(\"net/hk515/pageObjectConfig/UILibrary.xml\").getPath();"); //遍历Page节点下的Locator节点 for(Iterator<?> j=page.elementIterator();j.hasNext();) { //获取locaror节点 Element locator =(Element)j.next(); String locatorName=locator.getTextTrim(); if(locator.attributeCount()>3) {sb.append("\n/***\n" + "* "+locator.attribute(3).getValue()+"\n" + "* @return\n" + "* @throws IOException\n" + "*/\n"); } else { sb.append("\n"); } sb.append("public Locator "+locatorName+"() throws IOException\n {\n"); //sb.append(" setXmlObjectPath(path);\n"); sb.append(" Locator locator=getLocator(\""+locatorName+"\");\n"); sb.append(" return locator;\n }\n"); } sb.append("}"); //将自动生成的PageObject代码写入文件 File pageObjectFile=new File("src/main/java/org/webdriver/patatiumappui/pageObject/"+pageClassName+".java"); if(pageObjectFile.exists()) { pageObjectFile.delete();; } try { FileWriter fileWriter=new FileWriter(pageObjectFile, false); BufferedWriter output = new BufferedWriter(fileWriter); output.write(sb.toString()); output.flush(); output.close(); } catch (IOException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } System.out.println(sb); Log log=new Log(PageObjectAutoCodeForYaml.class); log.info("自动生成对象库java代码成功"); } } public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 PageObjectAutoCodeForYaml.autoCode(); } }