Java 使用PageFactory初始化PageObjects的不同方法

Java 使用PageFactory初始化PageObjects的不同方法,java,selenium,selenium-webdriver,page-factory,Java,Selenium,Selenium Webdriver,Page Factory,我试图在页面对象模型中构建一个Cucumber Java框架。我已经创建了基本框架,它运行良好,但对如何初始化页面感到困惑。我注意到,在大多数教程中,它们都在构造函数中初始化了页面 例如: public LoginPage(WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); } 同样,在所有页面类中,它们在构造函数本身中添加了initElements方法 但我注意到有些站

我试图在页面对象模型中构建一个Cucumber Java框架。我已经创建了基本框架,它运行良好,但对如何初始化页面感到困惑。我注意到,在大多数教程中,它们都在构造函数中初始化了页面

例如:

public LoginPage(WebDriver driver)
{
   this.driver = driver;
   PageFactory.initElements(driver, this);
}
同样,在所有页面类中,它们在构造函数本身中添加了initElements方法

但我注意到有些站点并没有初始化构造函数中的所有页面,而是在构造函数中初始化的第一个页面,以及在当前页面中最后执行的某个方法的返回语句中初始化的所有其他页面。如果方法login是LoginPage.java中的最后一个方法,那么它会将主页初始化为返回类型

例如:

public HomePage login(String un, String pw)
{
   ...
   ...
   return PageFactory. initElements(driver, HomePage.class); 
}
我的疑问是:哪种方法是正确的实施方法和有效的方法?

没有正确的方法。PageFactory.initElementsdriver,HomePage.class创建给定类HomePage的新实例,然后调用PageFactory.initElementsdriver,instance

没有方法链接:

new LoginPage(driver)
    .login()
    .clickOnButton();
LoginPage loginPage = new LoginPage(driver);
loginPage.login();

HomePage homePage = new HomePage(driver);
homePage.clickOnButton();
*您可以在构造函数中使用PageFactory.initElements,只需返回新主页;使用方法链接

LoginPage loginPage = new LoginPage(driver);
loginPage.login();

HomePage homePage = new HomePage(driver);
homePage.clickOnButton();