在UI自动化测试中,相信很多人都喜欢用所谓的PO模式,其中的P,也是page的意思,于是乎,在脚本里,或者在其它的page里,会要new很多的page对象,这样很麻烦,前面我们也讲到了注解的使用,很方便,那么我们可不可以用注解来代替这个new的过程呢?只有想不到,没有办不到的,因为springMVC是用了这个方式来IOC,当然我们也可以直接用springMVC,但这无异于用牛刀来切豆腐,还不如我们自已实现一下,顺便增加一下对注解的使用的认识,代码如下:
  1.先定义一个LoadPage的注解:
  package com.test.annotation;
  import java.lang.annotation.ElementType;
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.lang.annotation.Target;
  @Target(ElementType.TYPE)
  @Retention(RetentionPolicy.RUNTIME)
  public @interface LoadPage {
  String value();
  }
  2.再来实现一下这个注解:
package com.test.annotation;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.WebDriver;
public class LoadAllPage {
public final String basePath = "com.test";
private final String binPath = "bin";
private List<String> allClass = new ArrayList<String>();
private WebDriver driver;
public void setDriver(WebDriver driver) {
this.driver = driver;
}
public void loadAllPage(){
this.listAllFiles(binPath+File.separator+basePath.replace(".","/"));
this.getPageInstance();
}
private void listAllFiles(String path){
path = path.replace("\", "/");
File file = new File(path);
if(file.isFile() && file.getName().endsWith(".class")){
String filePath = file.getPath().replace("\", "/");
int startIndex = 4;
int endIndex = filePath.lastIndexOf(".class");
allClass.add(filePath.substring(startIndex, endIndex).replace("/", "."));
}else if(file.isDirectory()){
File[] files = file.listFiles();
for (File f : files) {
this.listAllFiles(f.getPath());
}
}
}
private void getPageInstance(){
for (String clazz : allClass) {
try {
Class<?> c = Class.forName(clazz);
if(c.isAnnotationPresent(LoadPage.class)){
LoadPage lp = c.getAnnotation(LoadPage.class);
Constructor<?> cons = c.getConstructor(WebDriver.class);
InitialManger.allInstance.put(lp.value(), cons.newInstance(driver));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
LoadAllPage lap = new LoadAllPage();
lap.loadAllPage();
}
}