使用到的技术: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. SOAP协议初级指南 (三)

    独立元素 在SOAP中, 一个独立元素表示至少被一个多引用存取元素引用的类型的实例.所有的独立元素用soap:id属性作标记,而且这个属性的值在整个SOAP envelope中必须是唯一的.独立的元素 ...

  2. 深入理解java虚拟机(十四)正确利用 JVM 的方法内联

    在IntelliJ IDEA里面Ctrl+Alt+M用来拆分方法.选中一段代码,敲下这个组合,非常简单.Eclipse也用类似的快捷键,使用 Alt+Shift+M.我讨厌长的方法,提起这个下面这个方 ...

  3. 【Linux】Linux各文件夹说明

    转载 /bin/ — 用来贮存普通命令. /sbin/ — 许多系统命令(例如 shutdown)的贮存位置.属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统./sbin目 ...

  4. Digester学习笔记(三)转载

    总觉得,Digester不仅仅能作配置文件解析,而且可以作得更多. 配置属性 Digester用来解析应用系统的配置文件,其本身也有很可配置的属性. 属性 描述 classLoader 指定类装载器( ...

  5. Eclipse连接数据库

    原创 操作数据库之前首先得连接数据库,连接数据库的步骤如下: 将驱动包导入JDK中 将sqljdbc4.jar(一个举例)类库文件拷贝到D:\Program Files\Java\jdk1.7.0\j ...

  6. Android ActionBar使用方法

    对于这ActionBar我想很多人都想了解一下到底是怎么一个使用方法,以及它都存在哪些可操作的和使用的地方.如下图所示:<ignore_js_op> 这便是ActionBar的基本内容.获 ...

  7. vue的props 属性类似于bug的东西

    /* * @Author: shs * @Date: 2019-04-19 17:48:39 * @Last Modified by: shs * @Last Modified time: 2019- ...

  8. 提高SQL Server数据库效率常用方法

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...

  9. SQL Server分页模板

    SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...

  10. 虚拟化 - Docker

    Docker Desktop (for windows and mac) Docker Desktop 注意 安装时有可能卡主,可以关掉重新装 重启启动时,可能报错"VIRTUALIZATI ...