Holmos.webtest.element.Table Maven / Gradle / Ivy
package Holmos.webtest.element;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import Holmos.webtest.Allocator;
import Holmos.webtest.BrowserWindow;
import Holmos.webtest.SeleniumBrowserWindow;
import Holmos.webtest.WebDriverBrowserWindow;
import Holmos.webtest.element.property.Location;
import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.SeleniumException;
/**
* @author 吴银龙(15857164387)
* */
public class Table extends Element{
public Table(String comment) {
super(comment);
}
/**获得table的第row行,col列的值
* 行号和列号都从0开始
* @param row 行号
* @param col 列号
* @return 此table指定行,指定列的值*/
public String getElementContent(int row,int col){
StringBuilder message=new StringBuilder();
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
String content=null;
if(isExist()){
message.append(this.comment+":");
if(currentWindow instanceof SeleniumBrowserWindow){
try{
content=((Selenium)currentWindow.getDriver().getEngine()).
getTable(locator.getSeleniumCurrentLocator()+"."+row+"."+col);
message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
logger.info(message);
}catch (Exception e) {
message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!找不到这个table的这个元素");
logger.error(message);
}
}else if(currentWindow instanceof WebDriverBrowserWindow){
try{
content=element.findElement(By.xpath(".//tr["+(row)+"]/td["+(col)+"]")).getText();
message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取成功!");
logger.info(message);
}catch(Exception e){
message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!找不到这个table的这个元素");
logger.error(message);
}
}
}else{
message.append(this.comment+":");
message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!找不到这个table");
logger.error(message);
}
return content;
}
/**获得此table第column列所有行的值,列号从0开始
* @param column 列号
* @return 字符窜List,column列所有行的信息*/
public List getElementsContentByColumn(int column){
StringBuilder message=new StringBuilder();
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
List contents=new ArrayList();
if(isExist()){
message.append(this.comment+":");
if(currentWindow instanceof SeleniumBrowserWindow){
try{
int rowCount=0;
while(true){
contents.add(((Selenium)currentWindow.getDriver().getEngine())
.getTable(locator.getSeleniumCurrentLocator()+"."+rowCount+"."+column));
rowCount++;
}
}catch(SeleniumException e){
}
}else if(currentWindow instanceof WebDriverBrowserWindow){
Listcells=element.findElements(By.xpath(".//td["+(column+1)+"]"));
for(WebElement cell:cells){
contents.add(cell.getText());
}
}
message.append("第"+column+"列的元素的信息获得成功!");
logger.info(message);
}else{
message.append(this.comment+":");
message.append("第"+column+"列的元素的信息获得失败!找不到该table!");
logger.error(message);
}
return contents;
}
/**获得columns中指定的若干列的所有行的值,返回的是
* 一个二维数组,获得的列的值的顺序和columns中的一致
* 如果columns.length=0那么将返回null
* @param columns 列的列表
* @return 字符窜二维List,返回的是找到的指定列的所有行信息*/
public List> getElementsContentByColumns(int[] columns){
List>contents=new ArrayList>();
System.out.println("开始获得若干列的元素内容");
for(int i=0;i
* @param row 行号
* @return 字符窜List,row列所有列的信息*/
public List getElementsContentByRow(int row){
/***多层table的时候有点问题,暂时先放,不只是这个,很多都是有问题的,多个table的时候,对于WebDriver作为引擎的时候*/
StringBuilder message=new StringBuilder();
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
List contents=new ArrayList();
if(isExist()){
message.append(this.comment+":");
if(currentWindow instanceof SeleniumBrowserWindow){
try{
int colCount=0;
while(true){
contents.add(((Selenium)currentWindow.getDriver().getEngine())
.getTable(locator.getSeleniumCurrentLocator()+"."+row+"."+colCount));
colCount++;
}
}catch(SeleniumException e){
}
}else if(currentWindow instanceof WebDriverBrowserWindow){
WebElement rowCell=element.findElement(By.xpath(".//tr["+(row+1)+"]"));
Listcells=rowCell.findElements(By.xpath(".//td"));
for(WebElement cell:cells){
contents.add(cell.getText());
}
}
message.append("第"+row+"行的元素的信息获得成功!");
logger.info(message);
}else{
message.append(this.comment+":");
message.append("第"+row+"行的元素的信息获得失败!找不到该table!");
logger.error(message);
}
return contents;
}
/**获得rows中指定的若干行的所有列的值,返回的是
* 一个二维数组,获得的行的值的顺序和rows中的一致
* 如果rows.length=0那么将返回null
* @param rows 行的列表
* @return 字符窜二维List,返回的是找到的指定行的所有行信息*/
public List> getElementsContentByRows(int[] rows){
StringBuilder message=new StringBuilder();
List>contents=new ArrayList>();
message.append("开始获得若干行的元素内容");
logger.info(message);
for(int i=0;i
* 对于找不到的,即locations里面的值不合法的不计入,位置从0开始计数
* @param locations 指定的位置列表
* @return 获得的指定位置处的值的字符窜列表*/
public List getElementsContentByLocations(Location[] locations){
StringBuilder message=new StringBuilder();
Listcontents=new ArrayList();
message.append("开始获得若干行的元素内容");
logger.info(message);
for(int i=0;i> getAllElementsContent(){
StringBuilder message=new StringBuilder();
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
List>contents=new ArrayList>();
message.append("开始获得所有元素的内容");
if(isExist()){
message.append(this.comment+":");
int rowCount=0;
if(currentWindow instanceof SeleniumBrowserWindow){
while(true){
try{
((Selenium)currentWindow.getDriver().getEngine())
.getTable(locator.getSeleniumCurrentLocator()+"."+rowCount+"."+0);
contents.add(getElementsContentByRow(rowCount));
rowCount++;
}catch (SeleniumException e) {
break;
}
}
}else if(currentWindow instanceof WebDriverBrowserWindow){
while(true){
if(element.findElements(By.xpath(".//tr["+(rowCount+1)+"]")).size()==0){
break;
}
contents.add(getElementsContentByRow(rowCount));
rowCount++;
}
}
}else{
}
return contents;
}
// /**获得table的第row行,col列的值
// * 行号和列号都从0开始
// * @param row 行号
// * @param col 列号
// * @return 此table指定行,指定列的元素信息*/
// public Element getElement(int row,int col){
// StringBuilder message=new StringBuilder();
// BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
// if(isExist()){
// if(currentWindow instanceof SeleniumBrowserWindow){
//
// }else if(currentWindow instanceof WebDriverBrowserWindow){
//
// }
// }else{
// message.append("第"+(row+1)+"行,第"+(col+1)+"列的元素获取失败!,找不到这个table");
// logger.error(message);
// }
// return null;
// }
// /**获得此table第column列所有行的值,列号从0开始
// * @param column 列号
// * @return 字符窜List,column列所有行的元素信息*/
// public List getElementsByColumn(int column){
// return null;
// }
// /**获得columns中指定的若干列的所有行的值,返回的是
// * 一个二维数组,获得的列的值的顺序和columns中的一致
// * 如果columns.length=0那么将返回null
// * @param columns 列的列表
// * @return 字符窜二维List,返回的是找到的指定列的所有行元素信息*/
// public List> getElementsByColumns(int[] columns){
// return null;
// }
// /**获得此table第row行所有列的值,行号从0开始
// * @param row 行号
// * @return 字符窜List,row列所有列的元素信息*/
// public List getElementsByRow(int row){
// return null;
// }
// /**获得rows中指定的若干行的所有列的值,返回的是
// * 一个二维List,获得的行的值的顺序和rows中的一致
// * 如果rows.length=0那么将返回null
// * @param rows 行的列表
// * @return 字符窜二维List,返回的是找到的指定行的所有行元素信息*/
// public List> getElementsByRows(int[] rows){
// return null;
// }
// /**获得指定位置处的值,以字符窜的形式返回,按照行优先的顺序返回
// * 对于找不到的,即locations里面的值不合法的不计入,位置从0开始计数
// * @param locations 指定的位置列表
// * @return 获得的指定位置处的值的元素列表*/
// public List getElementsByLocations(Location[] locations){
// return null;
// }
// /**获得此table所有行所有列的值
// * @return 获得的所有行和所有列的元素,如果table是空的,那么返回null
// * */
// public List> getAllElements(){
// return null;
// }
}