如何使用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多线程系列——过期的suspend()挂起、resume()继续执行线程
简述 这两个操作就好比播放器的暂停和恢复. 但这两个 API 是过期的,也就是不建议使用的. 不推荐使用 suspend() 去挂起线程的原因,是因为 suspend() 在导致线程暂停的同时,并不会 ...
- Openlayers离线载入天地图
概述: 经过一个春节的休整,今天最终開始了! 任何时候.都不要忘记学习.学习是一辈子的事情!今天,我来说说怎样实现天地图的离线以及Openlayers载入离线数据实现天地图数据的展示. 实现: 1.获 ...
- Java知多少(89)列表和组合框
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
- VMware 虚拟机磁盘
创建磁盘时,会进行两个操作:分配空间.置零 1.厚置备延迟置零: 默认的创建格式,创建磁盘时,直接从磁盘分配空间,但对磁盘保留数据不 置零.所以当有I/O操作时,只需要做置零的操作. 磁盘性能较好,时 ...
- 巧妙解决windows下 copy命令不接受太长路径的问题
今天遇到了写的bat文件中执行xcopy成功,但是部分文件丢失的问题,查看日志,发现很多提示 : “the system can not find the path specified.“ 但是去指定 ...
- RabbitMQ 学习
参考:https://www.rabbitmq.com/getstarted.html 先在本地安装RabbitMQ 组件(需要安装Erlang组件),启动服务. 激活 RabbitMQ's Mana ...
- struts2常用标签详解(申明:来源于网络)
struts2常用标签详解(申明:来源于网络) 地址:http://blessht.iteye.com/blog/1184960
- F#周报2018年第51期
新闻 有经验的开发者选择F# 2018年10佳技术讲话 试用F#开发WebAssembly Fable.Remoting: 刷新访问令牌 F#开发WebAssembly现在可以使用代码补全 Rider ...
- [No0000181]改善C#程序的建议9:使用Task代替ThreadPool和Thread
一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互 ...
- 深度学习模型融合stacking
当你的深度学习模型变得很多时,选一个确定的模型也是一个头痛的问题.或者你可以把他们都用起来,就进行模型融合.我主要使用stacking和blend方法.先把代码贴出来,大家可以看一下. import ...