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();
        }
    }

}
时间: 2024-07-31 10:44:08

Selenium+excel实现参数化自动化测试的相关文章

selenium+junit4实现参数化自动化测试

业务场景:在www.1905.com电影网中实现两个用户的登陆操作. 代码如下: package com.m1905.junit; import java.util.Arrays; import java.util.Collection; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.juni

Selenium之利用Excel实现参数化

Selenium之利用Excel实现参数化 说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本,其他版本暂时不支持 具体步骤: 第一步:新建一个excel文件,并且输入数据内容 第二步:在eclipse中新建一个java class,编写获取excel文件的代码 CODE: import java.io.File; import java.io.IOException; import jav

【提问答疑】Selenium + Python的Excel数据参数化

背景 最近一段时间微信公众号得到了众多网友的留言,微信编辑部的小编们欣喜若狂,在此感谢各位小伙伴们的厚爱.为了与大家进行互动交流,小编认真地查看每一条小伙伴们的留言,有问Fiddler抓包工具的问题,有问自动化selenium的问题,当然还有问小剪子去哪儿了,O(∩_∩)O~.小编决定这期的文章挑一个自动化方面大家都比较关心的问题进行解答: 问: Python 获取到Excel一列值后怎么用selenium录制的脚本中参数化,比如对登录用户名和密码如何做参数化? 答:可以使用xlrd读取Exce

Selenium——selenium之利用excel实现参数化

说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本,其他版本暂时不支持 具体步骤: 第一步:新建一个excel文件,并且输入数据内容 第二步:在eclipse中新建一个java class,编写获取excel文件的代码 import java.io.File; import java.io.IOException; import java.util.ArrayList; import jav

Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做一个总结吧,希望能给大家带来启发和帮助.由于业界没有成熟的解决方案可供参考,本人在研究过程中也是摸着石头过河,纰漏之处在所难免,如果大家有更好的方案,敬请不吝赐教. 分布式并行执行用例需求背景 公司的产品属于web app,采用的是Robot Framework + Selenium2Library

Selenium(Webdriver)自动化测试常问到的问题解答(转自:潜龙0318)

今天朋友问我了几个关于Selenium自动化测试的问题,我看了一下感觉还比较典型.结合我以往自动化测试的经验,给出了一些儿粗浅的答案,希望能帮大家,如果大家有什么好的看法,希望相互交流,相互学习! (1)selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?答:Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的.但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的.需要开发人员规范开发习惯,如给页面元素加上唯

Selenium原理初步--Android自动化测试学习历程

章节:自动化基础篇——Selenium原理初步(第五讲) 注:其实所有的东西都是应该先去用,但是工具基本都一样,底层都是用的最基础的内容实现的,测试应该做的是: (1)熟练使用工具,了解各个工具的利弊,达到工具优选.因时因地制宜的目的 (2)读源码,理解原理,能够对开源的源码进行二次再创造,改编成适合自身产品的工具:或者自己直接编写适合测试的工具 (3)能够对测试过程中发生的异常进行分析和定位,对测试结果进行详细和系统的综合评定(需要能够分析定位问题,必须对自身产品了解,但更需要的是对底层代码和

Selenium学习笔记(1) - 自动化测试体系与原理

技术体系 基于代码的测试(Code-Based Testing) 基于协议的测试(Protocol-Based Testing) 基于界面的测试(GUI-Based Testing) 工作原理 基于代码 定义期望结果 调用被测对象 对比实际结果 难点:1.前置条件或环境的准备:2.被测代码又大量的异常 优点:1.容易实施:2.原理简单:3.不需要太复杂的编程能力 基于协议 并非直接调用代码,而是模拟用户发送数据包 典型的接口测试,偏黑盒 非常清楚协议的工作过程 能够利用编程语言来操作协议 经常用

Selenium(Webdriver)自动化测试常问问题

http://blog.sina.com.cn/s/blog_c189e2590102w3bv.html (1)selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?答:Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的.但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的.需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性.当然如果开发人员开发不规范,我们在