• 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 = "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();
            }
        }
    
    }
  • 相关阅读:
    antdvue 全局配置loading
    eslint使用
    chrome浏览器跨域请求cookie丢失问题(一直报验证码错误,因为未携带sessionid)
    [2021BUAA软工_助教博客]作业成绩汇总
    将list按指定大小分为n组
    关于sql中group by使用的一些注意点
    Java调用webservice请求
    windows系统查看用户sid
    高等软工期末作业《课程总结》
    成年人最大的智慧:认清自己
  • 原文地址:https://www.cnblogs.com/sylovezp/p/4193786.html
Copyright © 2020-2023  润新知