import logging import time from ui_automation_framework.utils import logger as cl from app.src.pages.navigation_page import Navigation from app.src.ui_elements.button_ui_element import ButtonUIElement from app.src.ui_elements.label_ui_element import LabelUIElement class TrackPageInfo(Navigation): log = cl.Logger(logging.DEBUG) ADDRESS_BAR_LOCATOR = '**/XCUIElementTypeTextField[`label == "Address"`]' def __init__(self, driver, api_client): super().__init__(driver) self.driver = driver self.track_info_locators = self.get_page_locators("TrackPageInfo", "track_info_elements.json") self.api = api_client @property def bn_close(self): return ButtonUIElement(self.driver, self.locator(self.track_info_locators, "close_btn")) def close(self): self.bn_close.click() return self @property def lb_label(self): return LabelUIElement(self.driver, self.locator(self.track_info_locators, "track_info_label_label")) @property def lb_released(self): return LabelUIElement(self.driver, self.locator(self.track_info_locators, "track_info_released_label")) @property def lb_partners(self): return LabelUIElement(self.driver, self.locator(self.track_info_locators, "track_info_partners_label")) def is_track_info_opened(self): return self.lb_label.is_visible() and self.lb_released.is_visible() and self.lb_partners.is_visible() def has_label(self, label=None): if label: locator = f'**/XCUIElementTypeOther[`label == "{label}"`]' else: locator = '**/XCUIElementTypeStaticText[`name == "record-label"`]' return self.is_element_displayed(locator, "class-chain") def has_released_date(self, date=None): if date: locator = f'**/XCUIElementTypeOther[`label == "{date}"`]' else: locator = '**/XCUIElementTypeStaticText[`name == "release-date"`]' return self.is_element_displayed(locator, "class-chain") @property def bn_spotify_partner(self): return ButtonUIElement(self.driver, self.locator(self.track_info_locators, "spotify_partner")) @property def bn_apple_partner(self): return ButtonUIElement(self.driver, self.locator(self.track_info_locators, "apple_partner")) def is_spotify_button_clickable(self): self.bn_spotify_partner.click() time.sleep(10) return self.get_attribute_value(self.ADDRESS_BAR_LOCATOR, "class-chain", None, "value") == "‎open.spotify.com, secure" def is_apple_button_clickable(self): self.bn_apple_partner.click() time.sleep(10) return self.get_attribute_value(self.ADDRESS_BAR_LOCATOR, "class-chain", None, "value") == "‎music.apple.com, secure" def is_partner_button_clickable(self, vendor): func = {"apple": self.is_apple_button_clickable, "spotify": self.is_spotify_button_clickable}[vendor] return func()