如何使用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 ...
随机推荐
- uboot i2c 操作函数记录
I2C 在 u-boot 上面,有直接操作 I2C 的函数 // drivers/i2c/i2c_core.c // 设置在哪个 I2C bus 上工作 276 int i2c_set_bus_num ...
- JVM:从实际案例聊聊Java应用的GC优化
原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂 ...
- mac通过路径找到对应的文件夹
在finder中 command + shift + G 跳出窗口中输入指定的路径,即可到达.
- html5——canvas画布
一.基本介绍 1,canvas是画布,可以描画线条,图片等,现代的浏览器大部分都支持. canvas的width,height默认为300*150,要指定画布大小,不能用css样式的widh,heig ...
- Python 的 Magic Methods 指南(转)
介绍 本指南是数月博客的总结.主题是魔术方法. 什么是魔术方法呢?它们是面向对象Python语言中的一切.它们是你可以自定义并添加“魔法”到类中的特殊方法.它们被双下划线环绕(比如__init__或_ ...
- 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large
在做查询数据库操作时,报了以上错误,还有out of memery heap hacp ,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了20M ...
- sqllocaldb 2016安装
msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES
- ABBYY FineReader 12如何识别包含非常规符号的文本
ABBYY FineReader 12 是一款OCR图文识别软件,可快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索的文本,有时文本中可能会包含一些非常规的符号,此时ABBYY ...
- android评分条RatingBar自定义设置
RatingBar为评分条控件,默认效果为若干个绿色的星星,如果想将其换成其他自定义图片就要自定义它的style.首先是布局文件: 其中android:numStars="5"设置 ...
- [Bayes] dchisq: Metropolis-Hastings Algorithm
dchisq gives the density, # 计算出分布下某值处的密度值 pchisq gives the distribution fun ...