Domain Based Testing: Usually carried out based on two concepts - domain analysis and domain modelling. Its intent is to focus on test rather than the action of the test.
It wraps browser object into page object that provides API that returns the Html element object based on what you can do at the current page.
login_page = LoginPage.new(@browser)
It does require designing, implementing page, most common actions, verifications on page and Html elements. But it does pay off. With shared page classes, each tests only need to write code that is specific about that test case. This makes it easy to understand and maintain. Also, it provides an ease to find the code and change it when the element id or name changes.