如何使用List<HashMap<String, String>>详细讲解
场景:要循环界面Table数据源与导出Excel数据源作对比。
说明: List<HashMap<String,String>>
List中每一项都是一个HashMap
HashMap<String,String> map中 key是一个String,value也是一个String
一: 如何定位界面Table 一整行的定位。
XPath写法示例://table[contains(@class,'condensed')][contains(@style,'margin-bottom')]/tbody/tr
注意事项:要确保定位只能匹配唯一的Code

二: Feature 示例:
Scenario: E-1342:休假结余设立导出,跟菜单显示一致
When I click on menu 时间管理>休假结余>休假结余设立 from HCM page
#Then I select leaveCode for NAL|SL2|OL|
Then I advance search staff no 0001
Then I select leaveCode for NAL
Then I click export button leave Banlance
Then verify the export Excel Data compare with Interface table
三 :Step 示例:
@Then("^verify the export Excel Data compare with Interface table$")
public void verify_the_export_Excel_Data_compare_with_Interface_table() throws Exception {
List<HashMap<String, String>> previewData = vp.getLeaveBanlaceList(); //获取Table数据源集合
String fileName = anp.downloadFile();
vp.verifyExportExcelDataCompareWithInterfaceTable(fileName, previewData);
}
四、Page 示例
/**
* 用于休假结余设立菜单,返回页面的List<LinkedHashMap>
* @return
* @throws Exception
*/
public List<HashMap<String, String>> getLeaveBanlaceList() throws Exception {
List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
List<WebElement> trList = findAll(By.xpath("//table[contains(@class,'condensed')]/tbody/tr"));
for (int i = 1; i<trList.size(); i++) {
String trRowXpath = "//table[contains(@class,'condensed')][contains(@style,'margin-bottom')]/tbody/tr["+ i +"]";
LinkedHashMap<String, String> dataOneRow = getRowLeaveBanlanceData(trRowXpath);
data.add(dataOneRow);
}
return data;
}
调用getRowLeaveBanlanceData方法,得到LinkedHashMap
public LinkedHashMap<String, String> getRowLeaveBanlanceData(String trRowXpath) throws Exception {
waitLoading();
LinkedHashMap<String, String> actualData = new LinkedHashMap<String, String>();
List<WebElement> headers = waitFor(By.xpath(trRowXpath + "/../../thead/tr/td"));
List<WebElement> values = waitFor(By.xpath(trRowXpath + "/td"));
for (int i = 1 ; i < headers.size(); i++) {
if (!headers.get(i).getText().trim().isEmpty()) {
actualData.put(headers.get(i).getText().trim(), values.get(i).getText().trim());
}
}
return actualData;
}
输出结果:{员工工号=0001, 姓名=黄明, 休假代码=NAL, 休假名称=年假, 上年结余=0, 本年享有=96, 本年调整=0, 下年享有=96, 下年调整=0, 合共已用=0, 备注=}

如何使用List<HashMap<String, String>>详细讲解的更多相关文章
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典) (转)
原文链接 : http://www.cnblogs.com/xiohao/p/4296088.html 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的 ...
- Java堆、栈和常量池以及相关String的详细讲解
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- Java堆、栈和常量池以及相关String的详细讲解(转)
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- Java: 分解List<HashMap<String, String>>
分解List<HashMap<String, String>> 的方法: List<HashMap<String, String>> mapList; ...
- 将ArrayList<HashMap<String, String>>转为ArrayList<Bundle>类型的解决方案
Bundle是一种利用键值对存储的数据格式,而我们在程序中通常利用HashMap存储数据.在开发中,通过Http请求得到JSONArray类型的返回值,我选择利用ArrayList<HashMa ...
- 初始化集合的花样new HashMap<String, String>{ {put("str1":"abc");} }(转)
Map集合的普通初始化方法: Map<String, String> map = new HashMap<String, String>(); map.put("Na ...
- List<HashMap<String,String>> list, 根据hashmap中的某个键的值排序
来源https://blog.51cto.com/zhaodan/1725249 //可以使用Collections.sort(List list, Comparator c)来实现 这里举例hash ...
- Ruby字符串(2):String方法详细整理
String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
随机推荐
- Java知多少(2)虚拟机(JVM)以及跨平台原理
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...
- 关于Unity中NGUI的帧动画和Tween动画
帧动画 1.把三张帧动画的贴图png制作成图集,NGUI---->Open---->Atlas Maker,生成一个预制体,一个材质球,一个大图 2.创建一个Sprite类型的Sprite ...
- org.apache.http.TruncatedChunkException: Truncated chunk ( expected size: 47956; actual size: 35656)
在使用httpcomponents-client-4.2.1时,任务运行一段时间就抛出以下一场 下面是异常的堆栈信息: org.apache.http.TruncatedChunkException: ...
- [Full-stack] 异步即时通信 - Async
故事背景 socket.io, node.js, koa为首的一些通信框架和后端技术点. 之后有必要过一遍<NodeJS 设计模式>. 基础概念 一.短轮询.长轮询(comet).长连接( ...
- mysql添加字段并且设置默认值
ALTER TABLE task ADD uploadStatus TINYINT(4) DEFAULT '0' COMMENT '上传状态';
- H5 (webApi) 接口帮助文档
只有你想不到,没有找不到的,强大的 webApis!!! https://developer.mozilla.org/en-US/docs/Web/API
- 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- k8s(1)-使用kubeadm安装Kubernetes
安装前准备 1. 一台或多台主机,这里准备三台机器 角色 IP Hostname 配置(最低) 操作系统版本 主节点 192.168.0.10 master 2核2G CentOS7.6.1810 工 ...
- Android Studio开发第一篇QuickStart
为什么把as的环境开发放在gradle里呢,因为eclipse里装gradle插件还是不够方便,as直接集成了,然后正好as也是大势所趋,学习一下正好. 看到右边Quick Start快速启动栏下面 ...
- kafka+zookeeper环境配置(linux环境单机版)
版本: CentOS-6.5-x86_64 zookeeper-3.4.6 kafka_2.10-0.10.1.0 一.zookeeper下载与安装 1)下载 $ wget http://mirror ...