示例#1
0
class Login(FormBase):
    def __init__(self, owner, locatordict={}):
        super(Login,self).__init__(owner,locatordict)

        # load hub's classes
        Login_Locators = self.load_class('Login_Locators')

        # update this object's locator
        self.locators.update(Login_Locators.locators)

        # update the locators with those from the owner
        self.update_locators_from_owner()

        # setup page object's components
        self.username  = Text(self,{'base':'username'})
        self.password  = Text(self,{'base':'password'})
        self.remember  = Checkbox(self,{'base':'remember'})
        self.remind    = Link(self,{'base':'remind'})
        self.reset     = Link(self,{'base':'reset'})
        self.register  = Link(self,{'base':'register'})

        self.fields += ['username','password','remember']

        # update the component's locators with this objects overrides
        self._updateLocators()


    def login_as(self,username,password,remember=False):
        """login to the website using the provided credentials"""

        self.logger.debug("browser logging in as user \"%s\"" % (username))
        data = {
            'username'  : username,
            'password'  : password,
        }

        # handle login forms that don't have remember links
        # like purduehubu
        if self.remember.is_present():
            data['remember'] = remember

        self.submit_form(data)

        # we use the presence of the username and password fields
        # as a hint that are still logging in. check the password
        # field first because whatever page we land on after login
        # probably won't have a password field, but if it does
        # we then check for the username field. different hubs
        # land on different pages, and these pages may use the same
        # locator as the username or password field. hopefully the
        # probability of the landing page having both is low.
        # another solution is to just let the login_as function perform
        # the login, and let another function go to the myaccount
        # or dashboard page and check for the logout link.
        # we user the username and password fields because some hubs
        # seem to hide the logout link (manufacturinghub)
        try:
            message = 'while verifying login: password field still present'
            self.password.wait_until_not_present(message)
        except TimeoutException:
            message = 'while verifying login: username and' \
                    + ' password fields still present'
            self.username.wait_until_not_present(message)
示例#2
0
class Login2(FormBase):
    """
    login page found on nanohub.org where the user must choose their login
    method before filling out the login form. This object works for local
    HUB login.
    """

    def __init__(self, owner, locatordict={}):
        super(Login2,self).__init__(owner,locatordict)

        # load hub's classes
        Login_Locators = self.load_class('Login_Locators')

        # update this object's locator
        self.locators.update(Login_Locators.locators)

        # update the locators with those from the owner
        self.update_locators_from_owner()

        # setup page object's components
        self.change_account = Link(self,{'base':'change_account'})
        self.hub_signin = Link(self,{'base':'hub_signin'})
        self.username  = Text(self,{'base':'username'})
        self.password  = Text(self,{'base':'password'})
        self.remember  = Checkbox(self,{'base':'remember'})
        self.remind    = Link(self,{'base':'remind'})
        self.reset     = Link(self,{'base':'reset'})
        self.register  = Link(self,{'base':'register'})

        self.fields += ['username','password','remember']

        # update the component's locators with this objects overrides
        self._updateLocators()


    def login_as(self,username,password,remember=False):
        """login to the website using the provided credentials"""

        self.logger.debug("browser logging in as user \"%s\"" % (username))
        data = {
            'username'  : username,
            'password'  : password,
        }

        # handle login forms that don't have remember links
        # like purduehubu
        if self.remember.is_present():
            data['remember'] = remember


        # reset the login user if necessary
        # if a user has previously logged in,
        # their username/email is hard coded in the form.
        # this clicks the "sign in with a different account" link
        if self.change_account.is_displayed():
            self.change_account.click()
            message = 'while changing hub account'
            self.change_account.wait_until_invisible(message)

        # enable the hidden hub login form
        if self.hub_signin.is_displayed():
            self.hub_signin.click()
            message = 'while choosing local hub login'
            self.hub_signin.wait_until_invisible(message)

        # populate the hub login form
        self.submit_form(data)

        # we use the presence of the username and password fields
        # as a hint that are still logging in. check the password
        # field first because whatever page we land on after login
        # probably won't have a password field, but if it does
        # we then check for the username field. different hubs
        # land on different pages, and these pages may use the same
        # locator as the username or password field. hopefully the
        # probability of the landing page having both is low.
        # another solution is to just let the login_as function perform
        # the login, and let another function go to the myaccount
        # or dashboard page and check for the logout link.
        # we user the username and password fields because some hubs
        # seem to hide the logout link (manufacturinghub)
        try:
            message = 'while verifying login: password field still present'
            self.password.wait_until_not_present(message)
        except TimeoutException:
            message = 'while verifying login: username and' \
                    + ' password fields still present'
            self.username.wait_until_not_present(message)