Java selenium 获取表格数据_selenium 获取table数据

public classTable {/***@paramargs*/

public static voidmain(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= newTable(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();

}privateWebDriver driver;

Table(WebDriver driver) {this.driver =driver;

}/*** 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为 row.column, 行列从0开始.

*

*@paramby

* 用于得到table对象

*@paramtableCellAddress

* 一个单元格地址, 如. "1.4"

*@return从一个table的单元格中得到文本值*/

publicString 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 rows = table.findElements(By.tagName("tr"));

WebElement theRow= rows.get(row-1);//获取指定单行, 对出传入的行列都做-1//调用getCell方法得到对应的列对象,然后得到要查询的文本。

String text = getCell(theRow, cell-1).getText();returntext;

}/*** 获取指定x,y值

*@paramRow行

*@paramcell列

*@return返回指定单元格的元素*/

private WebElement getCell(WebElement Row, intcell) {

Listcells;

WebElement target= null;//列里面有"

"、""两种标签,所以分开处理。

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);

}returntarget;

}/*** 获取table数据

*@paramxpath table对应的xpath

*@parammaxColRow 列最多的一行的行数

*@return以二维数组的形式返回table数据*/

public String[][] getTableData(String xpath,intmaxColRow) {

WebElement table=driver.findElement(By.xpath(xpath));

List rows = table.findElements(By.tagName("tr"));//获取行tr的集合

int rowCount=rows.size();

List 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=newString[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("\n", "");

txt=txt.replace("\r", "");//System.out.println("行数:"+i+" 列数:"+j);

arr[i-1][j-1]=txt;

}

}returnarr;

}

}

你可能感兴趣的:(Java,selenium,获取表格数据)