代码改变世界

TJU_SCS_软件测试_lab2_Selenium

2016-04-15 11:54  blueContra  阅读(419)  评论(0编辑  收藏  举报

一. 实验要求

  1、安装SeleniumIDE插件

  2、学会使用SeleniumIDE录制脚本和导出脚本

  3、访问http://www.ncfxy.com使用学号登录系统(账户名为学号,密码为学号后6位),进入系统后可以看到该用户的邮箱。

  4、编写Selenium Java WebDriver程序,测试info.csv表格中的学号和邮箱的对应关系是否正确。

  将测试代码提交到github上

 

二.实验准备

  操作系统: Windows 8.1 64x

  IDE:Eclipse-Kepler 32x

 

三.实验步骤

  1. 安装SeleniumIDE插件

    在firefox菜单中找到添加组件——搜索Selenium——查看全部结果——搜索SeleniumIDE,找到SeleniumIDE并且下载安装。

    

    

    重启之后就能在firefox浏览器的右上角找到对应的SeleniumIDE图标,如下图:

    

 

  2. 使用SeleniumIDE录制脚本和导出脚本

    2.1 录制脚本

      打开浏览器,点击SeleniumIDE插件,这样的红点代表正在录制中。

      

      然后使用浏览器进行操作,全过程Selenium都在录制,结束操作后,再次点击红色的小圆点,结束录制,结果如下:

      

      录制完成后,我们可以点击播放,可以看到SeleniumIDE重复了我们刚才的操作。

      

    2.2 导出脚本

      菜单栏——文件——Export Test Case As...——然后我们可以看到有很多的导出选项,

      

      这里我们选择Java/JUnit 4/ WebDriver,将导出的文件改为后缀为.java的文件,然后我们就可以用例如Eclipse等IDE打开和编辑这个文件了,如下:

      

      

  3. 访问http://www.ncfxy.com,编写Selenium Java WebDriver程序,测试info.csv表格中的学号和邮箱的对应关系是否正确

    3.1 建立工程

      这里建立工程和普通工程无异,不同的是需要导入一些相关的jar包,比如

      

    3.2 访问目标网站

      这里我使用的是firefox浏览器,所以相应的dirver是firefox的,

      

      首先我们要设置一下firefox的系统中的位置,然后简单的访问一下目标网站。

1         System.setProperty("webdriver.firefox.bin", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
2         WebDriver driver = new FirefoxDriver();  
3   
4         driver.get("http://www.ncfxy.com/");  

    3.3 登录以及信息获取

      这里需要获取网页上的元素Element,来对网页进行操控。

      比如对于登陆界面的那个网页,我们右键,选择查看页面元素,可以找到如下信息:

      

      于是我们就找到了我们需要获取的目标的id,于是我们可以在程序中找到它们并且设定他们的值,并且操纵表单提交,

1         WebElement usernameEle = driver.findElement(By.id("name"));
2         WebElement passwordEle = driver.findElement(By.id("pwd"));
3         usernameEle.sendKeys(user);
4         passwordEle.sendKeys(pwd);
5         usernameEle.submit();  

      最后一行submit()使得表单提交。

      在下一个页面中,我们要获取邮箱信息,然而邮箱信息在页面元素中的结构如下:

      

      并有id或者name之类的属性可以让我们直接获取,这里我们需要使用xPath来获取目标元素。

      xPath简单的来讲,就是根据元素的结构来定位目标元素。

      比如这个邮箱847606784@qq.com的内容,我们可以用下面的xPath得到,

        WebElement emailEle = 
                driver.findElement(By.xpath("//tbody[@id='table-main']/tr[1]/td[2]"));
        
        String address = emailEle.getText();

      在tbody中用id找到目标元素的父级元素,然后用标签以及数组来定位。

     3.4 读取.csv文件

      .csv的读取有很多种方式,这里我选择了比较简洁的一种,简单的打开文件,简单的读取,

 1 try {  
 2             BufferedReader reader = new BufferedReader(new FileReader("info.csv"));//换成你的文件名 
 3             
 4             String line = null;  
 5             while((line=reader.readLine())!=null){  
 6                 String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
 7 //                System.out.println(line);
 8                 String user = item[0]; 
 9                 String address = item[1];//这就是你要的数据了 
10 
11             }  
12 
13             return Arrays.asList(o);
14         } catch (Exception e) {  
15             e.printStackTrace(); 
16             return null;
17         } 

      reader.readLine()得到了每一行的内容,由于.csv中的数据以‘,’分开,把它以逗号切分,然后从结果的数组中获取。

    3.5 参数化测试

      我们要对.csv文件中的每一条数据都执行一遍测试,这样,有多少条数据,就有多少个测试用例,我在这里使用了参数化,完整代码如下:

 1 package cn.tju.scs.thy;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import java.io.BufferedReader;
 6 import java.io.FileReader;
 7 import java.util.ArrayList;
 8 import java.util.Arrays;
 9 import java.util.Collection;
10 import java.util.List;
11 
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.junit.runners.Parameterized;
16 import org.junit.runners.Parameterized.Parameters;
17 
18 @RunWith(Parameterized.class)
19 public class SeleniumTestTest2 {
20     
21     private String input1;
22     private String input2;
23     private String expected;
24     
25     private SeleniumTest sel;
26     
27     public SeleniumTestTest2(String input1,String input2,String expected){
28         this.input1 = input1;
29         this.input2 = input2;
30         this.expected = expected;
31     }
32     
33     @Before
34     public void setUp(){
35         sel = new SeleniumTest();
36     }
37     
38     @Parameters
39     public static Collection<Object[]> getData(){
40         
41         try {  
42             BufferedReader reader = new BufferedReader(new FileReader("info.csv"));//换成你的文件名 
43             
44            
45             Object[][] o = new Object[109][];
46             Object[] oo;
47             int index = 0;
48             String line = null;  
49             while((line=reader.readLine())!=null && index<109){  
50                 String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
51 //                System.out.println(line);
52                 String user = item[0]; 
53                 String pwd = user.substring(4);
54                
55                 String address = item[1];//这就是你要的数据了 
56                 
57                 oo = new Object[]{user,pwd,address};
58                 o[index] = oo;
59                
60                 index++;
61             }  
62 
63             return Arrays.asList(o);
64         } catch (Exception e) {  
65             e.printStackTrace(); 
66             return null;
67         } 
68         
69     }
70     @Test
71     public void test() {
72         assertEquals(this.expected,sel.getEmailAddress(this.input1, this.input2));
73     }
74 
75 }

      于是,我们运行我们的测试代码,会看到程序会对每一条数据都执行一遍我们设定过的操作来测试。