I have been hearing a lot about page object modelling? Why is it so important?
Can someone please outline me page object model?
I'm currently working as QE in webservices area
Or from this page
Taking it back to basics, essentially there are three functions I see a page object pattern provides:
Ability to easily instantiate pages in a consistent manner
Ability to concisely describe elements on a page, keep it DRY by avoiding repetition of element identifiers (using the underlying driver’s API)
Ability to provide higher level methods that use the elements to perform user oriented functions.
and a tutorial here
Your question hints at a couple of questions:
What Is a Page Object?
A page object is code written to model an actual page (or part of a page) in a web application. Eg. each page in your app, would have an associated page object file that provides the “services” that the actual page offers. Eg. if there’s a button on a page in your application, you would have a reference to that button in your page object. If you then write a test that clicks that button, you would access the button through the page object.
Why Use Page Objects?
Page object provide many benefits, including:
How To Use Page Objects
For example if you identify a button in three places this way:
find('button#primary_driver_stage1') ... click('button#primary_driver_stage1') ... click('button#primary_driver_stage1')
There are now three problems:
A Page Object approach solved this by giving the HTML DOM identifying elements/attributes a name, for example
Then this is used in the code, e.g.
find(primary_driver_stage1) ... click(primary_driver_stage1) ... click(primary_driver_stage1)
and when it needs to updated for example to be a div instead of a button you can just update
Store these defintions in one place and include them in the test spec and then the spec doesn't need to change when the page does.