PageObjects

"Page objects are a classic example of encapsulation - they hide the details of the UI structure and widgetry from other components (the tests)." (c) Martin Fowler, PageObjectarrow-up-right.

So it's all about how you encapsulate "tech details". Here are just a few examples to compare.

No Encapsulation

public class GoogleTest {

    @BeforeClass 
    public static void setup() {
        Configuration.baseUrl = "http://google.com/ncr"
    }

    @Test
    public void userCanSearch() {
        open("/");
        $(By.name("q")).val("selenide").pressEnter();
        $$(".srg .g").shouldHave(size(10));
        $$(".srg .g").get(0).shouldHave(text("Selenide: concise UI tests in Java"));
    }
}

Mid-level encapsulation

where:

Higher level encapsulation

where:

More examples

More examples and variations of this pattern can be found in the following talks:

Last updated