Showing posts with label page factory in Selenium. Show all posts
Showing posts with label page factory in Selenium. Show all posts

Tuesday, 24 November 2015

Use of page objects page factory in Selenium

PageObjects
The code of automated test cases should be easy to understand and not too complex. If a test fails, we want to know why and this as soon as possible. To allow this exists PageObjects. PageObjects are classes that contains WebElements and every actions associated with those.
A PageObject looks like this:
class HomePage {

    WebDriver driver;

    public HomePage(driver) {
        this.driver = driver;
    }

    // Find a single element
    @FindBy(id="home-menu-entry")
    WebElement homeMenuEntry;

    public void clickHomeMenuEntry() {
        homeMenuEntry.click();
    }

    // Find several elements
    @FindBy(className="menu-entry")
    List<WebElement> menuEntries;

   // More actions and elements
}
Usage of PageFactory and PageObject
class TestSomething {

    public void testMethod() {

        // Initial driver.

        // Use PageFactory to init elements.
        HomePage hp = PageFactory.initElements(driver, HomePage.class);

        // Use PageObject to execute action.
        hp.clickHomeMenuEntry();

        // Assertions or more actions.

    }

}
You also can put the PageFactory.initElements(); into the constructor and create just an HomePage object instead of calling the PageFactory method.
Important: If you call initElements() all elements will be initialized, not later if you use them.
How to organize this?
I do the following: Each page has a PageObject, that represent these. But some components of a page are present on many pages. For this case I create for each component additional classes. Example:
  • Header.class
  • Footer.class
  • HomePage.class
  • ContactPage.class
Useful Links