from allure import step from playwright.sync_api import Page, expect from src.helpers.logger import Logger from src.locators.track_page.performance_section.tiktok_tab_locators import TrackPagePerformanceTiktokLocators from src.pages.track_page.header.track_page_header import TrackPageHeader from src.ui_elements.dropdown_ui_element import DropDownUIElement log = Logger() tab_name = "Tiktok Tab - " class TrackPagePerformanceTiktokTab(TrackPageHeader): def __init__(self, page: Page): super().__init__(page) self.page = page self.metric_type_dd = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.METRIC_TYPE_DD, tab_name + 'metric type dd') self.metric_type_dd_chosen = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.METRIC_TYPE_CHOSEN, tab_name + 'metric type chosen dd') self.content_type_dd = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.CONTENT_TYPE_DD, tab_name + 'content type dd') self.content_type_dd_chosen = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.CONTENT_TYPE_DD_CHOSEN, tab_name + 'content type chosen dd') self.market_dd = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.MARKET_DD, tab_name + 'market dd') self.dd_apply_button = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.DD_APPLY_BUTTON, tab_name + 'apply button') self.region_item = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.REGION_ITEM, tab_name + 'region item') self.graph_type_dd = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.GRAPH_TYPE_DD, tab_name + 'graph type dd chosen') self.graph_type_dd_chosen = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.GRAPH_TYPE_DD_CHOSEN, tab_name + 'graph type dd chosen') self.export_dd = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.EXPORT_DD, tab_name + 'export dd') self.export_as_png = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.EXPORT_AS_PNG, tab_name + 'export as png') self.export_as_csv = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.EXPORT_AS_CSV, tab_name + 'export as csv') self.legend_values = DropDownUIElement(self.page, TrackPagePerformanceTiktokLocators.TIKTOK_LEGEND_VALUES, tab_name + 'legend values') @step(tab_name + "choose metric {item}") def choose_metric(self, item): if self.metric_type_dd_chosen.get_text() != item: self.metric_type_dd.click() self.metric_type_dd._element.get_by_text(item).click() self.verify_chosen_metric_type(item) @step(tab_name + "verify chosen metric {item}") def verify_chosen_metric_type(self, item): expect(self.metric_type_dd_chosen._element).to_contain_text(item) @step(tab_name + "choose content {item}") def choose_content(self, item): if self.content_type_dd_chosen.get_text() != item: self.content_type_dd.click() self.content_type_dd._element.get_by_text(item).click() self.verify_chosen_content_type(item) @step(tab_name + "verify chosen content {item}") def verify_chosen_content_type(self, item): expect(self.content_type_dd_chosen._element).to_contain_text(item) @step(tab_name + "export as png") def download_png(self): self.page.wait_for_load_state('domcontentloaded') self.export_dd.click() with self.page.expect_download() as download_info: self.export_as_png.click() download = download_info.value download.save_as(download.suggested_filename) return download @step(tab_name + "export as csv") def download_csv(self): self.is_loaded() self.page.wait_for_load_state('domcontentloaded') self.export_dd.click() with self.page.expect_download() as download_info: self.export_as_csv.click() download = download_info.value download.save_as(download.suggested_filename) return download @step(tab_name + "choose markets {items}") def choose_markets(self, items): loc = "//*[contains(@id, '{}')]" all_markets = "All Markets" self.market_dd.click() self.page.locator(loc.format(all_markets)).click() if self.page.locator(loc.format(all_markets)).get_attribute("data-checked") == "checked": self.page.locator(loc.format(all_markets)).click() for item in items: self.page.locator(loc.format(item)).click() self.dd_apply_button.click() self.verify_markets(items) @step(tab_name + "choose region {item}") def choose_region(self, item): self.market_dd.click() self.region_item.get_by(item).click() self.verify_markets([item]) @step(tab_name + "verify chosen markets {items}") def verify_markets(self, items): if len(items) == 1: expect(self.market_dd._element).to_have_text(items[0]) else: expect(self.market_dd._element).to_have_text(f"{len(items)} Markets") def choose_graph(self, graph): if self.graph_type_dd_chosen.get_text() != graph: self.graph_type_dd.click() self.graph_type_dd._element.get_by_text(text=graph, exact=True).click() expect(self.graph_type_dd_chosen._element).to_have_text(graph) @step(tab_name + "choose area graph") def choose_area_graph(self): graph = "Area Graph" self.choose_graph(graph) def is_loaded(self): self.export_dd.is_enabled(True) self.export_dd.is_button_enabled(True)