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. COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'

    初始化 加上参数 --collation-server=utf8_general_ci 初始化 ./scripts/mysql_install_db --user=mysql --basedir=/u ...

  2. 最新 盛天网络java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.盛天网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了盛天网络.6.7月主要是做系统复习.项目复盘.Leet ...

  3. jsp标签在spring boot中的关键用法

    <form:form modelAttribute="user" action="save" method="post" >// ...

  4. Linux基础重点习题讲解

    第一章  一个EXT4的文件分区,当时使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df-h命令查看磁盘大小时,只使用了60%的磁盘空间,为什么会出现这 ...

  5. Cassandra的安装

    1.上传安装包到node01 cd /export/softwares 2.解压 tar -zxvf apache-cassandra-3.11.5-bin.tar.gz -C ../servers ...

  6. Java中String做为synchronized同步锁

    synchronized (("" + userId).intern()) { // TODO:something } JVM内存区域里面有一块常量池,关于常量池的分配: JDK6 ...

  7. MapReduce的输入文件是两个

    [学习笔记] 1.对于MapReduce程序,如何输入文件是两个文件? 这一小节,我们将继续第一章大数据入门的HelloWorld例子做进一步的研究.这里,我们研究如何输入文件是两个文件.packag ...

  8. Python split()方法分割字符串

    Python 中,除了可以使用一些内建函数获取字符串的相关信息外(例如 len() 函数获取字符串长度),字符串类型本身也拥有一些方法供我们使用. 注意,这里所说的方法,指的是字符串类型 str 本身 ...

  9. git 显示文件改动,但无具体改动信息

     事件:        同步代码,进行了换行符替换 过程 : 同步代码,在正式服务器的 git 分支基础上创建新的分支,按照同步代码流程,将对方代码换行符转换(对方mac,我方windows) 替换需 ...

  10. 把QString写到文件中可以用toutf8()函数

    把QString写到文件中可以用toutf8()函数 QByteArray QString::toUtf8() const Returns a UTF-8 representation of the ...