Web UI自动化之Excel用例读取

基于Selenium的Web UI自动化实现(java)

本文讲解了如何从 Excel 表格中读取测试用例并在 TestNG 中执行。使用的例子是打开百度首页,输入用户名和密码,完成登录。
在这里插入图片描述
Excel 表格中的用例如图在这里插入图片描述
我们将这个 Excel 取名为 test.xls,放在 resource 目录下,注意要将 resource 设为 Source Folder(右键点击文件夹 -> Build Path -> Use as Source Folder),否则文件读取不到
在这里插入图片描述

一、实现登录操作

将百度首页(www.baidu.com)定义为 SearchPage,在该类中实现登录操作的代码

public void login(WebDriver driver, Map<String,String> param){
  //在页面上name为tj_login的元素有两个,所以用findElements,得到List,然后取第二个元素
  driver.findElements(By.name("tj_login")).get(1).click();
  //使线程休眠两秒,等待登录页面弹框加载
  try {
    Thread.sleep(2000);
  } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 //切换到使用账号登录
  driver.findElement(By.id("TANGRAM__PSP_10__footerULoginBtn")).click();
  //输入用户名
  driver.findElement(By.id("TANGRAM__PSP_10__userName")).sendKeys(param.get("用户名"));
  //输入密码
  driver.findElement(By.id("TANGRAM__PSP_10__password")).sendKeys(param.get("密码"));
  //点击登录按钮 
  driver.findElement(By.id("TANGRAM__PSP_10__submit")).click();
}

其中的 Map 参数 param 就是我们的测试用例。

用例读取后存放的形式如下:

[{“用户名”:“11111”, “密码”:“abcde”}, {“用户名”:“22222”,“密码”:“fghij”}]

其中有两条 map 数据,TestNG 会对它们分别执行

二、读取用例并保存

上面说到,用例是以 Map 形式存储的,具体是怎么实现的呢?
新建 ExcelUtils.java ,处理 Excel 文件并返回用例

public class ExcelUtils {

  @DataProvider(name="excel")
  public static Object[][] readFile(){
    Object[][] obj=null;
    Map<String,String> map = new HashMap<String,String>();
    try{
      //InputStream is = new FileInputStream("D:\\test.xls"); 
      InputStream is = ExcelUtils.class.getResourceAsStream("/test.xls");
      POIFSFileSystem poi = new POIFSFileSystem(is); 
      HSSFWorkbook wb = new HSSFWorkbook(poi);
      HSSFSheet sheet = wb.getSheetAt(0);
      obj = new Object[sheet.getLastRowNum()][];
      for(int r=1; r <= sheet.getLastRowNum(); r++){
        HSSFRow row = sheet.getRow(r);
        map.clear();
        for(int c=0; c< sheet.getRow(0).getLastCellNum(); c++){
          Cell cell = row.getCell(c);
          cell.setCellType(CellType.STRING);
          map.put(sheet.getRow(0).getCell(c).getStringCellValue(), cell.getStringCellValue());
        }
        obj[r-1] = new Object[]{new HashMap<>(map)};
      }
      is.close();
      wb.close();
    }catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    return obj;
  }
}

代码解释:

1、@DataProvider(name=“excel”)

在使用 TestNG 时,可以设置 DataProvider,指定数据源,这个方法返回的是用例,也就是数据源,所以要在方法前加上@DataProvider(name=“excel”),name 是我们自己定义的名字,也可以不填。

2、Excel 读取的实现

具体说明在这里 Java读写Excel文件

3、TestNG 的数据源是 Object[][] 对象,所以将 Excel 中的每一行都存放到 Map 中,再将 map 放到 Object[][] 中返回。

4、在读取 Excel 的过程中,纯数字文本会被当成 Numeric 类型处理,所以在读取前需要先设置单元格数据类型为 String

cell.setCellType(CellType.STRING);

三、编写测试类

新建 TestLogin.java,实现测试过程

public class TestLogin {
  
  //指定数据源,数据源和 Test 方法不在一个类中时,需要说明数据源的 class
  @Test(dataProvider="excel",dataProviderClass=ExcelUtils.class)
  public void testLogin(Map<String,String> param){
    Browser browser = new Browser();
    Properties properties = Config.getProperties();
    WebDriver driver = browser.openUrl(properties.getProperty("URL"));
    SearchPage search = new SearchPage();
    search.login(driver, param);
    browser.close();
  }
}

四、运行 TestNG

右键点击 TestLogin.java,选择Run As -> TestNG Test

执行结果如下:
在这里插入图片描述

欢迎关注微信公众号,您的支持是对我最大的鼓励
在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值