This is a tricky one. I really don't like instantiating page objects in a test when they are the result of a user action. In this case the `UserProfilePage` is really being returned as a result of the `home_page.login` action. The problem is that we also try to keep conditional logic out of page objects, so we'd need a way to deal with the fact that the `login` method could return different pages in different scenarios. I would probably deal with this by having an expectation passed to the `login` method which would let it know which page was expected to be returned. That would allow for the actual logic to remain in the test (i.e., which page is expected to be returned) but would still allow the login method to return the appropriate page object.

What do you think, @bitgeeky?