页面对象应该在哪里实例化?

时间:2017-05-01 22:03:32

标签: java selenium pageobjects

我想知道我应该在哪里实例化我的Page对象? 这是我的项目层次结构:

Pages:包含带有构造函数的所有页面对象,例如

public LoginPage extends BasePage
 {
   super(driver);
   PageFactory.initElements(driver, this);
}

我的BasePage包含所有常用方法,例如表处理,从webtable收集数据等。

我有一个baseTest,它包含所有的Page Objects实例,我的测试扩展了这个类。

LoginPage loginPage = new LoginPage(driver);

我有辅助(非静态)类以及导航,数据库连接,自定义等待等。

任何最佳做法? Basetest是实例化它们的适当位置吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我在测试代码中实例化页面对象,但不是场景所需的基类。如,

@Test(dataProvider = PROVIDER)
public void testLogin(WebDriver driver, Info info) {
  Login login = new Login(driver);
  assertTrue(login.isDisplayed());
  login.enterCredentials(info.getUser(), info.getPw());
  Welcome welcome = new Welcome(driver);
  assertTrue(welcome.isDisplayed());
}

这只是使用页面对象的一种方法。

小心不要写太多"帮助"类,或继承层次结构太深。

答案 1 :(得分:0)

我是按照下面给出的方式做的。我不确定它有多好。评论和反馈欢迎。

a。我使用的AbstractPage类包含实例化页面对象,还包含所有对象级别的包装器方法,如clickButton(),sendKeys()等。页面对象实例化通过构造函数< / p>

public AbstractPage(WebDriver driverWeb) {
  this.driverWeb = driverWeb;
  PageFactory.initElements(driverWeb, this);
}

b。然后我的所有页面类都扩展了这个AbstractPage -

public LoginCanvas(WebDriver driverWeb) {
  super(driverWeb);
}

c。然后是一个运行我所有测试用例的类。但我使用黄瓜,所以这个基类只运行黄瓜情景。