def get_transaction_modal_details(self): """ Return details of displayed transaction in modal Data is returned as a 'Transaction' object """ transaction_modal_description = BaseElement(self.driver, locators.TRANSACTION_MODAL_DESCRIPTION) transaction_modal_amount = BaseElement(self.driver, locators.TRANSACTION_MODAL_AMOUNT) transaction_modal_date = BaseElement(self.driver, locators.TRANSACTION_MODAL_DATE) transaction_modal_details = \ {'description': transaction_modal_description.get_text(), 'amount': utils.remove_whitespace_from_string(transaction_modal_amount.get_text()), 'date': transaction_modal_date.get_text()} return transaction_modal_details
def get_error_message_status(self): """ Return Login error message """ used_email_partial_text = "already created" invalid_credentials_partial_text = "don’t recognize the email/password" locked_user_partial_text = "currently locked" error_message = BaseElement(self.driver, locators.ERROR_MESSAGE) if used_email_partial_text in error_message.get_text(): return LoginStatus.EMAIL_ALREADY_EXITS elif invalid_credentials_partial_text in error_message.get_text(): return LoginStatus.INVALID_CREDENTIALS elif locked_user_partial_text in error_message.get_text(): return LoginStatus.LOCKED_USER else: return LoginStatus.UNKNOWN_PROMPT
def get_save_balance(self): """ Return the displayed balance of the user's Aspiration Save Account """ BaseElement(self.driver, locators.SAVE_ACCOUNT_TEXT).wait_until_displayed() # Manually scrolling up is necessary because even seeing the label might still hide amount self.touch_scroll_up() element = BaseElement(self.driver, locators.SAVE_BALANCE_TEXT) return Decimal(re.sub(r'[^\d.]', '', element.get_text()))
def get_pwif_amount(self): """ Return users current PWIF amount """ BaseElement(self.driver, locators.FEE_SETTINGS_TAB).click() fee_amount_text = BaseElement(self.driver, locators.FEE_AMOUNT) fee_amount_text.wait_until_displayed() pwif_amount = utils.decimal_from_string(fee_amount_text.get_text()) return pwif_amount
def get_opening_deposit_amount(self): """ Return the amount of the Opening Deposit transfer""" transfer_amount = BaseElement(self.driver, locators.FIRST_HISTORY_TRANSFER_AMOUNT) if transfer_amount.displayed(5): opening_deposit = utils.decimal_from_string( transfer_amount.get_text()) else: return None return opening_deposit
def get_most_recent_transaction_summary(self): """ Return summarized details of most recent transaction, or None if no transactions are displayed Data is returned as a 'Transaction' object """ transaction_description = BaseElement(self.driver, locators.FIRST_TRANSACTION_DESCRIPTION) transaction_amount = BaseElement(self.driver, locators.FIRST_TRANSACTION_AMOUNT) transaction_running_balance = BaseElement(self.driver, locators.FIRST_TRANSACTION_RUNNING_BALANCE) transaction_no_activity = BaseElement(self.driver, locators.TRANSACTION_NO_ACTIVITY_MESSAGE) if transaction_description.displayed(5): transaction_details = \ {'description': transaction_description.get_text(), 'amount': utils.remove_whitespace_from_string(transaction_amount.get_text()), 'balance': transaction_running_balance.get_text()} elif transaction_no_activity.displayed(5): transaction_details = \ {'description': transaction_no_activity.get_text(), 'amount': None, 'balance': None} else: return None return transaction_details
def get_modal_summary_details(self): """ get summary details from receipt modal """ bank = BaseElement(self.driver, locators.INVESTMENT_ORDER_RECEIPT_MODAL_DESCRIPTION) bank.wait_until_displayed() modal_details = { "bank": bank.get_text(), "amount": BaseElement( self.driver, locators.INVESTMENT_ORDER_RECEIPT_MODAL_AMOUNT).get_text() } return modal_details
def next_scheduled_transfer_summary(self): """ Return summarized details of next scheduled transfer, or None if no transfer is scheduled """ # QA-329 To-Do : Update logic to handle 'no activity' message date_caption = BaseElement(self.driver, locators.FIRST_SCHEDULED_TRANSFER_DATE) if date_caption.displayed(5): transfer_details = {'date': date_caption.get_text()} else: return None # BANK-1683 todo: a method to identify the to, from, and amount fields # transfer_details['amount'] = utils.decimal_from_string(BaseElement(self.driver, # locators.FIRST_SCHEDULED_TRANSFER_AMOUNT).get_text()) # transfer_details['from'] = # transfer_details['to'] = return transfer_details
def return_to_dashboard(self): """ Navigate back to the customer dashboard """ location = BaseElement(self.driver, locators.LOCATION_TEXT) # Begin navigation if we are not already at the dashboard if location.get_text() != 'Account Summary': drawer_button = BaseElement(self.driver, locators.DRAWER_BUTTON) if drawer_button.not_displayed(): # If the drawer button isn't displayed, then we need to click the back-button to make it appear back_button = BaseElement(self.driver, locators.NAVIGATE_UP_BUTTON) if back_button.displayed(5): back_button.click() drawer_button.click() BaseElement(self.driver, locators.SUMMARY_BUTTON).click() location.wait_until_displayed()
def get_product_balance(self, product): """ Return the displayed balance of a user's chosen product """ if product == Products.SPEND: product_balance = BaseElement(self.driver, locators.ASPIRATION_SPEND_BALANCE) elif product == Products.SAVE: product_balance = BaseElement(self.driver, locators.ASPIRATION_SAVE_BALANCE) elif product == Products.REDWOOD: product_balance = BaseElement(self.driver, locators.ASPIRATION_REDWOOD_BALANCE) # elif product == Products.FLAGSHIP: # product_balance = BaseElement(self.driver, locators.ASPIRATION_FLAGSHIP_BALANCE) else: raise ValueError(f"'{product}' is not a valid product") return utils.decimal_from_string(product_balance.get_text())