• selenium 获取table数据


    public class Table {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            WebDriver driver = ExplorerBase.IESetting();
            String url = "http://zs.njust.edu.cn/newzs/news/zhxw/20140710151805.htm";
            driver.manage().window().maximize();// 最大化
            driver.get(url);
            String setscroll = "document.documentElement.scrollTop=300";
            JavascriptExecutor jse = (JavascriptExecutor) driver;
            jse.executeScript(setscroll);
            Table table = new Table(driver);
            //根据By获取table数据
            By by = By.xpath(".//*[@id='count2']/table[1]/tbody/tr[5]/td/div/table");
            System.out.println(table.getCellText(by, "1.1"));//行列都从1开始,更符合用户习惯
            
            //根据xpath获取table数据
            String  xpath=".//*[@id='count2']/table[1]/tbody/tr[5]/td/div/table";//table对应的xpath
            String[][] arr=table.getTableData(xpath,2);
            System.out.println(arr[1][1]);//行列都从1开始,更符合用户习惯
            driver.quit();
    
        }
    
        private WebDriver driver;
    
        Table(WebDriver driver) {
            this.driver = driver;
        }
    
        /**
         * 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为 row.column, 行列从0开始.
         * 
         * @param by
         *            用于得到table对象
         * @param tableCellAddress
         *            一个单元格地址, 如. "1.4"
         * @return 从一个table的单元格中得到文本值
         */
        public String getCellText(By by, String tableCellAddress) {
            // 得到table元素对象
            WebElement table = driver.findElement(by);
            // 对所要查找的单元格位置字符串进行分解,得到其对应行、列。
            int index = tableCellAddress.trim().indexOf('.');
            int row = Integer.parseInt(tableCellAddress.substring(0, index));
            int cell = Integer.parseInt(tableCellAddress.substring(index + 1));
            // 得到table表中所有行对象,并得到所要查询的行对象。
            List<WebElement> rows = table.findElements(By.tagName("tr"));        
            WebElement theRow = rows.get(row-1);//获取指定单行, 对出传入的行列都做-1
            // 调用getCell方法得到对应的列对象,然后得到要查询的文本。
            String text = getCell(theRow, cell-1).getText();
            return text;
        }
    /**
     * 获取指定x,y值
     * @param Row行
     * @param cell列
     * @return 返回指定单元格的元素
     */
        private WebElement getCell(WebElement Row, int cell) {
            List<WebElement> cells;
            WebElement target = null;
            // 列里面有"<th>"、"<td>"两种标签,所以分开处理。
            if (Row.findElements(By.tagName("th")).size() > 0) {
            
                cells = Row.findElements(By.tagName("th"));
                target = cells.get(cell);
            }
            if (Row.findElements(By.tagName("td")).size() > 0) {
                cells = Row.findElements(By.tagName("td"));
                target = cells.get(cell);
            }
            return target;
    
        }
        /**
         * 获取table数据
         * @param xpath table对应的xpath
         * @param maxColRow 列最多的一行的行数
         * @return 以二维数组的形式返回table数据
         */
        public String[][] getTableData(String xpath,int maxColRow) {
            WebElement table=driver.findElement(By.xpath(xpath));
            List<WebElement> rows = table.findElements(By.tagName("tr"));//获取行tr的集合
            int rowCount=rows.size();
            List<WebElement> cols = driver.findElement(By.xpath(xpath+"/tbody/tr["+maxColRow+"]")).findElements(By.tagName("td"));//获取列td的集合
            int colCount=cols.size();
            //System.out.println("行数:"+rowCount+"列数:"+colCount);
            String[][] arr=new String[rowCount][colCount];
            String txt;
            for (int i = 1; i < rowCount; i++) {
                for (int j = 1; j < colCount; j++) {
                    try {
                        txt= driver.findElement( By.xpath(xpath+"/tbody/tr["+(i)+"]/td["+(j)+"]")).getText();
                    } catch (Exception e) {
                        txt="";
                    }        
                    txt=txt.replace("
    ", "");
                    txt=txt.replace("
    ", "");    
                    //System.out.println("行数:"+i+"    列数:"+j);
                    arr[i-1][j-1]=txt;
                }
            }
            return arr;
        }
    }
  • 相关阅读:
    ActiveMQ持久化机制
    ActiveMQ的使用
    ActiveMQ解释
    Linux CentOS安装Tomcat
    nginx使用Keepalived
    Session共享解决方案
    Spring框架AOP使用扩展
    Myabtis测试(二)错题整理分析
    初识Spring及打印机案例
    MyBatis注解
  • 原文地址:https://www.cnblogs.com/changshuo/p/3841585.html
Copyright © 2020-2023  润新知