import logging from contextlib import suppress import allure from ui_automation_framework.utils import CoreConfig 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.search_locators import SearchLocators class SearchPage(NavigationPage): log = cl.Logger(logging.DEBUG) def __init__(self, driver): super().__init__(driver) self.driver = driver @property def list_items(self): return ListUIElement(self.driver, all_elements_locator=SearchLocators.SEARCH_LIST, by_position_locator=SearchLocators.SEARCH_LIST_BY_POSITION, by_text_locator=SearchLocators.SEARCH_LIST_BY_TEXT) @property def lb_search(self): return LabelUIElement(self.driver, SearchLocators.SEARCH_LB, "Search") @property def in_search_items(self): return InputUIElement(self.driver, SearchLocators.SEARCH_FIELD, "Search Tracks, Albums, Videos") @allure.step("Selecting found item by name") def select_item_by_name(self, name): self.in_search_items.click() self.in_search_items.send_text(name) self.press_return_to_hide_keyboard() self.list_items.select_by_text(name) return self @allure.step("Selecting found item by position") def select_item_by_position(self, position): self.list_items.select_by_position(position) return LibraryPage(self.driver) def is_search_screen_opened(self): with suppress(TimeoutExpired): return wait(self.lb_search.is_visible) return False