标签:
框架思想介绍:
? 为什么要有框架:
? 框架的几大要素:
driver管理,脚本,数据,元素对象,LOG,报告,运行机制,失败用例重复运行
? 框架搭建的前期步骤
1. 新建一个TestAutomation的Java项目
2. 在这个项目下面新建一个config的文件夹,在config文件夹里面新建一个叫config.xml的文件
3. 新建一个包:com.test.util
4. 在项目下面再新建一个lib的文件夹,放入dom4j.jar与jaxen.jar,用来解析config.xml文件
5. 再新建一个ParseXml.java的文件
? 为什么要有config.xml文件
1. 全局配置文件
2. 可以在这里面配置运行哪个浏览器
3. 可以定义等待元素display的时间
4. 文件格式为.xml文件(当然可以用其它的文件格式,依个人喜好而定)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <config> 3 <browser>firefox</browser> 4 <waitTime>10</waitTime> 5 <row>2</row> 6 <line>1</line> 7 <xhnum>3</xhnum> 8 </config>
? 解析config.xml文件
1. 使用dom4j.jar, jaxen-1.1.1.jar
2. 代码演示解析过程及方法
——1. 文件载入
1 public void load(String filePath) 2 { 3 //xml解析,首先载入xml文件,对这个文件对象进行xml分析处理 4 File file = new File(filePath); 5 if(file.exists()) 6 { 7 SAXReader saxReader=new SAXReader(); 8 try { 9 document=saxReader.read(file); 10 } catch (DocumentException e) { 11 // TODO Auto-generated catch block 12 //e.printStackTrace(); 13 System.out.println("文件加载异常"+filePath); 14 } 15 } 16 else 17 { 18 System.out.println("文件加载异常"+filePath); 19 } 20 }
——2.文件解析
1 /* 2 *用xpth来得到一个元素节点对象 3 *@param elementPath elementPath是一个xpath路径,比如“/config/driver” 4 *@return 返回的是一个节点Element对象 5 */ 6 public Element getElementObject(String elementPath) 7 { 8 return(Element) document.selectSingleNode(elementPath); 9 }
——3.XML节点判断
1 //用xpath来判断一个节点对象是否存在; 2 public boolean isExist(String elementPath) 3 { 4 boolean flag=false; 5 Element element=this.getElementObject(elementPath); 6 if(element!=null) 7 flag=true; 8 return flag; 9 10 }
——4.XML完整处理
1 //用xpath来取得一个节点对象的值 2 public String getElementText(String elementPath) 3 { 4 Element element=this.getElementObject(elementPath); 5 if(element!=null) 6 return element.getTextTrim(); 7 else 8 return null; 9 10 }
——5.XML读取案例
A.简单的XML,无构造函数时
1 //简单的XML,无构造函数时 2 ParseXml px=new ParseXml(); 3 px.load("config/config.xml"); 4 //使用getElementObject 5 //String browser=px.getElementObject("/config/browser").getText(); 6 //使用getElementText 7 String browser=px.getElementText("/*/browser"); 8 System.out.println(browser);
B.简单的XML,有构造函数时
1 //简单的XML,有构造函数时 2 ParseXml px=new ParseXml("config/config.xml"); 3 4 //使用getElementObject 5 //String browser=px.getElementObject("/config/browser").getText(); 6 //使用getElementText 7 String browser=px.getElementText("/*/browser"); 8 System.out.println(browser);
C.复杂的XML,可以用如下写法
1 // 复杂的XML可以用如下写法 2 ParseXml px=new ParseXml("config/TestBaidu.xml"); 3 List<Element> elements=px.getElementObejects("/*/testUI"); 4 Object[][] object =new Object[elements.size()][]; 5 for(int i=0;i<elements.size();i++) 6 { 7 Object[] temp=new Object[]{px.getChildrenInfoByElement(elements.get(i))}; 8 object[i]=temp; 9 } 10 11 Object o=object[1][0]; 12 System.out.println(((Map<String,String>) o).get("description"));
上述中所涉及的,参考代码如下:
TestBaidu.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <data> 3 <common> 4 <百度链接>http://www.baidu.com</百度链接> 5 </common> 6 <testUI> 7 <description>test demo for 1</description> 8 <输入1>hello world</输入1> 9 <输入2>goodbye world</输入2> 10 <文本值>value</文本值> 11 <期望值>hello world,goodbye world</期望值> 12 </testUI> 13 14 <testUI> 15 <description>test demo for 2</description> 16 <输入1>hello world_2</输入1> 17 <输入2>goodbye world_2</输入2> 18 <文本值>value_2</文本值> 19 <期望值>hello world,goodbye world_2</期望值> 20 </testUI> 21 22 </data>
ParseXml.java
1 public class ParseXml { 2 3 private Document document; 4 private String filePath; 5 6 public ParseXml(String filePath) 7 { 8 this.filePath=filePath; 9 this.load(this.filePath); 10 } 11 12 public void load(String filePath) 13 { 14 //xml解析,首先载入xml文件,对这个文件对象进行xml分析处理 15 File file = new File(filePath); 16 if(file.exists()) 17 { 18 SAXReader saxReader=new SAXReader(); 19 try { 20 document=saxReader.read(file); 21 } catch (DocumentException e) { 22 // TODO Auto-generated catch block 23 //e.printStackTrace(); 24 System.out.println("文件加载异常"+filePath); 25 } 26 } 27 else 28 { 29 System.out.println("文件加载异常"+filePath); 30 } 31 } 32 33 /* 34 *用xpth来得到一个元素节点对象 35 *@param elementPath elementPath是一个xpath路径,比如“/config/driver” 36 *@return 返回的是一个节点Element对象 37 */ 38 public Element getElementObject(String elementPath) 39 { 40 return(Element) document.selectSingleNode(elementPath); 41 } 42 43 44 //用xpath来取得一个节点对象的值 45 public String getElementText(String elementPath) 46 { 47 Element element=this.getElementObject(elementPath); 48 if(element!=null) 49 return element.getTextTrim(); 50 else 51 return null; 52 53 } 54 55 //用xpath来判断一个节点对象是否存在; 56 public boolean isExist(String elementPath) 57 { 58 boolean flag=false; 59 Element element=this.getElementObject(elementPath); 60 if(element!=null) 61 flag=true; 62 return flag; 63 64 } 65 66 @SuppressWarnings("unchecked") 67 public List<Element> getElementObejects(String elementPath) 68 { 69 return document.selectNodes(elementPath); 70 } 71 72 @SuppressWarnings("unchecked") 73 public Map<String,String> getChildrenInfoByElement(Element element) 74 { 75 Map<String,String> map=new HashMap<String,String>(); 76 List<Element> children=element.elements(); 77 for(Element e:children) 78 { 79 map.put(e.getName(), e.getText()); 80 } 81 return map; 82 } 83 84 85 // @SuppressWarnings("unchecked") 86 public static void main(String[] args) 87 { 88 //简单的XML,无构造函数时 89 // ParseXml px=new ParseXml(); 90 // px.load("config/config.xml"); 91 // //使用getElementObject 92 // //String browser=px.getElementObject("/config/browser").getText(); 93 // //使用getElementText 94 // String browser=px.getElementText("/*/browser"); 95 // System.out.println(browser); 96 97 //简单的XML,有构造函数时 98 ParseXml px=new ParseXml("config/config.xml"); 99 100 //使用getElementObject 101 //String browser=px.getElementObject("/config/browser").getText(); 102 //使用getElementText 103 String browser=px.getElementText("/*/browser"); 104 System.out.println(browser); 105 106 107 // 复杂的XML可以用如下写法 108 // ParseXml px=new ParseXml("config/TestBaidu.xml"); 109 // List<Element> elements=px.getElementObejects("/*/testUI"); 110 // Object[][] object =new Object[elements.size()][]; 111 // for(int i=0;i<elements.size();i++) 112 // { 113 // Object[] temp=new Object[]{px.getChildrenInfoByElement(elements.get(i))}; 114 // object[i]=temp; 115 // } 116 // 117 // Object o=object[1][0]; 118 // System.out.println(((Map<String,String>) o).get("description")); 119 120 } 121 }
? 配置文件的值持久化
新建一个类:com.test.util.Config.java
1 public class config { 2 3 public static String Browser; 4 public static int waitTime; 5 6 7 static 8 { 9 ParseXml px=new ParseXml("config/config.xml"); 10 Browser=px.getElementText("/*/browser"); 11 waitTime=Integer.valueOf(px.getElementText("/*/waitTime")); 12 } 13 14 public static void main(String[] args) 15 { 16 System.out.println(config.Browser); 17 System.out.println(config.waitTime); 18 } 19 20 }
? Driver管理
新建一个com.test.base.SeleniumDriver类
1 private WebDriver driver; 2 public WebDriver getDriver() 3 { 4 return driver; 5 } 6 public SeleniumDriver() 7 { 8 this.initDriver(); 9 } 10 11 private void initDriver() 12 { 13 if("firefox".equals(config.Browser)) 14 { 15 System.setProperty("webdriver.firefox.bin","D:/Mozilla Firefox/firefox.exe"); 16 driver=new FirefoxDriver(); 17 } 18 else if("ie".equals(config.Browser)) 19 { 20 System.setProperty("webdriver.ie.driver", "files/IEDriverServer.exe"); 21 driver=new InternetExplorerDriver(); 22 } 23 else if("chrome".equals(config.Browser)) 24 { 25 System.setProperty("webdriver.chrome.driver", "files/chromedriver.exe"); 26 driver=new ChromeDriver(); 27 } 28 else 29 { 30 System.out.println("找不到相关浏览器"+config.Browser); 31 } 32 driver.manage().window().maximize(); 33 driver.manage().timeouts().pageLoadTimeout(config.waitTime, TimeUnit.SECONDS); 34 35 }
? 最后我们来启动一下浏览器
1 public static void main(String[] args) 2 { 3 SeleniumDriver selenium=new SeleniumDriver(); 4 WebDriver driver=selenium.getDriver(); 5 driver.navigate().to("http://www.baidu.com"); 6 driver.close(); 7 driver.quit(); 8 }
标签:
原文地址:http://www.cnblogs.com/leoliyue/p/4882700.html