Java&Selenium数据驱动【DataProvider+TestNG+Excel】

  1. package testNGWithDataDriven;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.testng.Assert;
  8. import org.testng.annotations.DataProvider;
  9. import org.testng.annotations.Test;
  10. import org.testng.annotations.BeforeMethod;
  11. import org.testng.annotations.AfterMethod;
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  13. import org.apache.poi.ss.usermodel.Row;
  14. import org.apache.poi.ss.usermodel.Sheet;
  15. import org.apache.poi.ss.usermodel.Workbook;
  16. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  17. import org.openqa.selenium.By;
  18. import org.openqa.selenium.WebDriver;
  19. import org.openqa.selenium.chrome.ChromeDriver;
  20.  
  21. public class TestNGExcelDriven {
  22. public WebDriver driver;
  23. String baseUrl = "http://www.sogou.com";
  24. @DataProvider(name="testData")
  25. public static Object[][] words() throws IOException{
  26. return getTestData("F:\\TestNGWithDataDriven\\dataDriven\\src\\test\\java\\testData", "testData.xlsx", "Sheet1");
  27. }
  28. @Test(dataProvider = "testData")
  29. public void testSearchExcel(String searchWord1, String searchWord2, String searchWord3, String searchResult){
  30. driver.get(baseUrl + "/");
  31. driver.findElement(By.id("query")).sendKeys(searchWord1+" "+searchWord2+" "+searchWord3);
  32. driver.findElement(By.id("stb")).click();
  33. Assert.assertTrue(driver.getPageSource().contains(searchResult));
  34. }
  35. @BeforeMethod
  36. public void beforeMethod(){
  37. driver = new ChromeDriver();
  38. }
  39. @AfterMethod
  40. private void afterMethod(){
  41. driver.quit();
  42. }
  43. public static Object[][] getTestData(String filePath, String fileName, String sheetName) throws IOException{
  44. File file = new File(filePath + "\\" + fileName);
  45. //创建FileInputStream对象用于读取Excel文件
  46. FileInputStream inputStream = new FileInputStream(file);
  47. //声明Workbook对象
  48. Workbook workbook = null;
  49. //获取文件名参数的扩展名,判断是.xlsx文件还是.xls文件
  50. String fileExtensionName = fileName.substring(fileName.indexOf("."));
  51. //如果是.xlsx,则用XSSFWorkbook对象进行实例化,如果是.xls则使用HSSFWorkbook对象进行实例化
  52. if (fileExtensionName.equals(".xlsx")){
  53. workbook = new XSSFWorkbook(inputStream);
  54. }
  55. else if (fileExtensionName.equals(".xls")) {
  56. workbook = new HSSFWorkbook(inputStream);
  57. }
  58. //通过sheetName参数生成Sheet对象
  59. Sheet sheet = workbook.getSheet(sheetName);
  60. //获取Excel数据文件Sheet1中数据的行数,getLastRowNum方法获取数据的最后一行行号
  61. //getFirstRowNum方法获取数据的第一行行号,相减之后算出数据的行数
  62. //Excel行和列都是从0开始
  63. int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();
  64. //创建名为records的list对象来存储从Excel数据文件读取的数据
  65. List<Object[]> records = new ArrayList<Object[]>();
  66. //使用两个for循环遍历Excel数据文件除去第一行外所有数据
  67. //所以i从1开始,而不是从0开始
  68. for (int i = 1; i<rowCount+1; i++){
  69. Row row = sheet.getRow(i);
  70. //声明一个数组,用来存储Excel数据文件每行中的数据,数组的大小用getLastCellNum办法来进行动态声明,实现测试数据个数和数组大小相一致
  71. String fields[] = new String[row.getLastCellNum()];
  72. for (int j = 0; j<row.getLastCellNum();j++){
  73. //调用getCell和getStringCellValue方法获取Excel文件中的单元格数据
  74. fields[j] = row.getCell(j).getStringCellValue();
  75. }
  76. //将fields的数据兑现存储到records的list中
  77. records.add(fields);
  78. }
  79. //定义函数返回值,即Object[][]
  80. //将存储测试数据的list转换为一个Object的二维数组
  81. Object[][] results = new Object[records.size()][];
  82. //设置二维数组每行的值,每行是一个Object对象
  83. for (int i = 0; i<records.size(); i++){
  84. results[i] = records.get(i);
  85. }
  86. return results;
  87. }
  88. }

