from allure import step from playwright.sync_api import Page, expect from src.helpers.logger import Logger from src.locators.album_page.performance_section.countries_tab import AlbumPageCountriesTabLocators from src.pages.album_page.album_header import AlbumPageHeader from src.ui_elements.dropdown_ui_element import DropDownUIElement log = Logger() tab_name = "Album Page - Countries tab - " class AlbumPageCountriesTab(AlbumPageHeader): def __init__(self, page: Page): super().__init__(page) self.page = page self.dsp_dd = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.DSP_DD, tab_name + 'dsp dd') self.dsp_dd_chosen = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.DSP_DD_CHOSEN, tab_name + 'dsp dd chosen') self.market_dd = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.COUNTRIES_DD, tab_name + 'countries dd') self.region_item = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.REGION_ITEM, tab_name + 'region item') self.dd_apply_button = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.DD_APPLY_BUTTON, tab_name + 'apply button') self.export_button = DropDownUIElement(self.page, AlbumPageCountriesTabLocators.EXPORT_BUTTON, tab_name + 'export button') @step(tab_name + "choose dsp {item}") def choose_dsp(self, item): if self.dsp_dd_chosen.get_text() != item: self.dsp_dd.click() self.dsp_dd._element.get_by_text(item).click() self.verify_chosen_dsp(item) @step(tab_name + "verify chosen dsp {item}") def verify_chosen_dsp(self, item): expect(self.dsp_dd_chosen._element).to_contain_text(item) @step(tab_name + "choose markets {items}") def choose_markets(self, items): self.is_loaded() 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)).check() 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") @step(tab_name + "export as csv") def download_csv(self): self.is_loaded() self.page.wait_for_load_state('domcontentloaded') with self.page.expect_download() as download_info: self.export_button.click() download = download_info.value download.save_as(download.suggested_filename) return download