Skip to content
Snippets Groups Projects
account_manager.py 2.99 KiB
Newer Older
#!/usr/bin/env python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from base import Base

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait


class AccountManager(Base):

    _emails_locator = (By.CSS_SELECTOR, '#emailList .email')
    _edit_password_button_locator = (By.CSS_SELECTOR, '#edit_password button.edit')
    _old_password_field_locator = (By.ID, 'old_password')
    _new_password_field_locator = (By.ID, 'new_password')
    _change_password_done_locator = (By.ID, 'changePassword')
    _sign_in_locator = (By.CSS_SELECTOR, 'a.signIn')
    _sign_out_locator = (By.CSS_SELECTOR, 'a.signOut')

    def __init__(self, selenium, timeout):
        Base.__init__(self, selenium, timeout)

        WebDriverWait(self.selenium, self.timeout).until(
            lambda s: s.find_element(*self._emails_locator).is_displayed())

    @property
    def signed_in(self):
        return not self.selenium.find_element(By.CSS_SELECTOR, 'body.not_authenticated')

    @property
    def emails(self):
        return [element.text for element in self.selenium.find_elements(*self._emails_locator)]

    def click_edit_password(self):
        """Click edit password to show the new/old password fields"""
        self.selenium.find_element(*self._edit_password_button_locator).click()
        WebDriverWait(self.selenium, self.timeout).until(
            lambda s: s.find_element(*self._old_password_field_locator).is_displayed())

    @property
    def old_password(self):
        """Get the value of the old password field."""
        return self.selenium.find_element(*self._old_password_field_locator).get_attribute('value')

    @old_password.setter
    def old_password(self, value):
        """Set the value of the old password field."""
        password = self.selenium.find_element(*self._old_password_field_locator)
        password.clear()
        password.send_keys(value)

    @property
    def new_password(self):
        """Get the value of the new password field."""
        return self.selenium.find_element(*self._new_password_field_locator).get_attribute('value')

    @new_password.setter
    def new_password(self, value):
        """Set the value of the new password field."""
        password = self.selenium.find_element(*self._new_password_field_locator)
        password.clear()
        password.send_keys(value)

    def click_password_done(self):
        """Click password done to save the new password."""
        self.selenium.find_element(*self._change_password_done_locator).click()
        WebDriverWait(self.selenium, self.timeout).until(
            lambda s: s.find_element(*self._edit_password_button_locator).is_displayed())

    def click_sign_out(self):
        self.selenium.find_element(*self._sign_out_locator).click()
        WebDriverWait(self.selenium, self.timeout).until(
            lambda s: not self.signed_in)