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());
        }
    }
}

时间: 2024-10-18 05:14:05

WebDriver获取table的内容(通过动态获取Table单元格的TagName对其innerHTML值进行获取)的相关文章

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

jsp页面表格布局Html代码 <body > <center> <input type="text" value="111" id="mytext"> <table border="1" width="60%" id="mytable"> <tr> <td id="td1">第一行第一列<

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

需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可.且还需要按某个字段排序后依次写到excel 实现方法如下: package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.poi.xssf.userm

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

var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName":"城二分公司","IssueTypeID":101,"IssueTypeName":"宏蜂窝连片弱覆盖","Total":242,"WithoutDemand":139,"

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

以下内容非原创,原文链接http://blog.sina.com.cn/s/blog_4b5bc01101015iuq.html ate String getCellValue(HSSFCell cell) { String cellValue = ""; DecimalFormat df = new DecimalFormat("#"); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: c

iOS开发&mdash;&mdash;Autolayout下动态调整单元格高度

情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一个单元格 在没点开时,英雄的简介被替换为"点击查看详情",下载按钮被设为隐藏. 这样的话如果在点开时reload整个表格的数据,表格因为重载数据还是会恢复成没有点开的状态.   解决步骤: 使用Autolayout的优点是可以让内容决定单元格的高度.那么有什么办法能在内容改变后动态地调整单

请教 JTable 里的单元格如何使得双击进入单元格后,单元格的内容处于全选中状态

http://bbs.csdn.net/topics/390195204 ———————————————————————————————————————— java 达人, 最近在开发一个 java 模块,用到了 JTable.现在对 JTable 里的单元格的操作中,在双击进入单元格后,单元格的内容不是全选中状态. 请问有啥办法使得双击进入单元格后,单元格的内容处于全选中状态?如下面的图片所示 十分感谢! 下面是已经写好的代码: Java code? 1 2 3 4 5 6 7 8 9 10

用table绘制 等宽等间距的单元

css: .test1 { empty-cells: show;/*show:指定当表格的单元格无内容时,显示该单元格的边框.*/ border-spacing: 10px 10px;/*用长度值来定义行和单元格的边框在横向和纵向上的间距.不允许负值*/ border-collapse: separate;/*separate:边框独立;collapse:相邻边被合并*/ table-layout: fixed;/*fixed:固定布局的算法.在这算法中,水平布局是仅仅基于表格的宽度,表格边框的

Excel自文本导入内容时如何做到单元格内换行

前言:今天在处理数据的时候,在数据库中用到了\n换行符号,目的是在同表格内做到数据多行显示,比如  字段名1  字段名2  字段名3  1 数据一行 数据二行 数据三行 例子是在sql查询后的结果   2 例子如上  数据未导出  本来在sql查询后是如此显示的,但是后来导出文本格式,Excel自文本导入内容时就会报错,那么问题来了, 如何做到Excel自文本导入内容时如何做到单元格内换行? 正文:在网上找了很多例子,其中有位前辈讲的很有道理,原话如下: excel实现自动换行的两个必要条件1.

layui 框架 table插件 实现键盘快捷键 切换单元格编辑

最近使用layui的框架时,发现table插件不支持键盘快捷键切换单元格,花了点时间实现此功能. 分享给有需要的朋友们~~~ 1.支持 enter,上,下,右键 切换单元格,支持隐藏列跳过切换. 注:单元格必须开启了 edit:text 模式,才支持键盘切换. 使用方法:1.在需要启用此功能的页面中js代码段插入.2.在公用的js文件中插入即可.使用此方式js文件必须在页面加载完成后再加载,最迟加载,切记! 原文地址:https://www.cnblogs.com/zakary-zhen/p/1