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
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
Read this ( scroll down to the page objects section though the whole page us good ) and this for some background
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
I have an example of the page object pattern I use in Sahi, written in Javascript on my blog. It walks through the included, working source code, which might help solidify the concept.
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
primary_driver_stage1='button#primary_driver_stage1'
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
primary_driver_stage1='div#primary_driver_stage1'
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.