So I have been using a page object (PO) approach for a while now, but not been blogging for long, so am going to mark the below as "My Page Object Mach 1", and will continue the theme as my PO's involve.
So to start with I have abstract class which we are going to call DefaultPage, this is essentially my default PO, but it started by just handling WebDriver, like so:
It has since evolved into having several methods for interactions I found myself repeating, such as populated and reading fields, and dealing with Select boxes.
Then each of my page objects inherits the DefaultPage.
The basic structure of my page objects is:
- Initiate locators.
- Wait for a specific element
- Assert that the application has taken you to the correct page, using a specific attribute of an element or could use the URL depending on your application.
Edit: I no longer agree with Assertions in PageObjects. The PageObjects job/role is to allow a test/check to interact with a page, a test/check would soon tell you there is an issue when the PO fails to serve the request. And if you are always running all your tests/checks, which you should be otherwise why bother to create them, you know soon enough if the page header isn't correct!
Which looks like:
I parameterise the timeout value, as I required to increase it for specific tests / environments, so made sense to make it default page of my approach.
I have heard people not recommend putting asserts in your page objects, however I believe that should be the rule for the methods but serves a good purpose in the constructor.
Then objects are instantiated like so:
Perhaps for another post, but I believe this is a good approach, and as mentioned above you can add common methods to the default page.
Appreciate all comments.