import logging import allure from contextlib import suppress from ui_automation_framework.utils import logger as cl from ui_automation_framework.core.base_page import BasePage from src.ui_elements.button_ui_element import ButtonUIElement from src.ui_elements.label_ui_element import LabelUIElement from src.ui_elements.input_ui_element import InputUIElement from src.locators.settings_locators import SettingsLocators from src.pages.login_page import LoginPage from waiting import TimeoutExpired, ALL from src.helpers.waiting_wrapper import wait class SettingsPage(BasePage): log = cl.Logger(logging.DEBUG) def __init__(self, driver): super().__init__(driver) self.driver = driver @property def bn_logout(self): return ButtonUIElement(self.driver, SettingsLocators.LOG_OUT_BN, "Log Out") @property def bn_send_feedback(self): return ButtonUIElement(self.driver, SettingsLocators.SEND_FEEDBACK_BN, "Send Feedback") @property def bn_whats_new(self): return ButtonUIElement(self.driver, SettingsLocators.WHATS_NEW_BN, "What's New") @property def bn_feedback_submit(self): return ButtonUIElement(self.driver, SettingsLocators.SUBMIT_BN, "Submit Feedback") @property def bn_feedback_dismiss(self): return ButtonUIElement(self.driver, SettingsLocators.FEEDBACK_DISMISS_BN, "Dismiss Feedback") @property def bn_open_in_safari(self): return ButtonUIElement(self.driver, SettingsLocators.BN_OPEN_IN_SAFARI, "Open in Safari") @property def bn_build_version(self): return ButtonUIElement(self.driver, SettingsLocators.BUILD_VERSION_BN, "Build Version") @property def lb_detailed_build_version(self): return LabelUIElement(self.driver, SettingsLocators.DETAILED_VERSION_LB, "Detailed Build Version") @property def lb_settings(self): return LabelUIElement(self.driver, SettingsLocators.SETTINGS_LB, "Settings") @property def lb_release_notes(self): return LabelUIElement(self.driver, SettingsLocators.RELEASE_NOTES_LB, "Release Notes") @property def lb_give_us_feedback(self): return LabelUIElement(self.driver, SettingsLocators.GIVE_US_FEEDBACK_LB, "Give us feedback") @property def activity_list_view(self): return LabelUIElement(self.driver, SettingsLocators.ACTIVITY_LIST, "Activity List View") @property def bn_copy(self): return ButtonUIElement(self.driver, SettingsLocators.BN_COPY, "Copy") @property def lb_thanks_for_feedback(self): return LabelUIElement(self.driver, SettingsLocators.FEEDBACK_THANKS, "Thanks for feedback") @property def lb_give_us_feedback_text(self): return LabelUIElement(self.driver, SettingsLocators.GIVE_US_FEEDBACK_TEXT_LB, "Give us feedback text") @property def in_feedback_form(self): return InputUIElement(self.driver, SettingsLocators.FEEDBACK_FORM, "Feedback Form") def click_logout(self): self.bn_logout.click() return LoginPage(self.driver) def are_release_notes_opened(self): return self.is_element_present(SettingsLocators.RELEASE_NOTES_LB[1], "class-chain") def is_settings_page_opened(self): with suppress(TimeoutExpired): return wait(self.lb_settings.is_visible) return False @allure.step("Click Feedback from 3-dots Menu") def click_feedback_from_menu(self): size = self.driver.get_window_size() self.driver.tap(positions=[(size["width"] / 2, size["height"] - 70)]) if self.is_feedback_form_opened() is False: self.driver.tap(positions=[(size["width"] / 2, size["height"] - 70)]) print("clicked twice") return self @allure.step("Click Share from 3-dots Menu") def click_share_from_menu(self): size = self.driver.get_window_size() self.driver.tap(positions=[(size["width"] / 2, size["height"] - 120)]) if self.is_activity_form_opened() is False: self.driver.tap(positions=[(size["width"] / 2, size["height"] - 120)]) print("clicked twice") return self def is_feedback_form_opened(self): with suppress(TimeoutExpired): return wait(ALL([self.lb_give_us_feedback.is_visible, self.lb_give_us_feedback_text.is_visible])) return False def is_feedback_sent(self): with suppress(TimeoutExpired): return wait(self.lb_thanks_for_feedback.is_visible) return False def is_activity_form_opened(self): with suppress(TimeoutExpired): return wait(self.activity_list_view.is_visible) return False @allure.step("Getting Insights link from clipboard") def get_link_from_clipboard(self, clipboard): link = clipboard.split(' ')[-1] return link @allure.step("Check detailed build version") def check_app_version(self): self.bn_build_version.click() self.lb_detailed_build_version.wait() with suppress(TimeoutExpired): return wait(self.lb_detailed_build_version.is_visible) return False