zoukankan      html  css  js  c++  java
  • Java 获取表格中某一个单元格的值

    需求

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

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

    方法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;
        }
    
    }
    行数 + 列数
  • 相关阅读:
    CI框架(Codeigniter)总结
    ssh自动下载SFTP文件
    数据库设计原则
    Java代码性能优化的 39个细节
    quartz定时任务时间设置
    Myeclipse 反编译工具插件
    Maven -- 使用Myeclipse创建Maven项目
    详解Java Web项目启动执行顺序
    java web项目下的lib和build path 中jar包问题解惑
    java读取存在src目录下和存在同级目录下的配置文件
  • 原文地址:https://www.cnblogs.com/cheese320/p/9233907.html
Copyright © 2011-2022 走看看