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值进行获取)的更多相关文章

  1. javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

    jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...

  2. JavaScript动态改变表格单元格内容的方法

    本文实例讲述了JavaScript动态改变表格单元格内容的方法.分享给大家供大家参考.具体如下: JavaScript动态改变表格单元格的内容,下面的代码通过修改单元格的innerHTML来修改单元格 ...

  3. java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)

    需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可.且还需要按某个字段排序后依次写到excel 实现方法如下: package jansonD ...

  4. table中内容过长,table改变的问题

    在看效果时发现在Chrome中的table已经不是原来设置的宽度了,而其他浏览器是好的,经过百度发现是单元格内容过多造成的,但这时候给td设置宽度已经不适用了,此时就要给table设置 table{t ...

  5. 关于table动态添加数据 单元格合并 数组合并

    var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...

  6. layui 动态表格设置单元格样式

    col.push({ field: , templet: function (d) { ") { return '<span style="color:white;backg ...

  7. Excel-根据分隔符将一个单元格的内容分发到多个单元格

    A1 1:2:3:4:5:6:7::::10 现在想将A1根据";"进行分离,再讲分离出来的一个值填到一个单元格中 =TRIM(MID(SUBSTITUTE($A$12," ...

  8. vba中获取当前sheet页的名称,当前单元格所在位置

    fname = ActiveSheet.Name-------获取当前sheet页的名称        Sname = "" & fname & "&qu ...

  9. poi 取excel单元格内容时,需要判断单元格的类型,才能正确取出

    以下内容非原创,原文链接http://blog.sina.com.cn/s/blog_4b5bc01101015iuq.html ate String getCellValue(HSSFCell ce ...

随机推荐

  1. 关于LeetCode的Largest Rectangle in Histogram的低级解法

    在某篇博客见到的Largest Rectangle in Histogram的题目,感觉蛮好玩的,于是想呀想呀,怎么求解呢? 还是先把题目贴上来吧 题目写的很直观,就是找直方图的最大矩形面积,不知道是 ...

  2. servlet就实现在线用户表

    在学习servlet的过程中,学习了如何用servlet实现在线用户表. 只有服务器处于开机状态才会有在线用户表的存在,在服务器关机的情况下自然就不存在在线用户表的说法:所以,楼主认为在线用户表的信息 ...

  3. BGP多线单IP技术实现形式以及其他双线对比

    自从电信与网通分离之后,北方网通与南方电信网络的互联瓶颈问题一直没有得到很好的解决,这个问题也严重困扰广大的ICP服务商.ICP也只能根据自己网站主流用户群是在南方还是在北方,服务重点是在南方还是北方 ...

  4. Django ORM操作

    ORM 常用操作进阶操作 #!/usr/bin/env python #_*_ coding:utf8 _*_ from __future__ import unicode_literals from ...

  5. Maven中央仓库地址

    Maven 中央仓库地址: 1. http://www.sonatype.org/nexus/ 2. http://mvnrepository.com/ (本人推荐仓库) 3. http://repo ...

  6. install postgis(2.0) on ubuntu(12.04)

    1. 安装postgis sudo apt-add-repository ppa:sharpie/for-science # To get GEOS 3.3.2 sudo apt-add-reposi ...

  7. MFC 控件用法

    1:IP Control 变量CIPAddressCtrl m_iAddr 关联DDX_Control(pDX,IDC_IPADDRESS1,m_iAddr); 设置地址:m_iAddr.SetAdd ...

  8. Hibernate使用原生SQL(转载)

    本文转载,出处如下:http://bhdweb.iteye.com/blog/801084 HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上 ...

  9. C#使用IHttpModule接口修改http输出的方法浅谈

    一.但你每次请求浏览一个页面,比如Login.aspx的时候,都会执行配置文件中system.webserver内的model这个节点的东西(这个是属于遍历的逻辑执行,会将model这个节点的东西全部 ...

  10. 把json数据 [ { } ] 转为数组

    $str = '[{"rwx_price":388.5,"end_station_name":"长沙","swz_price&qu ...