playwright_tests/pages/top_navbar.py (188 lines of code) (raw):

from playwright.sync_api import ElementHandle, Locator, Page from playwright_tests.core.basepage import BasePage class TopNavbar(BasePage): def __init__(self, page: Page): super().__init__(page) # General page locators self.menu_titles = page.locator("div#main-navigation a.mzp-c-menu-title") self.sumo_nav_logo = page.locator( "div.sumo-nav--logo").get_by_role("link").get_by_role("img") # Locators belonging to the 'Explore Help Articles' top-navbar section. self.explore_by_topic_top_navbar_header = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Explore by topic") self.explore_by_product_top_navbar_header = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Explore by product") self.explore_help_articles_top_navbar_option = page.locator( "a[class='mzp-c-menu-title sumo-nav--link']").filter(has_text="Explore Help Articles") self.explore_our_help_articles_view_all_option = page.locator( "ul[class='mzp-c-menu-item-list sumo-nav--sublist'] li" ).get_by_role("link", name="View all products", exact=True) self.explore_by_product_top_navbar_options = page.locator( "//h4[text()='Explore by product']/../following-sibling::ul/li/a") self.explore_by_topic_top_navbar_options = page.locator( "//h4[text()='Explore by topic']/../following-sibling::ul/li/a") # Locators belonging to the 'Ask a Question' top-navbar section. self.ask_a_question_top_navbar = page.locator( "li[class='mzp-c-menu-category mzp-has-drop-down mzp-js-expandable']").filter( has_text="Ask a Question") self.get_help_with_heading = page.locator( "h4[class='mzp-c-menu-item-title']").filter(has_text="Get help with") self.ask_a_question_top_navbar_options = page.get_by_role( "link", name="Ask a Question", exact=True).locator("+ div li a") self.aaq_firefox_browser_option = page.get_by_role( "link", name="Ask a Question", exact=True).locator("+ div li").get_by_role( "link").filter(has_text="Firefox desktop") self.browse_all_products_option = page.locator( "div#main-navigation").get_by_role("link", name="View all", exact=True) # Locators belonging to the 'Community Forums' top-navbar section. self.browse_by_product_top_navbar_header = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Browse by product") self.browse_all_forum_threads_by_topic_top_navbar_header = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Browse all forum threads by topic") self.community_forums_top_navbar_option = page.locator( "a[class='mzp-c-menu-title sumo-nav--link']").filter(has_text="Community Forums") self.browse_by_product_top_navbar_options = page.locator( "//h4[text()='Browse by product']/../following-sibling::ul/li/a") self.browse_all_forum_threads_by_topics_top_navbar_options = page.locator( "//h4[text()='Browse all forum threads by topic']/../following-sibling::ul/li/a") # Locators belonging to the 'Contribute' top-navbar section. self.contribute_option = page.get_by_role("link").filter(has_text="Contribute") self.contributor_discussions_top_navbar_header = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Contributor discussions") self.contributor_discussions_options = page.locator( "//h4[text()='Contributor discussions']/../following-sibling::ul/li/a") self.contributor_discussions_option = page.locator( "h4.mzp-c-menu-item-title").filter(has_text="Contributor discussions") self.article_discussions_option = page.locator( "div#main-navigation").get_by_role("link", name="Article discussions", exact=True) self.moderate_forum_content = page.locator( "div#main-navigation").get_by_role("link").filter(has_text="Moderate forum content") self.recent_revisions_option = page.locator( "ul[class='mzp-c-menu-item-list sumo-nav--sublist']").get_by_role( "link").filter(has_text="Recent revisions") self.dashboards_option = page.locator( "ul[class='mzp-c-menu-item-list sumo-nav--sublist']").get_by_role("link").filter( has_text="Knowledge base dashboards") self.media_gallery_option = page.locator( "ul[class='mzp-c-menu-item-list sumo-nav--sublist']").get_by_role("link").filter( has_text="Media gallery") self.guides_option = page.locator( "ul[class='mzp-c-menu-item-list sumo-nav--sublist']").get_by_role("link").filter( has_text="Guides") # Locators belonging to the 'Sign In/Up' top-navbar section. self.signin_signup_button = page.locator("div#profile-navigation").get_by_role( "link").filter(has_text="Sign In/Up") self.signed_in_username = page.locator("span.sumo-nav--username") self.signed_in_view_profile_option = page.locator( "//h4[contains(text(), 'View Profile')]/parent::a") self.signed_in_edit_profile_option = page.get_by_role("link").filter( has_text="Edit Profile") self.signed_in_my_questions_option = page.locator( "div.sumo-nav--dropdown-thirds").get_by_role("link").filter(has_text="My Questions") self.signed_in_settings_option = page.locator( "//h4[contains(text(), 'Settings')]/parent::a") self.signed_in_inbox_option = page.locator("//h4[contains(text(), 'Inbox')]/parent::a") self.sign_out_button = page.locator("div#mzp-c-menu-panel-profile").get_by_role( "link").get_by_text("Sign Out") self.unread_message_profile_notification = page.locator( "div#profile-navigation div.avatar-container-message-alert") self.unread_message_count = page.locator("span.message-count-alert") """ Actions against the top-navbar logo. """ def get_sumo_nav_logo(self) -> ElementHandle: """Get sumo nav logo element handle""" return self._get_element_handle(self.sumo_nav_logo) def click_on_sumo_nav_logo(self): """Click on the sumo nav logo""" self._click(self.sumo_nav_logo) """ Actions against the 'Explore Help Articles' top-navbar section. """ def hover_over_explore_by_product_top_navbar_option(self): """Hover over the 'Explore by product' top-navbar option""" self._hover_over_element(self.explore_help_articles_top_navbar_option) self._wait_for_locator(self.explore_by_product_top_navbar_header) def get_all_explore_by_product_options_locators(self) -> list[Locator]: """Get all 'Explore by product' top-navbar options locators""" self.hover_over_explore_by_product_top_navbar_option() return self.explore_by_product_top_navbar_options.all() def get_all_explore_by_topic_locators(self) -> list[Locator]: """Get all 'Explore by topic' top-navbar options locators""" self.hover_over_explore_by_product_top_navbar_option() return self.explore_by_topic_top_navbar_options.all() def click_on_explore_our_help_articles_view_all_option(self): """Click on the 'View all products' option""" self.hover_over_explore_by_product_top_navbar_option() self._click(self.explore_our_help_articles_view_all_option) """ Actions against the 'Community Forums' top-navbar section. """ def hover_over_community_forums_top_navbar_option(self): """Hover over the 'Community Forums' top-navbar option""" self._hover_over_element(self.community_forums_top_navbar_option) self._wait_for_locator(self.browse_by_product_top_navbar_header) def get_all_browse_by_product_options_locators(self) -> list[Locator]: """Get all 'Browse by product' top-navbar options locators""" self.hover_over_community_forums_top_navbar_option() return self.browse_by_product_top_navbar_options.all() def get_all_browse_all_forum_threads_by_topic_locators(self) -> list[Locator]: """Get all 'Browse all forum threads by topic' top-navbar options locators""" self.hover_over_community_forums_top_navbar_option() return self.browse_all_forum_threads_by_topics_top_navbar_options.all() """ Actions against the 'Ask a Question' top-navbar section. """ def hover_over_ask_a_question_top_navbar(self): """Hover over the 'Ask a Question' top-navbar option""" self._hover_over_element(self.ask_a_question_top_navbar) self._wait_for_locator(self.get_help_with_heading) def get_all_ask_a_question_locators(self) -> list[Locator]: """Get all 'Ask a Question' top-navbar options locators""" self.hover_over_ask_a_question_top_navbar() return self.ask_a_question_top_navbar_options.all() def click_on_browse_all_products_option(self): """Click on the 'Browse all products' option""" self.hover_over_ask_a_question_top_navbar() self._click(self.browse_all_products_option) """ Actions against the 'Contribute' top-navbar section. """ def hover_over_contribute_top_navbar(self): """Hover over the 'Contribute' top-navbar option""" self._hover_over_element(self.contribute_option) self._wait_for_locator(self.contributor_discussions_top_navbar_header) def get_all_contributor_discussions_locators(self) -> list[Locator]: """Get all 'Contributor discussions' top-navbar options locators""" self.hover_over_contribute_top_navbar() return self.contributor_discussions_options.all() def click_on_contribute_top_navbar_option(self): """Click on the 'Contribute' top-navbar option""" self._click(self.contribute_option) def click_on_contributor_discussions_top_navbar_option(self): """Click on the 'Contributor discussions' top-navbar option""" self.hover_over_contribute_top_navbar() self._click(self.contributor_discussions_option) def click_on_article_discussions_option(self): """Click on the 'Article discussions' option""" self.hover_over_contribute_top_navbar() self._click(self.article_discussions_option) # Contributor tools def click_on_moderate_forum_content_option(self): """Click on the 'Moderate forum content' option""" self.hover_over_contribute_top_navbar() self._click(self.moderate_forum_content) def click_on_recent_revisions_option(self): """Click on the 'Recent revisions' option""" self.hover_over_contribute_top_navbar() self._click(self.recent_revisions_option) def click_on_dashboards_option(self): """Click on the 'Knowledge base dashboards' option""" self.hover_over_contribute_top_navbar() self._click(self.dashboards_option) def click_on_media_gallery_option(self): """Click on the 'Media gallery' option""" self.hover_over_contribute_top_navbar() self._click(self.media_gallery_option) def click_on_guides_option(self): """Click on the 'Guides' option""" self.hover_over_contribute_top_navbar() self._click(self.guides_option) """ Actions against the sign-in/sign-up top-navbar section. """ def click_on_signin_signup_button(self): """Click on the 'Sign In/Up' button""" self._click(self.signin_signup_button) def mouse_over_profile_avatar(self): """Mouse over the profile avatar""" self._hover_over_element(self.signed_in_username) self._wait_for_locator(self.sign_out_button) def click_on_sign_out_button(self): """Click on the 'Sign Out' button""" self.mouse_over_profile_avatar() self._click(self.sign_out_button) def sign_in_up_button_displayed_element(self) -> Locator: """Get the 'Sign In/Up' button displayed element locator""" return self.signin_signup_button def is_sign_in_up_button_displayed(self) -> bool: """Check if the 'Sign In/Up' button is displayed""" return self._is_element_visible(self.signin_signup_button) """ Actions against the user profile top-navbar section. """ def click_on_view_profile_option(self): """Click on the 'View Profile' option""" self.mouse_over_profile_avatar() self._click(self.signed_in_view_profile_option) # Sometimes the top-navbar is not hidden after clicking on the 'Settings' option. This # action is to move the mouse to the top-left corner of the page to hide the top-navbar. self._move_mouse_to_location(0, 0) def click_on_edit_profile_option(self): """Click on the 'Edit Profile' option""" self.mouse_over_profile_avatar() self._click(self.signed_in_edit_profile_option) # Sometimes the top-navbar is not hidden after clicking on the 'Settings' option. This # action is to move the mouse to the top-left corner of the page to hide the top-navbar. self._move_mouse_to_location(0, 0) def click_on_settings_profile_option(self): """Click on the 'Settings' option""" self.mouse_over_profile_avatar() self._click(self.signed_in_settings_option) # Sometimes the top-navbar is not hidden after clicking on the 'Settings' option. This # action is to move the mouse to the top-left corner of the page to hide the top-navbar. self._move_mouse_to_location(0, 0) def click_on_inbox_option(self): """Click on the 'Inbox' option""" self.mouse_over_profile_avatar() self._click(self.signed_in_inbox_option) # Sometimes the top-navbar is not hidden after clicking on the 'Settings' option. This # action is to move the mouse to the top-left corner of the page to hide the top-navbar. self._move_mouse_to_location(0, 0) def click_on_my_questions_profile_option(self): """Click on the 'My Questions' option""" self.mouse_over_profile_avatar() self._click(self.signed_in_my_questions_option) # Sometimes the top-navbar is not hidden after clicking on the 'Settings' option. This # action is to move the mouse to the top-left corner of the page to hide the top-navbar. self._move_mouse_to_location(0, 0) def get_text_of_logged_in_username(self) -> str: """Get the text of the logged in username""" return self._get_text_of_element(self.signed_in_username) def is_unread_message_notification_displayed(self) -> bool: """Check if the unread message notification is displayed""" return self._is_element_visible(self.unread_message_profile_notification) def get_unread_message_notification_counter_value(self) -> int: """Get the unread message notification counter value""" return int(self._get_text_of_element(self.unread_message_count)) def is_unread_message_notification_counter_visible(self) -> bool: """Check if the unread message notification counter is visible""" return self._is_element_visible(self.unread_message_count) """ General actions against the top-navbar section. """ def get_available_menu_titles(self) -> list[str]: """Get the available menu titles""" return self._get_text_of_elements(self.menu_titles)