package org.sky.auto.element;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.sky.auto.base.AutoBase;
import org.sky.auto.exception.MyAutoException;
public class Table extends SElement{
static Logger logger =Logger.getLogger(Table.class);
private WebElement element;
public WebElement getElement() {
return element;
}
public void setElement(WebElement element) {
this.element = element;
}
public Table(){
this.element=new RemoteWebElement();
}
public Table(By by){
this.element=AutoBase.driver().findElement(by);
}
public Table(WebElement element){
this.element=element;
}
/**
*获得table的第row行,col列的值,这个方法只能返回td的值,对于标题th标签是不支持的,可以用getTableTitle的方法,</br>
*都是在同一个table中,按正常的行数数就可以。
* 行号和列号都从0开始
* @param row 行号
* @param col 列号
* @return 此table的指定行,指定列的值
* */
public String getTableContent(int row,int col){
String content=null;
if(isExist()){
try{
content=getElement().findElement(By.xpath(".//tr["+(row)+"]/td{"+(col)+"]")).getText();
logger.info(">>["+this.getId()+"]第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
}catch(Exception e){
logger.info(">>["+this.getId()+"]第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!找不到这个table元素!");
}
return content;
}else{
logger.error("第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
throw new MyAutoException("["+this.getId()+"]获得table内的数据的时候出现错误,可能的原因是元素没有被找到!");
}
}
/**这个方法返回的是table的标题内容
* @param row 行号
* @param col 列号
* @return 此table的指定行,指定列的值
* */
public String getTableTitle(int row,int col){
String content=null;
if(isExist()){
try{
content=getElement().findElement(By.xpath(".//tr["+(row)+"]/th{"+(col)+"]")).getText();
logger.info(">>["+this.getId()+"]第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
}catch(Exception e){
logger.info(">>["+this.getId()+"]第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!找不到这个table元素!");
}
return content;
}else{
logger.error("第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
throw new MyAutoException("["+this.getId()+"]获得table内的数据的时候出现错误,可能的原因是元素没有被找到!");
}
}
/**
* 获得此table第col列所有行的值,列号从0开始
* @param col列号
* @return 字符串list,col列的所有行的信息
* */
public List<String> getTableContentByColumn(int col){
if(isExist()){
try{
List<String> contents =new ArrayList<String>();
List<WebElement> cells=element.findElements(By.xpath(".//td{"+(col+1)+"]"));
for(WebElement cell : cells){
contents.add(cell.getText());
}
logger.info(">>["+this.getId()+"]第"+col+"列的信息获得成功!");
return contents;
}catch(Exception e){
logger.error("第"+col+"列的信息获得失败!!");
}
}else{
logger.error(">>["+this.getId()+"]第"+col+"列的信息获得失败!!元素没有找到!");
throw new MyAutoException("["+this.getId()+"]查找这个元素的时候出现了错误,可能这个元素不存在,没有找到元素!");
}
return null;
}
/**
* 获得此table的所有行和所有列的值
* @return 获得所有行和所有列的值,如果table是空的,那么返回null
* */
public List<List<String>> getAllTableContext(){
List<List<String>> contents = new ArrayList<List<String>>();
int rowCount=0;
if(isExist()){
try{
while(true){
if(element.findElements(By.xpath(".//tr["+(rowCount+1)+"]")).size()==0){
break;
}
contents.add(getTableContentByRow(rowCount));
rowCount++;
logger.info(">>["+this.getId()+"]第"+rowCount+"行的所有信息获得成功!");
}
}catch(Exception e){
logger.info("第"+rowCount+"行的所有信息获得失败!没有找到这个table内的要查找的元素!");
}
return contents;
}else{
logger.info("第"+rowCount+"行的所有信息获得失败!没有找到这个table元素!");
throw new MyAutoException("["+this.getId()+"]查找table的所有元素的时候出现错误!可能这个元素不存在!");
}
}
/**
* 获得table第row行所有的值,行号从0开始
* @param row 行号
* @return 字符串list,row列所有的信息
* */
private List<String> getTableContentByRow(int row) {
List<String> contents=new ArrayList<String>();
if(isExist()){
try{
WebElement rowCell = getElement().findElement(By.xpath(".//tr["+(row+1)+"]"));
List<WebElement> cells = rowCell.findElements(By.xpath(".//td"));
for(WebElement cell : cells){
contents.add(cell.getText());
}
logger.info(">>["+this.getId()+"]第"+row+"行的信息获得成功!");
}catch(Exception e){
logger.info("第"+row+"行的信息获得失败!找不到table内的要查找的的元素!");
}
return null;
}else{
logger.info("第"+row+"行的信息获得失败!找不到这个table的元素!");
throw new MyAutoException("["+this.getId()+"]查找table的值时出现了错误,可能的原因是这个table元素定位错误!没有找到这个元素");
}
}
}