使用到的技术: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();
}
} }

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

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

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

  2. Selenium之利用Excel实现参数化

    Selenium之利用Excel实现参数化 说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本 ...

  3. Selenium 2.0 WebDriver 自动化测试 使用教程 实例教程 API快速参考

    Selenium 2.0 WebDriver 自动化测试 使用教程 实例教程 API快速参考 //System.setProperty("webdriver.firefox.bin" ...

  4. 基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  5. 爬虫(五)—— selenium模块启动浏览器自动化测试

    目录 selenium模块 一.selenium介绍 二.环境搭建 三.使用selenium模块 1.使用chrome并设置为无GUI模式 2.使用chrome有GUI模式 3.查找元素 4.获取标签 ...

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

    http://blog.sina.com.cn/s/blog_c189e2590102w3bv.html Selenium(Webdriver)自动化测试常问问题 (1)selenium中如何保证操作 ...

  7. 自动化测试基础篇--Selenium中数据参数化之TXT

    摘自https://www.cnblogs.com/sanzangTst/p/7722594.html 一.搜索参数化 在TXT文件中保存需要搜索的内容: 测试代码: 1 #!/usr/bin/env ...

  8. selenium利用Excel进行参数化(简单示例)

    上篇搭建好环境后,正真开始我的自动化之旅了.... 开始之前特别说明一下testNG的版本,不能直接使用Eclipse直接线上下载的版本,线上版本太高,不能兼容,运行程序会报以下错误,需要自行下载低一 ...

  9. 基于excel的接口自动化测试框架:支持参数化、关联等

    1. 框架结构说明 2. 框架代码实现 action 包  case_action.py business_process 包 main_process.py util 包 global_var.py ...

随机推荐

  1. Postman -- HTTP请求的Chrome插件

    摘要 : Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网 ...

  2. django 'set' object does not support indexing

    在定义Model之后使用syncdb 同步的时候报出这个错误,检查之后发现是用错了.在model的Meta里面,排序这些用的应该是 ordering = ['last','first','middle ...

  3. Replication--镜像+复制

    场景:主服务器:Server1从服务器:Server2订阅服务器: Server3镜像DB: RepDB配置:1>配置SERVER3为分发服务器,在Server3上指定发布服务器SERVER1和 ...

  4. solr7.3集群搭建

    solr集群搭建 原博客:https://blog.csdn.net/gdsgdh308227363/article/details/81004706 注意,在搭建solr集群前,建议最好有一个sol ...

  5. PageAdmin环境配置要求

    1.操作系统要求: Win7/win8/win2008/win2012及以上版本都可以,建议用64位的操作系统,服务器建议选择win2012或以上版本. 2.net framework版本要求: ne ...

  6. 【bzoj4889】: [Tjoi2017]不勤劳的图书管理员 分块-BIT

    [bzoj4889]: [Tjoi2017]不勤劳的图书管理员 题目大意:给定一个序列(n<=50000),每个数有一个编码ai(ai<=50000)和权值vi(vi<=100000 ...

  7. tcp/ip学习笔记(1)-基本概念

    为什么会有tcp/ip 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计 ...

  8. jquery源码解析:proxy,access,swap,isArraylike详解

    jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... guid: 1, //唯一标识符 ...

  9. ubuntu下搭建Discuz

      环境:我用桥接方式创建了一个ubuntu16的虚拟机,ip为192.168.0.220   1.安装mysql sudo apt-get install mysql-server mysql-cl ...

  10. 前端-chromeF12 谷歌开发者工具详解 Network篇

    开发者工具初步介绍 chrome开发者工具最常用的四个功能模块: Elements:主要用来查看前面界面的html的Dom结构,和修改css的样式.css可以即时修改,即使显示.大大方便了开发者调试页 ...