modules/page_object_fxa_home.py (39 lines of code) (raw):
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from modules.page_base import BasePage
class FxaHome(BasePage):
"""Page Object Model for FxA pages"""
URL_TEMPLATE = "{fxa_url}"
def sign_up_sign_in(self, email: str) -> BasePage:
"""From the entry point, enter email to sign up or sign in"""
self.fill("login-email-input", email, press_enter=False)
self.get_element("submit-button").click()
return self
def fill_password(self, password: str) -> BasePage:
self.set_content_context()
self.fill("login-password-input", password, press_enter=False)
self.get_element("submit-button").click()
# If OTP is needed, wait for the field to be ready, else move on.
try:
self.custom_wait(timeout=3).until(
EC.presence_of_element_located(self.get_selector("connected-heading"))
)
except (TimeoutException, NoSuchElementException):
self.element_exists("otp-input")
return self
def create_new_account(self, password: str, age=30) -> BasePage:
"""Fill out the password and age fields, then submit and wait for code"""
self.fill("signup-password-input", password, press_enter=False)
self.fill("signup-password-repeat-input", password, press_enter=False)
self.fill("age-input", str(age), press_enter=False)
self.element_clickable("submit-button")
self.get_element("submit-button").click()
self.element_has_text("card-header", "Enter confirmation code")
return self
def fill_otp_code(self, otp: str) -> BasePage:
"""Given an OTP, confirm the account, submit, and wait for account activation"""
self.fill("otp-input", otp, press_enter=False)
self.get_element("submit-button").click()
self.element_exists("connected-heading")
return self
def finish_account_setup(self, password: str) -> BasePage:
"""Walk through the 'Finish Account Setup' flow"""
self.wait_for_num_tabs(2)
self.driver.switch_to.window(self.driver.window_handles[-1])
self.fill("login-password-input", password, press_enter=False)
self.get_element("submit-button").click()
return self