Validating sign up pages using Selenium Python
This is not how the Page Object pattern should be implemented:


page object needs to have abstractions over the visual elements on a page
you should not be asserting things in the page object methods


There are, of course, many different Python+Selenium Page Object pattern implementations and I am not completely sure, which one is the One, here are some(1) of(2) them(3).

We can, at least, start with defining locators and then reusing them inside the methods, something along these lines:

class SignupPage(Page):
    cname_input = (By.ID, "cname")

    username_input = (By.ID, "cf_2727675")
    password_input = (By.ID, "cf_2697953")  # assuming this is password

    submit_button = (By.ID, "sbbut")

    def __init__(self, driver):
        super(SignupPage, self).__init__(driver)

    def submit(self):
        self.driver.find_element(*self.submit_button).click()

    def sign_up(self):
        self.driver.get("https://abc.com/s_csignup.jsp?token=XVtQHUUGYFFaRhNaXxJaQVBRZEl2EnBo")

        cname = self.driver.find_element(*self.cname_input)
        cname.send_keys("QA EXTERNAL")

        username = self.driver.find_element(*self.username_input)
        username.clear()
        username.send_keys("Test")

        password = self.driver.find_element(*self.password_input)
        password.clear()
        password.send_keys("Test")

        self.submit()


Or, even better, we can create a class for every Page Element, like suggested in the documentation.

Note that the assertion itself should be moved to the test case method, and, hence, your Page class should not be derived from the unittest.TestCase (or have the assertEqual method).



Also, here are some notes about the code style of the code in the question:


if your BaseTestCase class inherits unittest.TestCase (it should), there is no need for multiple inheritance. And, you would not need to override the setUp and tearDown methods:

class BaseTestCase(unittest.TestCase):
    # ...

class MatchingContactCompany(BaseTestCase):
    def test_matching_company(self):
        # ...

according to PEP8, a class name should start with a capital letter and be in camel case - call it SignupPage instead of signupPage
the test_* methods should be named according to the PEP8 method name convention - it should be test_matching_company instead of test_MatchingCompany
same note about your page object methods - use a lower case and separate words with underscore