首页 > 代码库 > Selenium+excel实现参数化自动化测试

Selenium+excel实现参数化自动化测试

使用到的技术:POI对excel的解析、selenium自动化测试、junit

测试用例:登陆www.1905.com执行登陆-退出的操作

执行步骤:

1、首先创建一个excel,里面有用户名和密码列

2、新建 一个解析excel的java类

package com.m1905.java;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/** * 读取excel文件中的测试数据,将数据分为用户名和密码两组 * */public class ExcelWorkBook{        String username;    String password;    /**     * 读取excel文件中的用户名列,即第一列     * @throws IOException      * */    public List<String> readUsername(String filesrc) throws IOException{        List<String> userList = new ArrayList<String>();        //读取excel文件        InputStream is = new FileInputStream(filesrc);        POIFSFileSystem fs = new POIFSFileSystem(is);        HSSFWorkbook wb = new HSSFWorkbook(fs);        HSSFSheet sheet = wb.getSheetAt(0);        if(sheet==null){            System.out.println("暂无数据,请输入测试数据");        }        //获取文件行数        int rows = sheet.getLastRowNum();        //获取文件列数        /*int cols = sheet.getRow(0).getPhysicalNumberOfCells();        //获取第一行的数据,一般第一行为属性值,所以这里可以忽略        String colValue1 = sheet.getRow(0).toString();        String colValues2 = sheet.getRow(1).toString();*/        //取出第一列的用户名,去除掉第一行中的标题        for(int i =1;i<rows+1;i++){            username = sheet.getRow(i).getCell(0).toString();            System.out.println(username);            userList.add(username);        }        System.out.println(userList);        return userList;    }        /**     * 获取第二列,得到密码list     * @throws IOException      * */    public List<String> readPassword(String filesrc) throws IOException{        List<String> passwordList = new ArrayList<String>();        //读取excel文件            InputStream is = new FileInputStream(filesrc);            POIFSFileSystem fs = new POIFSFileSystem(is);            HSSFWorkbook wb = new HSSFWorkbook(fs);            HSSFSheet sheet = wb.getSheetAt(0);            if(sheet==null){                System.out.println("暂无数据,请输入测试数据");            }        //取出第二列的密码值,去掉第一行中的标题            int rows=sheet.getLastRowNum();            for(int i=1;i<rows+1;i++){                password = sheet.getRow(i).getCell(1).toString();                System.out.println(password);                passwordList.add(password);            }            System.out.println(passwordList);        return passwordList;    }}

3、创建一个junit测试类,对登陆过程进行测试

package com.m1905.junit;import java.io.IOException;import java.util.List;import java.util.concurrent.TimeUnit;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebDriver.Navigation;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import com.m1905.java.ExcelWorkBook;public class LoginTest {    private static WebDriver driver;    private static Navigation navigate;    private static String url="http://www.1905.com";    private static String  filesrc = "http://www.mamicode.com/UserAndPassword.xls";    @BeforeClass    public static void setUpBeforeClass() throws Exception {        //加载浏览器        driver = new FirefoxDriver();        navigate = driver.navigate();        navigate.to(url);        driver.manage().window().maximize();    }    @AfterClass    public static void tearDownAfterClass() throws Exception {        if(driver!=null){            driver.close();            driver.quit();        }    }    @Test    public void test() throws IOException {        //初始化ExcelWorkBook Class        ExcelWorkBook excelBook = new ExcelWorkBook();        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);        //取出username放在userlist集合里面        List<String> userList = excelBook.readUsername(filesrc);        //取出password放在passwordList集合里面        List<String> passwordList = excelBook.readPassword(filesrc);                //把取出来的数据输入到界面中的用户名和密码的输入框中        int usersize = userList.size();        for(int i=0;i<usersize;i++){            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);            //点击登陆/注册按钮            WebElement LogAndReg = driver.findElement(By.xpath(".//*[@id=‘site_nav_md‘]/ul/li[2]/a"));            LogAndReg.click();            //通过xpath定位到username输入框            WebElement username = driver.findElement(By.xpath(".//*[@id=‘inputUsername‘]"));            //通过xpath定位到password输入框            WebElement password = driver.findElement(By.xpath(".//*[@id=‘inputPassword‘]"));            //通过xpath定位到登陆按钮            WebElement login = driver.findElement(By.xpath(".//*[@id=‘loginreg‘]/div/div[1]/form/p/button"));            //清除username输入框中的内容            username.clear();            //把usernamelist中的数据取出来,写入            String name = userList.get(i);            username.sendKeys(name);            //输入对应的password值            for(int j=0;j<passwordList.size();j++){                password.clear();                String pass = passwordList.get(j);                password.sendKeys(pass);            }            //点击登陆            login.click();            //driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);            WebDriverWait wait = new WebDriverWait(driver,10);            WebElement e1 = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id=‘site_nav_md‘]/ul/li[3]/a[2]")));            //找到退出登陆按钮            e1.click();//            WebElement logoutButton = driver.findElement(By.xpath(""));//            logoutButton.click();        }    }}

 

Selenium+excel实现参数化自动化测试