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 回だけ呼び出されます。

問題は次のとおりです。

  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 に答える