holmos.webtest.struct.Page Maven / Gradle / Ivy
package holmos.webtest.struct;
import holmos.webtest.Allocator;
import holmos.webtest.BrowserWindow;
import holmos.webtest.SeleniumBrowserWindow;
import holmos.webtest.WebDriverBrowserWindow;
import holmos.webtest.basetools.HolmosBaseTools;
import holmos.webtest.constvalue.ConstValue;
import holmos.webtest.element.Element;
import holmos.webtest.element.locator.Locator;
import holmos.webtest.element.locator.LocatorChain;
import holmos.webtest.element.locator.LocatorValue;
import holmos.webtest.log.MyLogger;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.thoughtworks.selenium.Selenium;
/**页面模型,Holmos框架操作页面的时候,对页面进行结构化结果
* 将页面整体作为一个Page,里面包含这四种结构
* (1)Frame 页面的Frame结构和iframe结构
* (2)Collection 一种集合结构,在页面上,集合里面的每一个元素里面的结构完全相同或者非常类似
* (3)SubPage 一种页面元素的组织,将一部分元素组织成一个SubPage,方便管理和使用
* (4)Element 页面元素实体,映射页面的一个元素
*
* 其中也包括了对页面的常规操作
* @author 吴银龙(15857164387)
* */
public class Page implements LocatorValue{
/**这个页面的url*/
protected String url;
private boolean selected;//先定在这,接下来再想确切的解决方案
/**这个页面的注释说明*/
protected String comment;
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
/**这个页面的所有元素的list,在清空页面缓存的时候用到*/
protected List elements=new ArrayList();
/**这个页面的次级页面,在清空页面缓存的时候能用到*/
protected List subpages=new ArrayList();
/**这个页面中的嵌套的iframe和frameset,在清空页面缓存的时候用到*/
protected List frames=new ArrayList();
private static MyLogger logger=MyLogger.getLogger(Page.class);
/**这个页面的集合Collections*/
protected List collections=new ArrayList();
public Page(){
HolmosBaseTools.configLogProperties();
this.selected=true;
}
/**收集页面元素,这是一个简单的观察者模式的应用
* 以此来获取页面元素的信息,在重新写locator
* 和comment的时候用得到
*/
protected void init(){
Field[] fields=this.getClass().getFields();
try{
for(Field field : fields){
if(field.getModifiers()==ConstValue.nestedFatherObjectModifier){
continue;
}Object o=field.get(this);
if(o instanceof Element){
HolmosBaseTools.insertElementName((Element)o, field.getName());
((Element) o).getInfoChain().addNode(this);
((Element) o).setFullName(getClass().getName().substring(getClass().getName().lastIndexOf('.')+1)+field.getName());
elements.add((Element)o);
}else if(o instanceof SubPage){
HolmosBaseTools.insertSubPageName((SubPage)o, field.getName());
((SubPage) o).getInfoChain().addNode(this);
((SubPage) o).setFullName(getClass().getName().substring(getClass().getName().lastIndexOf('.')+1)+field.getName());
this.subpages.add((SubPage)o);
((SubPage)o).init();
}else if(o instanceof Collection){
HolmosBaseTools.insertCollectionName((Collection)o, field.getName());
((Collection)o).getInfoChain().addNode(this);
((Collection)o).setFullName(getClass().getName().substring(getClass().getName().lastIndexOf('.')+1)+field.getName());
this.collections.add((Collection)o);
((Collection)o).init();
}else if(o instanceof Frame){
HolmosBaseTools.insertFrameName((Frame)o, field.getName());
((Frame)o).getInfoChain().addNode(this);
((Frame)o).setFullName(getClass().getName().substring(getClass().getName().lastIndexOf('.')+1)+field.getName());
this.frames.add((Frame)o);
((Frame)o).setParent(this);
((Frame)o).init();
}
}
}catch(IllegalAccessException e){
e.printStackTrace();
}catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
/**获得页面html源码里面body部分的代码
* 要求当前页面必须是活动页面,这个方法只能
* 获得活动页面body部分的源码
* @return 活动页面body部分的源码*/
public String getBodyText(){
logger.info("获得"+this.comment+"页面body源码");
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
return ((Selenium)currentWindow.getDriver().getEngine()).getBodyText();
}else if(currentWindow instanceof WebDriverBrowserWindow){
return ((WebDriver)currentWindow.getDriver().getEngine()).getPageSource();
}return null;
}
/**获得页面html源码里面body部分的代码
* 要求当前页面必须是活动页面,这个方法只能
* 获得活动页面的源码
* @return 活动页面的源码*/
public String getHtmlText(){
logger.info("获得"+this.comment+"页面body源码");
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
return ((Selenium)currentWindow.getDriver().getEngine()).getHtmlSource();
}else if(currentWindow instanceof WebDriverBrowserWindow){
return ((WebDriver)currentWindow.getDriver().getEngine()).getPageSource();
}return null;
}
/**获得活动页面的title
* @return 活动页面的title*/
public String getTitle(){
logger.info("获得"+this.comment+"页面body源码");
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
return ((Selenium)currentWindow.getDriver().getEngine()).getTitle();
}else if(currentWindow instanceof WebDriverBrowserWindow){
return ((WebDriver)currentWindow.getDriver().getEngine()).getTitle();
}return null;
}
/**获得该页面所有的cookies*/
public String getAllCookies(){
logger.info("获得"+this.comment+"所有的cookies");
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
return ((Selenium)currentWindow.getDriver().getEngine()).getCookie();
}else if(currentWindow instanceof WebDriverBrowserWindow){
Setcookies=((WebDriver)currentWindow.getDriver().getEngine()).manage().getCookies();
Iterator cookie=cookies.iterator();
String cookieStr="";
while(cookie.hasNext()){
cookieStr=cookieStr+"|"+cookie.next().getValue();
}
return cookieStr;
}
return null;
}
/**获得该页面下符合该名称的cookie*/
public String getCookieByName(String name){
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
return ((Selenium)currentWindow.getDriver().getEngine()).getCookieByName(name);
}else if(currentWindow instanceof WebDriverBrowserWindow){
return ((WebDriver)currentWindow.getDriver().
getEngine()).manage().getCookieNamed(name).getValue();
}
return null;
}
/**删除该指定目录下的指定名字的cookie的所有的cookie*/
public void deleteCookie(String name,String path){
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
((Selenium)currentWindow.getDriver().getEngine()).deleteCookie(name, path);
}else if(currentWindow instanceof WebDriverBrowserWindow){
((WebDriver)currentWindow.getDriver().
getEngine()).manage().deleteCookieNamed(name);
}
}
/**删除所有的cookie*/
public void deleteAllCookie(){
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
if(currentWindow instanceof SeleniumBrowserWindow){
((Selenium)currentWindow.getDriver().getEngine()).deleteAllVisibleCookies();
}else if(currentWindow instanceof WebDriverBrowserWindow){
((WebDriver)currentWindow.getDriver().
getEngine()).manage().deleteAllCookies();
}
}
public Locator getLocator() {
// TODO Auto-generated method stub
return null;
}
public WebElement getElement() {
// TODO Auto-generated method stub
return null;
}
public void setElement(WebElement element) {
// TODO Auto-generated method stub
}
public String getLocatorCurrent() {
// TODO Auto-generated method stub
return null;
}
public void setLocatorCurrent(String locatorCurrent) {
// TODO Auto-generated method stub
}
@Override
public boolean isExist() {
// TODO Auto-generated method stub
return false;
}
@Override
public LocatorChain getInfoChain() {
// TODO Auto-generated method stub
return null;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
@Override
public void setWholeComment(String currentComment) {
// TODO Auto-generated method stub
}
}