如何使用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 ...
随机推荐
- 解决SQLite异常:library routine called out of sequence
在项目开发中,使用SQLite一不小心就会碰到各种DB异常,网上搜了下没有这方面的资料,写出来记录下. 异常信息:android.database.sqlite.SQLiteMisuseExcepti ...
- java.util.concurrent介绍【转】
java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent ...
- 如何使用ABBYY FineReader 12将JPEG文件转换成可编辑文本
日常工作中,经常会收到一些JPEG格式的图像文件,有时候还需要做一些修改,可是大家都知道JPEG格式的文件是无法修改的,必须转换成可编辑的格式,当然,现在市场上也应用而生了很多转换工具,相信大家都听说 ...
- 设计模式-行为型模式,python 中介者模式
中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行 ...
- 机器人学 —— 轨迹规划(Artificial Potential)
今天终于完成了机器人轨迹规划的最后一次课了,拜拜自带B - BOX 的 Prof. TJ Taylor. 最后一节课的内容是利用势场来进行轨迹规划.此方法的思路非常清晰,针对Configration ...
- day_5.07py
正则:
- H - Farey Sequence
The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...
- 拦截$.ajax方法实现登录过期登录
jQuery(function ($) { var CreateLoginWindows = function (callback) { var h = 300; $('#CreateLoginWin ...
- MVC 二级联动
后台代码,获取数据如下: /// <summary> /// 获取省份 /// </summary> public JsonResult GetProvincelist() { ...
- .NET Core开发日志——HttpContext
之前的文章记述了从ASP.NET Core Module到KestrelServer的请求处理过程.现在该聊聊如何生成ASP.NET中我们所熟悉的HttpContext. 当KestrelServer ...