需求

搜索页面返回表格样搜索结果, 获取搜索结果中某个单元格的具体值.

以下图为例, 下表是搜索返回的结果, 第一行是各个列的名字, 其它是具体的返回值.

方法1:

根据用户输入的表头名来确定是第几列, 再根据用户输入的行数锁定单元格.

package com.thanos.ebony2;
import static com.thanos.ebony2.bean.AntFormBrowser.BROWSER;
import com.thanos.ebony2.exception.NoSuchRow; import java.util.ArrayList;
import java.util.List; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement; import com.thanos.ebony2.bean.AntProp; @SuppressWarnings(value = {"unchecked", "rawtypes"})
public class Test {
public static void main(String[] args) {  //测试代码
BROWSER.open(AntProp.getProp("XXXURL"));
BROWSER.pause(1);
BROWSER.click("//*[@id=\"abc\"]/div/div/form/div[2]/div/div/div/span/div[1]/button");
BROWSER.pause(1);
System.out.println(getRowNo());
System.out.println(getColNo());
String a = getCell("A", 10); // 取A列第10行的值
System.out.println("cellValue a: " + a);
String b = getCell("G", 11); // 取G列第11行的值
System.out.println("cellValue b: " + b);
} /*
* 参数: 列名 String tabName; 行数 int rowNo
* 返回值: 某一个格子的值
*/ public static String getCell(String colName, int rowNo) {
int totalRow = getRowNo();
if (rowNo < 1) {
throw new NoSuchRow(String.format("row [%s]", rowNo));
} else if(rowNo > totalRow) {
throw new NoSuchRow(String.format("There's %s rows, your input %s is not reachable", totalRow, rowNo));
} List<WebElement> temp = BROWSER.getWebDriver().findElements(By.tagName("tr"));
List<WebElement> currentRow = temp.subList(1, temp.size()-1); //去掉表头那一行
String[] rowData = currentRow.get(rowNo-1).getText().split(" "); //注: 因第一行是表头(列名), 所以取单元格值时表头不计入rowNo. 即: rowNo传入1时所取的值是表头下面第一行的值.
List<WebElement> tags = BROWSER.getWebDriver().findElements(By.tagName("th"));
List<String> tagNames = new ArrayList();
for (WebElement ele : tags) {
String name = ele.getText();
tagNames.add(name);
}
// Float cellValue = 0f;
String cellValue = "";
int index = tagNames.indexOf(colName);
// cellValue = Float.parseFloat(rowData[index]);
cellValue = rowData[index];
return cellValue; } public static int getColNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("th"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size();
} public static int getRowNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("tr"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size()-1;
} }

表头名 + 行数

方法2:

用两层循环把每一个单元格放入二维数组, 再根据用户输入的行数和列数定位单元格并取值.

package com.thanos.ebony2;
import static com.thanos.ebony2.bean.AntFormBrowser.BROWSER;
import com.thanos.ebony2.exception.NoSuchRow; import java.util.ArrayList;
import java.util.List; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement; import com.thanos.ebony2.bean.AntProp; @SuppressWarnings(value = {"unchecked", "rawtypes"})
public class Test {
public static void main(String[] args) { //测试代码
BROWSER.open(AntProp.getProp("XXXURL"));
BROWSER.pause(1);
BROWSER.click("//*[@id=\"abc\"]/div/div/form/div[2]/div/div/div/span/div[1]/button");
BROWSER.pause(1);
System.out.println(getRowNo());
System.out.println(getColNo());
String b = getCellValue(10, 1); //取第10行第1列的值
System.out.println("cellValue b: " + b);
} /*
* 参数: 列 int colNo, 行 int rowNo
* 返回值: 某一个格子的值
*/ public static String getCellValue(int colNo, int rowNo) {
List<WebElement> tempR = BROWSER.getWebDriver().findElements(By.tagName("tr"));
List<WebElement> tempRow = tempR.subList(1, tempR.size()-1); //去掉表头(表头不计入行数)
int totalRow = getRowNo();
int totalCol = getColNo();
Object[][] table = new Object[totalRow][totalCol];
for (int i = 0; i < tempRow.size(); i++) {
List<WebElement> currCol = tempRow.get(i).findElements(By.tagName("td"));
for (int j = 0; j < currCol.size(); j++) {
table[i][j] = currCol.get(j).getText();
}
} return (String) table[colNo-1][rowNo-1]; //返回单元格的值
} public static int getColNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("th"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size();
} public static int getRowNo() {
List<WebElement> elements = BROWSER.getWebDriver().findElements(By.tagName("tr"));
// for (WebElement webElement : elements) {
// System.out.println(webElement.getText());
// }
return elements.size()-1;
} }

