0

这是我对应用于 Webdriver 的 PageObjects/Pagefactory 的尝试实现理解:

1. Create the following structure in eclipse

--> com.example.qa.pageobjects 
     --> LoginPage.java

Every class in this package has something like: 

@FindBy(how = How.NAME, using = "logonName")
    private WebElement logonNameField;

and the Methods, call Webelement, and call methods on them, like:

logonNameField.sendKeys("username");

Which are called from ScenrioTests.

     --> HomePage.java (i go there after i login)
     --> Page.java (abstract)

--> com.example.qa.setup
    --> Browser.java
    --> FirefoxBrowser.java (Code specific to FFox)
    --> ChromeBrowser.java (Code Specific to Chrome)

--> com.example.qa.test
    --> Scenario1234.java 
    --> Scenario2345.java 

这些场景类实例化 PageObjects,并在其中调用方法,而浏览器设置仅在每次测试运行时调用一次。

现在的问题是:

  1. 我应该声明如下方法并调用 Pagefactory 吗?

public MyPage method() { 调用 Login() 等方法 return PageFactory.initElements(driver, MDNSLoginPage.class); }

  1. 或者,我应该从默认构造函数调用相同的 PageFactory

  2. 我的理解/实施是否正确?

4

1 回答 1

0

我想我有点遵循你的第一方法。我将尝试通过说明我的实现来回答,但我不确定它是否对您的目的有用。我有一个 baseTest 类,我加载了可以在我的测试类中使用的常用方法。(例如,实例化浏览器,打开登录页面等)

abstract class TestBase {
//somewhere
protected static LoginPage goToLoginPage(){
   driver.get(loginPage);
    return  PageFactory.initElements(driver, LoginPage.class);
} 

protected static void startBrowser(Browser browser){}
   //implemntation
  }

然后,在继承抽象类的测试类中,我以下列方式使用它

@BeforeClass
public static void setup(){
  //use a common method to start browser    
  startBrowser(Browser.FIREFOX);
    }

@Test
public void canLogInToHomePage(){
//start my test like this
LoginPage loginPage =goToLoginPage();

}
于 2012-10-01T20:30:20.323 回答