一. 实验要求
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简单的来讲,就是根据元素的结构来定位目标元素。
比如这个邮箱[email protected]的内容,我们可以用下面的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 }
于是,我们运行我们的测试代码,会看到程序会对每一条数据都执行一遍我们设定过的操作来测试。