行数 + 列数

Java 获取表格中某一个单元格的值的更多相关文章

  1. Excel表格中单击一个单元格如何将整行整列变色

    视图->阅读模式 开启阅读模式后 就会显示如下情景,是的你点击任意单元格后,显示整行/整列

  2. C# 获取Excel中的合并单元格

    C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...

  3. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  4. Devexpress Winform Gridcontrol 中根据条件单元格的值改变单元格的颜色等属性。

    提供一下三种方法 1.使用设计器 点击gridcontrol控件,run designer,format Condtions, add,然后进行各种条件的设置. 2.用代码代替设计器. 实例代码: p ...

  5. java poi给sheet表格中的某个单元格添加批注

    Label l = , , "A cell with a comment"); WritableCellFeatures cellFeatures = new WritableCe ...

  6. html 让table表格中的td单元格内容过长显示为固定长度,多余部分用省略号代替?

    <th class="wrap">商品名</th> .wrap{ width: 150px; //设置需要固定的宽度 white-space: nowrap ...

  7. jquery遍历table为每一个单元格取值及赋值

    表格代码 <tr> <td> <input type="text" style="border: none; text-align: cen ...

  8. DbGridEh 一个单元格的值改变时另一单元格的值随之改变

    你可以为每个字段设置OnSetText事件,这样在输入完后回车会移动时就会触发,或者在adoquery的beforepost中或afterpost中都可以grid也提供了一些事件,也可以在某些条件下做 ...

  9. table里面,怎么根据checkbox选择的一行中的某个单元格的值是否为空,来判断是否该选中

    <table class="stripe" id="tab2"> <tr> <th>选择</th> <th ...

随机推荐

  1. docker配置仓储库时出错:无法安全地用该源进行更新,所以默认禁用该源

    在Ubuntu上安装docker,配置仓储库时第一次使用了阿里去的镜像,如下 sudo add-apt-repository "deb [arch=amd64] http://mirrors ...

  2. Liferay7 BPM门户开发之5: Activiti和Spring集成

    参考文档: https://github.com/jbarrez/spring-boot-with-activiti-examplehttps://github.com/sxyx2008/spring ...

  3. Python项目代码结构

    目录结构组织方式 简要解释一下: bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行. luffy/: 存放项目的所有源代码.(1) 源代码中的所有模块.包都应该放在此目录. ...

  4. Hexo的next主题安装

    通过Git+Hexo搭建的个人博客地址:https://liangh.top/ 1.使用git克隆最新版本 2.先在themes目录创建一个next文件夹,然后在hexo站点目录下右键打开Git Ba ...

  5. linux日常运维常用命令

    ---查看端口占用 netstat -ap | grep 8000 ---重启nginx sudo /usr/sbin/nginx -c /usr/local/nginx/conf/nginx.con ...

  6. c/c++本地时间获取

    在记录程序日志时,需要记录时间.如下: #include <iostream> #include <time.h> #include <windows.h> usi ...

  7. Hadoop服务库与事件库的使用及其工作流程

    Hadoop服务库与事件库的使用及其工作流程   Hadoop服务库: YARN采用了基于服务的对象管理模型,主要特点有: 被服务化的对象分4个状态:NOTINITED,INITED,STARTED, ...

  8. Linux编程 2 (遍历目录cd与查看文件和目录ls)

    一.   遍历目录 在 linux系统上,可以使用cd切换目录命令. 分二种路径,一是绝对文件路径,另一种是相对文件路径. 1.  绝对文件路径 在虚拟目录中采用文件路径,以虚拟目录根目录开始,相当于 ...

  9. php使用memcached缓存总结

    1. 查询多行记录,以sql的md5值为key,缓存数组(个人觉得最好用的方法) $mem = new Memcache(); $mem->connect('127.0.0.1',11211); ...

  10. Java基础之 运算符

    前言:Java内功心法之运算符,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,J ...