这个类的目的是为了简化page类的实例化,只需要定义public page成员变量 然后再 启动driver后 通过反射实例化page 后面可以直接点出page实例
package crazy.seleiumTools; import java.lang.reflect.Field; import org.openqa.selenium.WebDriver; import crazy.tools.Dbtool; 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; public class PageF extends PageFactory{ public MainMenuPage mainMenuPage; public LoginPage loginpage; public PageF(WebDriver driver, Dbtool dbtool) { super(driver, dbtool); } }
最后实例化一次PageF 就可以直接点出自己的page了