WebDriver获取table的内容(通过动态获取Table单元格的TagName对其innerHTML值进行获取)
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Table {
// 通过JS动态获取到的Html的TagName
String tagname = "";
//
String text = "";
// 用于存放Map的key值
List<String> Key = new ArrayList<String>();
// 用于存放Map的value值
List<String> Value = new ArrayList<String>();
// 将在页面获取的table里面的数据以键值对的方式存放到map中
Map<String, String> LinkMap = new LinkedHashMap<String, String>();
// selector:css选择器 :定位table下的所有tr标签
public void tableValue(WebDriver driver, By selector) {
JavascriptExecutor JS = (JavascriptExecutor) driver;
// 首先得到表格中所有tr标签的集合
List<WebElement> rows = driver.findElements(selector);
for (WebElement row : rows) {
// 然后得到当前所有tr里td标签的集合
List<WebElement> cols = row.findElements(By.tagName("td"));
for (WebElement col : cols) {
if (col.isDisplayed()) {// 防止得到最下方的隐藏的td单元格(多余的一部分,应为设计失误)
// 如果executeScript()方法中执行的结果有返回值,则需要将其返回,如果仅仅是action或者改变属性值,则不需要返回,此处为了返回td下的子节点的标签名,用于后续的判断
tagname = (String) JS.executeScript(
"return arguments[0].children[0]?arguments[0].children[0].tagName:arguments[0].tagName;",
col);
if (tagname.equals("SPAN")) {
// 使用正则表达式,处理掉不需要的字符"*"与":"
text = col.getText().replaceAll("[*:]", "");
Key.add(text);
} else if (tagname.equals("INPUT")) {
text = col.findElement(By.tagName("input")).getAttribute("value");
Value.add(text);
} else if (tagname.equals("TD")) {
// 使用正则表达式,处理掉不需要的字符"*"与":"
text = col.getText().replaceAll("[*:]", "");
Key.add(text);
} else if (tagname.equals("DIV")) {
text = col.findElement(By.tagName("input")).getAttribute("value");
Value.add(text);
} else if (tagname.equals("SELECT")) {
// 获取当前select下拉框被选中的文本的index值,仅仅只是index值,并不是其innerHTML值
text = JS.executeScript("return arguments[0].children[0].selectedIndex;", col).toString();
int index = Integer.parseInt(text);
// 通过被选中的index获取其innerHTML值
text = (String) JS.executeScript(
"return arguments[0].children[0].children[" + index + "].innerHTML;", col);
Value.add(text);
} else {
return;
}
}
}
}
// 将key和value值存入map中,并做了对应的关联关系
for (int i = 0; i < Value.size(); i++) {
LinkMap.put(Key.get(i), Value.get(i));
}
Iterator it = LinkMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entity = (Entry) it.next();
System.out.println("key=" + entity.getKey() + ",value=" + entity.getValue());
}
}
}
WebDriver获取table的内容(通过动态获取Table单元格的TagName对其innerHTML值进行获取)的更多相关文章
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- JavaScript动态改变表格单元格内容的方法
本文实例讲述了JavaScript动态改变表格单元格内容的方法.分享给大家供大家参考.具体如下: JavaScript动态改变表格单元格的内容,下面的代码通过修改单元格的innerHTML来修改单元格 ...
- java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)
需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可.且还需要按某个字段排序后依次写到excel 实现方法如下: package jansonD ...
- table中内容过长,table改变的问题
在看效果时发现在Chrome中的table已经不是原来设置的宽度了,而其他浏览器是好的,经过百度发现是单元格内容过多造成的,但这时候给td设置宽度已经不适用了,此时就要给table设置 table{t ...
- 关于table动态添加数据 单元格合并 数组合并
var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...
- layui 动态表格设置单元格样式
col.push({ field: , templet: function (d) { ") { return '<span style="color:white;backg ...
- Excel-根据分隔符将一个单元格的内容分发到多个单元格
A1 1:2:3:4:5:6:7::::10 现在想将A1根据";"进行分离,再讲分离出来的一个值填到一个单元格中 =TRIM(MID(SUBSTITUTE($A$12," ...
- vba中获取当前sheet页的名称,当前单元格所在位置
fname = ActiveSheet.Name-------获取当前sheet页的名称 Sname = "" & fname & "&qu ...
- poi 取excel单元格内容时,需要判断单元格的类型,才能正确取出
以下内容非原创,原文链接http://blog.sina.com.cn/s/blog_4b5bc01101015iuq.html ate String getCellValue(HSSFCell ce ...
随机推荐
- 容易忘记的几个Linux命令
#查看文件或者目录的属性ls -ld filenamels -ld directory #vi编辑器输入:.,$d #清除全部内容 #修改管理员.用户密码passwd user #("use ...
- 改造vim
1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可: lingd@ubuntu:~/arm$sudo apt-get install vim vim-sc ...
- 在GNU/Linux下将CD音乐转为mp3
以前我欣赏古典音乐都是听的CD,因而珍藏了不少光盘以及下载到电脑上的ape与flac格式的音乐文件.随着手机硬件性能(如电池续航能力.处理器速度.音质.存储容量等)和软件功能(音乐播放器对于曲目的管理 ...
- java实现的快速排序算法
快速排序的原理:选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的).一般选择序列的第一个元素. 一次循环:从后往前比较,用基准值和最后一个值比较, ...
- Flexslider图片轮播、文字图片相结合滑动切换效果
Flexslider是一款基于的jQuery内容滚动插件.它能让你轻松的创建内容滚动的效果,具有非常高的可定制性.开发者可以使用Flexslider轻松创建各种图片轮播效果.焦点图效果.图文混排滚动效 ...
- Math 对象 识记
Math 对象用于执行数学任务. 1.使用 Math 的属性和方法的语法: var pi_value=Math.PI; var sqrt_value=Math.sqrt(15); 注释:Math 对象 ...
- vs2008编译FileZilla服务端源码
vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...
- 表格单元格td设置宽度无效的解决办法 .
http://zzstudy.offcn.com/archives/11366 在做table页面时,有时对td设置的宽度是无效的,td的宽度始终有内部的内容撑开,可以设置padding,但直接设置w ...
- 使用MegaCli工具,在线调整raid配置
公司hadoop平台采购了一批浪潮服务器,2个系统盘,12个数据盘.先想的用直通的raid卡免得再做单盘raid0麻烦,结果这批机器配的卡也不支持裸盘使用,咨询浪潮客服,说可以使用JBOD的模式进行, ...
- vim 替换
摘自: vim替换命令 替換(substitute) :[range]s/pattern/string/[c,e,g,i] range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後 ...