from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException from helpers.platform.ios.locators import ( ios_other_by_name, ios_static_text_by_name) from ..base_screen import BaseScreen class LoginFlow(BaseScreen): login_button = 'loginButton' username_input = '//*/XCUIElementTypeTextField' password_input = '//*/XCUIElementTypeSecureTextField' web_view_login_btn = 'LOG IN' next_button = 'nextButton' enable_button = 'enableButton' done_button = 'doneButton' news_screen_title = ios_static_text_by_name("What's New?") news_screen_enable_button = ios_other_by_name('letsGoButton') notifications_enable_button = 'enableButton' def __init__(self, driver): self.logged_in = False super().__init__(driver) def skip_tutorial(self): try: for _ in range(3): self.waiter(20, By.ID, self.next_button).click() self.waiter(10, By.ID, self.enable_button).click() self.waiter(10, By.ID, self.done_button).click() except TimeoutException: pass def skip_news_screen(self): try: self.waiter(10, AppiumBy.IOS_CLASS_CHAIN, self.news_screen_title) self.waiter(5, AppiumBy.IOS_CLASS_CHAIN, self.news_screen_enable_button).click() except TimeoutException: pass def enter_user_details(self, username, password): self.waiter(60, By.ID, self.login_button).click() self.waiter(20, By.XPATH, self.username_input).send_keys(username) self.waiter(20, By.XPATH, self.password_input).send_keys(password) def login(self, context, username, password): if not self.logged_in: # Setting login state to true before login as # we don't want to keep retrying login on login fail self.logged_in = True self.enter_user_details(username, password) self.waiter( 20, AppiumBy.ACCESSIBILITY_ID, self.web_view_login_btn).click() if "sme" not in context.app_name: self.skip_tutorial() self.skip_news_screen() else: self.waiter( 30, By.ID, self.notifications_enable_button).click() def logout(self, context): context.home_screen.open_profile_screen(context) self.waiter(15, By.ID, 'logOutButton').click() self.logged_in = False def assert_login_button(self): login_btn = self.waiter(30, By.ID, self.login_button) assert login_btn