Как я могу реализовать Webdriver / PageObjects / Pagefactory на Java таким образом, чтобы это можно было применить в целом

Вот моя попытка понимания реализации PageObjects / Pagefactory применительно к Webdriver:

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 и методов Call в них, в то время как настройка браузера вызывается только один раз за выполнение теста.

Теперь вопрос:

  1. Должен ли я объявить метод, как показано ниже, и вызвать Pagefactory?

общедоступный метод MyPage () {Вызов таких методов, как Login () и т. д. return PageFactory.initElements (driver, MDNSLoginPage.class); }

  1. Или, следует ли мне вызывать тот же PageFactory из конструктора по умолчанию

  2. Правильно ли мое понимание / реализация?


person kamal    schedule 01.10.2012    source источник


Ответы (1)


Я думаю, что следую вашему подходу №1. Я постараюсь ответить, проиллюстрировав свою реализацию, но не уверен, будет ли она полезна для ваших целей. У меня есть класс 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();

}
person StatusQuo    schedule 01.10.2012