class Registration(Page): """Objects and methods for the Register page.""" URL_PATH: str = build_login_url(path='/register') ROOT_LOCATOR: Selector = Selectors.class_name('register-container') _email_field: Selector = Selectors.name('email') _first_name_field: Selector = Selectors.name('first_name') _inline_errors: Selector = Selectors.class_name('errors') _last_name_field: Selector = Selectors.name('last_name') _password_field: Selector = Selectors.name('password') _phone_field: Selector = Selectors.name('phone') _privacy_policy_field: Selector = Selectors.name('privacy_policy_accepted') _repeat_password_field: Selector = Selectors.name('repeat_password') _submit_button: Selector = Selectors.data_id('submit-button') _username_field: Selector = Selectors.name('username') _user_exists_error: Selector = Selectors.data_id('error-message') @property def email_field(self) -> WebElement: return self.driver.find_element(*self._email_field) @property def first_name_field(self) -> WebElement: return self.driver.find_element(*self._first_name_field) @property def inline_errors(self) -> WebElements: return self.driver.find_elements(*self._inline_errors) @property def inline_error_messages(self) -> List[str]: return [error.text for error in self.inline_errors] @property def last_name_field(self) -> WebElement: return self.driver.find_element(*self._last_name_field) @property def password_field(self) -> WebElement: return self.driver.find_element(*self._password_field) @property def phone_field(self) -> WebElement: return self.driver.find_element(*self._phone_field) @property def privacy_policy_checkbox(self) -> WebElement: return self.driver.find_element(*self._privacy_policy_field) @property def repeat_password_field(self) -> WebElement: return self.driver.find_element(*self._repeat_password_field) @property def submit_button(self) -> WebElement: return self.driver.find_element(*self._submit_button) @property def username_field(self) -> WebElement: return self.driver.find_element(*self._username_field) @property def user_exists_error(self) -> WebElement: return self.driver.find_element(*self._user_exists_error) def fill_registration_form(self, user: User) -> None: """Fill out a user registration form. :param user: A user generated from a User Factory. """ self.username_field.fill(user.username) self.email_field.fill(user.email) self.first_name_field.fill(user.first_name) self.last_name_field.fill(user.last_name) self.phone_field.fill(user.phone) self.password_field.fill(user.password) self.repeat_password_field.fill(user.repeat_password) self.privacy_policy_checkbox.click()
class Login(Page): """Login methods and objects for all TransLoc applications.""" URL_PATH: str = build_login_url(path='/login') ROOT_LOCATOR: Selector = Selectors.class_name('login-container') _error_message: Selector = Selectors.data_id('error-message') _forgot_password_link: Selector = Selectors.data_id('forgot-password-link') _password_field: Selector = Selectors.name('password') _sign_up_button: Selector = Selectors.data_id('sign-up-button') _submit_button: Selector = Selectors.data_id('submit-login-button') _success_message: Selector = Selectors.data_id('success-message') _university_login_button: Selector = Selectors.data_id( 'university-login-button') _username_field: Selector = Selectors.name('username') @property def error_message(self) -> WebElement: return self.driver.find_element(*self._error_message) @property def forgot_password_link(self) -> WebElement: return self.driver.find_element(*self._forgot_password_link) @property def password_field(self) -> WebElement: return self.driver.find_element(*self._password_field) @property def sign_up_button(self) -> WebElement: return self.driver.find_element(*self._sign_up_button) @property def submit_button(self) -> WebElement: return self.driver.find_element(*self._submit_button) @property def success_message(self) -> WebElement: return self.driver.find_element(*self._success_message) @property def university_login_button(self) -> WebElement: return self.driver.find_element(*self._university_login_button) @property def username_field(self) -> WebElement: return self.driver.find_element(*self._username_field) def add_auth_token(self): """Add a captured authorization token as an environment variable.""" auth_token = json.loads(os.getenv('AUTH_TOKEN')) self.driver.add_cookie(auth_token) def capture_token(self) -> None: """Capture an authorization token.""" auth_cookie = self.driver.get_cookies()[1] if 'expiry' in auth_cookie: del auth_cookie['expiry'] json_cookie = json.dumps(auth_cookie) os.environ['AUTH_TOKEN'] = json_cookie def check_login_fail(self) -> None: """Check whether an error message is shown.""" self.driver.wait_until_visible(*self._error_message) def login(self, username: Optional[str], password: Optional[str]) -> None: """Login in to a TransLoc application. :param password: The password for login. :param username: The username for login. """ self.username_field.fill(username) self.password_field.fill(password) self.submit_button.click()