Pagefactory初始化

问题描述 投票:0回答:1

我用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处理它?

谢谢!

java selenium-webdriver pageobjects
1个回答
0
投票

因为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);
    }
    }
© www.soinside.com 2019 - 2024. All rights reserved.