Java&Selenium数据驱动【DataProvider+TestNG+Excel】的更多相关文章

  1. Java&Selenium数据驱动【DataProvider+TestNG+Mysql】

    Java&Selenium数据驱动[DataProvider+TestNG+Mysql] package testNGWithDataDriven; import java.io.IOExce ...

  2. Java&Selenium数据驱动【DataProvider+TestNG+Array】

    Java&Selenium数据驱动[DataProvider+TestNG+Array] package testNGWithDataDriven; import java.util.conc ...

  3. Java&Selenium数据驱动【DataProvider+TestNG+Csv】

    Java&Selenium数据驱动[DataProvider+TestNG+Csv] package testNGWithDataDriven; import java.io.Buffered ...

  4. Java&Selenium自动化测试之数据驱动

    一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...

  5. 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

    1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...

  6. 接口测试 java+httpclient+testng+excel

    最近项目不忙,研究了下java实现接口自动化,借助testng+excel实现数据驱动 目前只用post方式测试,返回结果列没有通过列名去找 另外,请求参数是转义之后的,接口之间的依赖也是个问题,批量 ...

  7. 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)

    1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...

  8. 《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

    1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试.那么如何实现同时启动不同的浏览器对脚本进行测试,且听宏哥娓娓道来. 2.项目 ...

  9. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

随机推荐

  1. MATLAB知识-解决因缺少libsvm 而运行出现Y must be a vector or a character array.

    matlab版本R2014b 最近运行一个使用svmtrain的程序,出现以下错误: 这是因为是在设定路径里面没有libsvm.辛亏有一位师姐的电脑里面有libsvm的包,我直接用了,这样就不需要下载 ...

  2. Andrew Ng机器学习课程12

    Andrew Ng机器学习课程12 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言:主要讲述了batch learning和online learnin ...

  3. H5本地存储(转)

    H5本地存储  一.本地存储由来的背景         众所周知Html4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是 ...

  4. [转帖]降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)

      降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史) https://www.cnblogs.com/alisystemsoftware/p/11555426.ht ...

  5. C++Primer 5th Chap8 The IO Library

    IO类: 头文件 类型 iostream istream,从流读取数据 ostream,向流写入数据 iostream,读写流 fstream ifstream,从文件读取数据,默认in模式打开 of ...

  6. asp.net core-1.在控制台创建ASP.NET Core应用程序

    创建asp.net core应用程序,需要先把环境安装好,我这边选的是vs2017 第一步先执行dotnet 我执行dotnet --help可以把所有的命令全部列出来: 红框内就是我们可以用来初始化 ...

  7. k8s-部署策略

    在Kubernetes中有几种不同的方式发布应用,所以为了让应用在升级期间依然平稳提供服务,选择一个正确的发布策略就非常重要了. 选择正确的部署策略是要依赖于我们的业务需求的,下面我们列出了一些可能会 ...

  8. 怎样在网页中嵌入JS代码

    有四种方法: 方法1: 在<script>标签内直接写代码 <body> <button id="btn">click</button&g ...

  9. C++新特性---智能指针

    智能指针:     为什么需要智能指针?         1. malloc出来的空间,没有进行释放,存在内存泄漏的问题.          2. 异常安全问题.如果在malloc和free之间如果存 ...

  10. sql注入测试(1)---概念概述

    在进行java web 测试时,经常会忽略的测试种类就是sql注入测试,这类缺陷造成的原因是开发技术在这方面欠缺的表现,虽然不常见,但一旦有这类缺陷,就很因此对运营的数据造成很多不必要的损失,所以,还 ...