import logging from contextlib import suppress import allure from ui_automation_framework.utils import logger as cl from src.pages.library_page import LibraryPage from src.pages.login_page import LoginPage from src.pages.navigation_page import NavigationPage from waiting import TimeoutExpired, ALL from src.helpers.waiting_wrapper import wait from src.ui_elements.button_ui_element import ButtonUIElement from src.ui_elements.input_ui_element import InputUIElement from src.ui_elements.label_ui_element import LabelUIElement from src.ui_elements.list_ui_element import ListUIElement from src.locators.artists_selector_locators import ArtistSelectorLocators class ArtistsSelectorPage(NavigationPage): log = cl.Logger(logging.DEBUG) def __init__(self, driver): super().__init__(driver) self.driver = driver @property def bn_logout(self): return ButtonUIElement(self.driver, ArtistSelectorLocators.LOG_OUT_BN, "Log Out") @property def list_artists(self): return ListUIElement(self.driver, all_elements_locator=ArtistSelectorLocators.ARTISTS_LIST, by_position_locator=ArtistSelectorLocators.ARTISTS_LIST_BY_POSITION, by_text_locator=ArtistSelectorLocators.ARTISTS_LIST_BY_TEXT) @property def lb_select_artist(self): return LabelUIElement(self.driver, ArtistSelectorLocators.SELECT_ARTIST_LB, "Select an artist to get started") @property def in_search_artist(self): return InputUIElement(self.driver, ArtistSelectorLocators.SEARCH_ARTIST_FIELD, "Search Artist") @allure.step("Selecting artist by name") def select_an_artist_by_name(self, name): self.in_search_artist.click() self.in_search_artist.send_text(name) self.press_return_to_hide_keyboard() self.list_artists.select_by_text(name) return LibraryPage(self.driver) @allure.step("Selecting artist by position") def select_an_artist_by_position(self, position): self.list_artists.select_by_position(position) return LibraryPage(self.driver) def click_logout_btn(self): self.bn_logout.click() return LoginPage(self.driver) def is_artist_selector_screen_opened(self): self.wait_for_element_present(ArtistSelectorLocators.SELECT_ARTIST_LB) return self.is_element_present(element=self.lb_select_artist)