java - 使用 PageFactory 初始化 PageObject 的不同方法

标签 java selenium selenium-webdriver page-factory

我正在尝试在页面对象模型中构建 Cucumber Java 框架。我已经创建了基本框架,它工作正常,但对如何初始化页面感到困惑。我注意到,在大多数教程中,他们都在构造函数本身中初始化了页面。

示例:

public LoginPage(WebDriver driver)
{
   this.driver = driver;
   PageFactory.initElements(driver, this);
}

同样,在所有页面类中,它们在构造函数本身内部添加了 initElements 方法。

但在一些网站上,我注意到,他们不是在构造函数中初始化所有页面,而是在构造函数中初始化第一页,并在某些方法的返回语句中初始化所有其他页面(最后在当前页面中执行)。如果方法“login”是 LoginPage.java 中的最后一个方法,那么它将初始化 HomePage 作为返回类型。

示例:

public HomePage login(String un, String pw)
{
   ...
   ...
   return PageFactory. initElements(driver, HomePage.class); 
}

我的疑问:哪一种是正确且高效的实现方式?

最佳答案

没有“正确的方法”。 PageFactory.initElements(driver, HomePage.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); 相同。

主要区别实际上在于该方法返回下一个 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(); 来使用方法链。

关于java - 使用 PageFactory 初始化 PageObject 的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766345/

相关文章:

java - 使用 JGraphX 删除图中的重复顶点

java - 使用 eclipse 在 selenium 中自动化期间,网页会自动重新加载几次

html - 将 Selenium 指向某些输入,无法弄清楚xpath,css选择器等

python - 使用 selenium Web 驱动器 python 单击 href=javascript 时出现问题

java - 为什么这两个数据库会出现死锁?

java - 10,100,200,300...测试时不工作

python - Chrome headless 忽略系统代理

selenium - 尝试通过网络路径访问 chromedriver 时,CreatePlatformSocket() 返回错误 : An invalid argument was supplied. (0x2726)

日志中的 selenium webdriver ruby​​ 警告消息

python - 等到加载器消失 python selenium