Selenium PageFactoryInit - 良好实践。返回新页面的好方法是什么?

时间:2016-12-20 07:08:02

标签: java selenium

public HomePage LoginAs(String user,String password){
        userName.sendKeys(user);
        psswd.sendKeys(password);
        signIn_btn.click();
        return PageFactory.initElements(driver, HomePage.class);
    }
   // return PageFactory.initElements(driver, HomePage.class);Or 
  // return new HOmePage(driver)

创建一个HomePage类的新对象,并在//构造函数中初始化,如下所示。

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

什么是良好的标准方法?它们两者都会相同吗?

2 个答案:

答案 0 :(得分:0)

两者之间差别不大。

在我看来,后者更具可读性,因为return new HomePage();是不言自明的。然而,这种方法的问题是当你使用基类时:

public abstract class Page {
    private WebDriver driver;

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

你的HomePage扩展了它,当你打电话给new HomePage();时,你将进入无限循环。所以我个人坚持使用return PageFactory.initElements(driver, HomePage.class);

答案 1 :(得分:0)

我将使用第二个选项,因为它更符合逻辑且更易读,但我还建议将其转换为

return new HomePage();

因为它更具可读性,你可以使用静态类为驱动程序执行此操作,或者您可以找到任何其他方式使您能够摆脱驱动程序传递,测试人员应该能够编写测试,即使他对硒一无所知 我建议像:

public static class Browser
{
  public static IWebdriver Driver = new whateverBrowser();
}

public class BasePage
{
 public BasePage()
 {
  PageFactory.InitElements(Browser.Driver,this);
 }
}
public class HomePage:BasePage
{

}