我用POM和Page Factory方法实现了一个框架。我有一个baseTest类,有很多init,例如:(每个其他测试类扩展它)
Registration regPage = PageFactory.initelements(driver,Registration.class);
Login loginPage = PageFactory.initelements(driver,login.class);
Details detailsPage = PageFactory.initelements(driver,details.class);
.. (more than 10)
它工作正常,但我想找到更优雅/结构化的方式来处理它。
我尝试将它构建到构造函数中:
public Registeration(WebDriver driver) {
super(driver);
PageFactory.initelements(driver,Registration.class(or can be this));
}
在这种情况下,我得到了一个巨大的堆内存错误,但它会非常好,因为我可以使用一个断言来验证构造函数中的每个pageObject使用标题或页面上的任何元素,对吧?
我如何构建我的inits以及如何使用构造函数使用PageFactory处理它?
谢谢!
因为initElements陷入了无限循环。 PageFactory的InitElement函数首先查找具有webdriver参数的页面构造函数。它类似于你的跑步者的页面创建调用 - > initElements(第二行) - >由initElements调用的页面构造函数,这一直在盘旋。因此,您无法使用pagefactory在页面构造函数中启动页面类。你可以构建这样的东西
public class MyTest{
@Test
public void test(){
TestFactory.invokeBrowser();
MyPage page = TestFactory.getPage(MyPage.class);
}
}
//TestFactory class
public class TestFactory{
private static WebDriver driver;
public static void invokeBrowser(){
WebDriver driver = new ChromeDriver();
//invokes the browser
this.driver = driver;
}
public static <T> T getPage(Class<T> page){
return PageFactory.initElements(driver,page);
}
}