码迷,mamicode.com
首页 > 其他好文 > 详细

Selenium2之框架思想

时间:2015-10-15 18:02:44      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:

框架思想介绍:

? 为什么要有框架:

  •   可维护性
  •   提高编写脚本效率
  •   提高脚本的可读性

? 框架的几大要素:

  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>
View Code

? 解析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     }
View Code

  ——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     }
View Code

  ——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     }
View Code

  ——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     }
View Code

  ——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);
View Code

  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);
View Code

  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"));
View Code

 

上述中所涉及的,参考代码如下:

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>
View Code

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 }
View Code

 

? 配置文件的值持久化

新建一个类: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 }
View Code

 

? 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     }
View Code

 

? 最后我们来启动一下浏览器 

技术分享
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     }
View Code

 

Selenium2之框架思想

标签:

原文地址:http://www.cnblogs.com/leoliyue/p/4882700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!