Java 获取表格中某一个单元格的值
2018-06-27 14:43 钱先生 阅读(6086) 评论(0) 编辑 收藏 举报需求
搜索页面返回表格样搜索结果, 获取搜索结果中某个单元格的具体值.
以下图为例, 下表是搜索返回的结果, 第一行是各个列的名字, 其它是具体的返回值.
方法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; } }