I'm a big fan of page object pattern used for developing Selenium tests and I like the whole approach it follows. However, there are some points which can be improved in this approach. Let's talk about them.
Imagine that we have profile page for authenticated user. It has navigation menu with a set of links: "Home", "Profile", "Messages". Typical page class will look like this:
Home and Messages pages are rather different page, but still have navigation menu. So they should have the same set of methods. We shouldn't duplicate code, so we need to extract these methods into a separate module.
Imagine that we have profile page for authenticated user. It has navigation menu with a set of links: "Home", "Profile", "Messages". Typical page class will look like this:
class ProfilePage
def click_home_link
@browser.find_element(:id => 'home_link').click
HomePage.new
end
def click_profile_link
@browser.find_element(:id => 'profile_link').click
ProfilePage.new
end
def click_messages_link
@browser.find_element(:id => 'message_link').click
MessagesPage.new
end
end # ProfilePage
Home and Messages pages are rather different page, but still have navigation menu. So they should have the same set of methods. We shouldn't duplicate code, so we need to extract these methods into a separate module.