需求

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

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

方法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. python之斐波那契数列递归推导在性能方面的反思

    在各种语言中,谈到递归首当其冲的是斐波那契数列,太典型了,简直就是标杆 一开始本人在学习递归也是如此,因为太符合逻辑了 后台在工作和学习中,不断反思递归真的就好嘛? 首先递归需要从后往前推导,所有数据 ...

  2. Studying

    美团spark实践:http://tech.meituan.com/spark-in-meituan.html CDH5.6.0-HBase1.0.0:http://archive.cloudera. ...

  3. 如何在GooglePlay上面发布应用

    上传和发布应用 注册开发者帐户后,您便可使用 Google Play 开发者控制台将应用上传到 Google Play. 访问 Google Play 开发者控制台. 点击屏幕顶部附近的添加新用户. ...

  4. Android应用内展示office文件--腾讯浏览服务(TBS)

    什么是TBS  依托 X5 内核强大的能力,致力于提供优化移动端浏览体验的整套解决方案(官网介绍).我们可利用其做文件浏览功能,支持多种文件格式,完全可以满足需求.更多介绍请看官网:http://x5 ...

  5. 2018.4.23-ml笔记(线性回归、梯度下降)

    线性回归:找到最合适的一条线来最好的拟合我们的数据点. hθ(x) = θixi=θTx    θ被称之为权重参数    θ0为拟合参数 对每个样本yi=θTxi + εi    误差ε是独立并且具有 ...

  6. EOS商业落地利器:多签名操作与应用

    eos主网上线在即,它之所以能受到各方青睐,主要是看中了它在未来商业应用落地的潜力.在这期间,完善的账户与权限系统是必要条件. 关键字:eos,账户,钱包,权限,多重签名,eosio.msig,pro ...

  7. Android privilege escalation to mediaserver from zero permissions (CVE-2014-7920 + CVE-2014-7921)

    墙外通道:http://bits-please.blogspot.com/2016/01/android-privilege-escalation-to.html In this blog post ...

  8. Go语言程序结构分析初探

    每一种编程语言都有自己的语法.结构以及自己的风格,这也是每种语言展现各自魅力及众不同的地方.Go也不例外,它简单而优雅,与此同时使用起来也很有趣.在本文中,我们将讨论以下几点: Go程序结构 如何运行 ...

  9. WIN7 环境下搭建 PHP7(64 位)操作步骤

    WIN7 环境下搭建 PHP7(64 位)操作步骤 一.安装与配置 Apache 1.下载 Apache下载地址:https://www.apachelounge.com/download/ 2.安装 ...

  10. 如何调试Javascript代码以及网页代码

    做过网页开发的都知道,不过你是用php还是asp.net以及java开发的网站,在开发过程中,web网页展示页面肯定会出现或多或少的问题.这里我推荐使用谷歌浏览器进行Web网页的调试以及错误信息定位. ...