import logging import allure from assertpy import assert_that from ui_automation_framework.core import BasePage, TestStatus from ui_automation_framework.utils import logger as cl from app.src.pages.login_page import LoginPage class LeftNavigationPanel(BasePage): log = cl.Logger(logging.DEBUG) LEFT_HAMBURGER_MENU_GTP = "gtp" LEFT_HAMBURGER_MENU_COMPARISON = "comparison" CHARTS_DIGEST = "list-l" MY_STARRED_TRACKS = "star-outlined" TRACK_COMPARISON = "comparison" GLOBAL_TRACK_PRIORITIES = "gtp-l" link_nmf = "New Music Friday" TOPLISTS_SECTION = "Toplists" TOP_CHARTS_PAGE = "Top Charts" TOP_CHARTS_LINK = "/top-charts" def __init__(self, driver): super().__init__(driver) self.driver = driver self.left_panel_locators = self.get_page_locators("LeftNavigationPanel", "left_panel_elements.json") self.login_page = LoginPage(self.driver) self.ts = TestStatus(self.driver) @allure.step("sign out") def sign_out(self): menu = self.wait_for_element_visible(*self.locator(self.left_panel_locators, "ellipsis_menu")) self.click_element(element=menu) sign_out = self.wait_for_element_visible(*self.locator(self.left_panel_locators, "sign_out")) self.click_element(element=sign_out) self.login_page.is_opened() @allure.step("LNP - open GTP") def open_gtp(self): self.page_has_loaded() self.click_element(*self.locator(self.left_panel_locators, "ellipsis_menu")) self.click_element(*self.locator(self.left_panel_locators, "gtp")) self.page_has_loaded() @allure.step("Open Track Comparison Page") def open_comparison_page(self): self.page_has_loaded() self.wait_for_element_clickable(*self.locator(self.left_panel_locators, "comparison_link")) self.click_element(*self.locator(self.left_panel_locators, "comparison_link")) self.page_has_loaded() def is_tab_selected(self, locator, locator_type): attr_value = self.get_attribute_value(locator, locator_type, attribute="data-selected") self.ts.markFinal(attr_value == "selected", "{} tab is selected".format(locator)) @allure.step("sign out") def is_comparison_tab_selected(self): self.is_tab_selected(*self.locator(self.left_panel_locators, "comparison_link")) @allure.step("Open Track Comparison Page") def open_chart_digest_page(self): self.wait_for_element_clickable(*self.locator(self.left_panel_locators, "chart_digest_link")) self.click_element(*self.locator(self.left_panel_locators, "chart_digest_link")) self.page_has_loaded() @allure.step("Open My Starred Tracks Page") def open_my_starred_tracks_page(self): mst = self.wait_for_element_clickable(*self.locator(self.left_panel_locators, "my_starred_tracks_link")) self.click_element(element=mst) self.page_has_loaded() @allure.step("Open any page from Top MEnu") def open_page_from_top_menu(self, page): page_locator = f"//*[contains(text(), '{page}')]" self.wait_for_element_clickable(locator=page_locator, locator_type="xpath") self.click_element(locator=page_locator, locator_type="xpath") self.page_has_loaded() @allure.step("Click on hamburger icon") def hamburger_menu_click(self): menu = self.wait_for_element_visible(*self.locator(self.left_panel_locators, "ellipsis_menu")) self.click_element(element=menu) @allure.step("Hamburger menu is opened") def hamburger_menu_is_opened(self): sign_out = self.is_element_displayed(*self.locator(self.left_panel_locators, "sign_out")) self.ts.markFinal(sign_out, "hamburger menu is opened") @allure.step("Hamburger menu is closed") def hamburger_menu_is_closed(self): sign_out = self.is_element_displayed(*self.locator(self.left_panel_locators, "sign_out")) self.log.info("Sign out is present: " + str(sign_out)) assert_that(sign_out).is_false() @allure.step("Open left hamburger menu pages") def open_left_hamburger_menu_pages(self, page): self.click_element(*self.locator(self.left_panel_locators, "ellipsis_menu")) page_locator = "//*[contains(@class, 'icon-{}')]/ancestor::a".format(page) page_to_navigate = self.wait_for_element_clickable(locator=page_locator, locator_type="xpath") self.click_element(element=page_to_navigate) @allure.step("Open right hamburger menu pages") def open_right_hamburger_menu_pages(self, page): self.click_element(*self.locator(self.left_panel_locators, "ellipsis_menu")) if page == "Playlists": page_locator = "//a[contains(@href, 'filtr.com/playlists')]" else: page_locator = "//a[contains(text(), '{}')]".format(page) page_to_navigate = self.wait_for_element_clickable(locator=page_locator, locator_type="xpath") self.click_element(element=page_to_navigate) @allure.step("Open Contact Us button") def open_contact_us(self): self.click_element(*self.locator(self.left_panel_locators, "ellipsis_menu")) self.wait_for_element_clickable(*self.locator(self.left_panel_locators, "contact_us_button")) self.click_element(*self.locator(self.left_panel_locators, "contact_us_button")) @allure.step("Verify page link is present in the Top Menu") def is_page_link_present_in_menu(self, section, page, link): page_locator = f"//a[contains(text(), '{section}')]/ancestor::div[1]//*[contains(text(), '{page}')]" self.wait_for_element_visible(locator=page_locator, locator_type="xpath") page = self.get_element(locator=page_locator, locator_type="xpath") is_page_present = self.is_element_present(element=page) link_value = self.get_attribute_value(element=page, attribute="href") assert_that(is_page_present).is_true() assert_that(link_value).contains(link)