这个类的目的是为了简化 page 类的实例化,只需要定义 public page 成员变量 然后再 启动 driver 后 通过反射实例化 page 后面可以直接点出 page 实例
package crazy.seleiumTools;
import java.lang.reflect.Field;
import org.openqa.selenium.WebDriver;
import crazy.tools.Dbtool;
/**
* @author xian_crazy QQ:330126160
* @version 2014年12月5日 下午1:43:29
* @see
*/
public class PageFactory {
private WebDriver driver;
private Dbtool dbtool;
public PageFactory(WebDriver driver, Dbtool dbtool) {
this.dbtool = dbtool;
this.driver = driver;
this.pageFactory();
}
public void pageFactory() {
/**
* 通过反射自动循环实例化所有public 页面
*/
Field[] f = this.getClass().getFields();
for (int i = 0; i < f.length; i++) {
try {
f[i].set(
this,
Class.forName(f[i].getType().getName())
.getConstructor(WebDriver.class, Dbtool.class)
.newInstance(driver, dbtool));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
具体项目中继承改类
import org.openqa.selenium.WebDriver;
import yly.web.Page.LoginPage;
import yly.web.Page.MainMenuPage;
import crazy.seleiumTools.PageFactory;
import crazy.tools.Dbtool;
/**
* @author xian_crazy QQ:330126160
* @version 2014年11月13日 上午9:19:46
* @see
*/
public class PageF extends PageFactory{
public MainMenuPage mainMenuPage;
public LoginPage loginpage;
public PageF(WebDriver driver, Dbtool dbtool) {
super(driver, dbtool);
}
}
最后实例化一次 PageF 就可以直接点出自己的 page 了