使用 PageFactory 初始化 PageObjects 的不同方法
Different ways of initializing PageObjects using PageFactory
我正在尝试在页面对象模型中构建一个 Cucumber Java 框架。我已经创建了基本框架并且它工作正常,但对如何初始化页面感到困惑。我注意到在大多数教程中,他们已经在构造函数本身中初始化了页面。
示例:
public LoginPage(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(driver, this);
}
同样在所有页面 类 中,他们在构造函数本身中添加了 initElements
方法。
但是我注意到有些站点不是在构造函数中初始化所有页面,而是在构造函数中初始化第一页,而对于所有其他页面,它们在某些方法的 return 语句中初始化(在最后在当前页面)。如果方法 "login" 是 LoginPage.java
中的最后一个方法,那么它会将 HomePage
初始化为 return 类型。
示例:
public HomePage login(String un, String pw)
{
...
...
return PageFactory. initElements(driver, HomePage.class);
}
我的疑惑:哪一种是正确的实施方式和高效的?
没有"right way"。 PageFactory.initElements(driver, HomePage.class)
创建给定 class (HomePage
) 的新实例,然后调用 PageFactory.initElements(driver, instance);
PageFactory source code
public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
T page = instantiatePage(driver, pageClassToProxy);
initElements(driver, page);
return page;
}
// translate to
HomePage homePage = new HomePage();
PageFactory.initElements(driver, homePage);
return homePage;
这与从 PO 构造函数调用 PageFactory.initElements(driver, this);
相同。
主要区别实际上是方法 return 下一个 PO,它允许使用方法链接。
使用方法链接:
new LoginPage(driver)
.login()
.clickOnButton();
并且没有方法链接:
LoginPage loginPage = new LoginPage(driver);
loginPage.login();
HomePage homePage = new HomePage(driver);
homePage.clickOnButton();
*您可以在构造函数中使用 PageFactory.initElements
并简单地 return new HomePage();
来使用方法链接。
我正在尝试在页面对象模型中构建一个 Cucumber Java 框架。我已经创建了基本框架并且它工作正常,但对如何初始化页面感到困惑。我注意到在大多数教程中,他们已经在构造函数本身中初始化了页面。
示例:
public LoginPage(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(driver, this);
}
同样在所有页面 类 中,他们在构造函数本身中添加了 initElements
方法。
但是我注意到有些站点不是在构造函数中初始化所有页面,而是在构造函数中初始化第一页,而对于所有其他页面,它们在某些方法的 return 语句中初始化(在最后在当前页面)。如果方法 "login" 是 LoginPage.java
中的最后一个方法,那么它会将 HomePage
初始化为 return 类型。
示例:
public HomePage login(String un, String pw)
{
...
...
return PageFactory. initElements(driver, HomePage.class);
}
我的疑惑:哪一种是正确的实施方式和高效的?
没有"right way"。 PageFactory.initElements(driver, HomePage.class)
创建给定 class (HomePage
) 的新实例,然后调用 PageFactory.initElements(driver, instance);
PageFactory source code
public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
T page = instantiatePage(driver, pageClassToProxy);
initElements(driver, page);
return page;
}
// translate to
HomePage homePage = new HomePage();
PageFactory.initElements(driver, homePage);
return homePage;
这与从 PO 构造函数调用 PageFactory.initElements(driver, this);
相同。
主要区别实际上是方法 return 下一个 PO,它允许使用方法链接。
使用方法链接:
new LoginPage(driver)
.login()
.clickOnButton();
并且没有方法链接:
LoginPage loginPage = new LoginPage(driver);
loginPage.login();
HomePage homePage = new HomePage(driver);
homePage.clickOnButton();
*您可以在构造函数中使用 PageFactory.initElements
并简单地 return new HomePage();
来使用方法链接。