playwright_tests/pages/user_pages/my_profile_page.py (160 lines of code) (raw):
from playwright.sync_api import Page, ElementHandle, Locator
from playwright_tests.core.basepage import BasePage
class MyProfilePage(BasePage):
def __init__(self, page: Page):
super().__init__(page)
# Sidebar locators
self.user_navbar_options = page.locator("ul#user-nav li a")
self.user_navbar_selected_element = page.locator("a.selected")
# Admin/other user actions locators
self.edit_user_profile_option = page.locator("div#admin-actions").get_by_role(
"link").filter(has_text="Edit user profile")
self.report_abuse_profile_option = page.locator("article#profile").get_by_role(
"link").filter(has_text="Report Abuse")
self.deactivate_this_user_button = page.locator("input[value='Deactivate this user']")
self.deactivate_this_user_and_mark_all_content_as_spam = page.locator(
"input[value='Deactivate this user and mark all content as spam']")
self.private_message_button = page.locator("p.pm").get_by_role("link")
# Report Abuse locators
self.report_abuse_panel = page.locator("section#report-abuse-")
self.spam_or_other_unrelated_content_option = page.locator("label").filter(
has_text="Spam or other unrelated content")
self.inappropriate_language_or_dialog_option = page.locator("label").filter(
has_text="Inappropriate language/dialog")
self.other_please_specify_option = page.locator("label").filter(
has_text="Other (please specify)")
self.have_more_to_say_textarea = page.locator("textarea[name='other']")
self.report_abuse_close_panel_button = page.locator(
"div[class='mzp-c-modal-close'] button")
self.report_abuse_submit_button = page.locator(
"section#report-abuse- button[type='submit']")
self.reported_user_confirmation_message = page.locator("span[class='message']")
# Contributions section locators
self.questions_link = page.locator("section[class='contributions']").get_by_role(
"link").filter(has_text="question")
self.answers_link = page.locator("section[class='contributions']").get_by_role(
"link").filter(has_text="answer")
self.provided_solutions_text = page.locator("section[class='contributions']").get_by_role(
"listitem").filter(has_text="solution")
self.provided_documents_link = page.locator("section[class='contributions']").get_by_role(
"link").filter(has_text="document")
# My Profile page details locators
self.page_header = page.locator("h1[class='sumo-page-heading']")
self.page_subheading = page.locator("article#profile h2[class*='sumo-page-subheading']")
self.email_address = page.locator("p strong")
self.displayed_email_address = page.locator(
"li[class='avatar-group--details-item'] span[class='email'] a")
self.sign_out_button = page.locator("article#profile").get_by_role("link").filter(
has_text="Sign Out")
self.display_name_header = page.locator("h2[class='sumo-callout-heading user']")
self.display_name_by_username = lambda username: page.get_by_role(
"heading", name=username, exact=True)
self.username_info = page.locator("span[class='username']")
self.location_info = page.locator("h2[class*='location']")
self.website_info = page.locator(
"//label[contains(text(), 'Website')]/following-sibling::a")
self.twitter_info = page.locator(
"//label[contains(text(), 'Twitter')]/following-sibling::a")
self.community_portal_info = page.locator(
"//label[contains(text(), 'Community Portal')]/following-sibling::a")
self.people_directory_info = page.locator(
"//label[contains(text(), 'People Directory')]/following-sibling::a")
self.matrix_info = page.locator("//label[contains(text(),'Matrix')]/parent::li")
self.contributed_from_info = page.locator("//section[@class='contributions']//li[1]")
self.bio_info = page.locator("section[class='bio'] p")
self.groups_section = page.locator("section[class='groups']")
self.groups_heading = page.locator("section[class='groups'] h2")
self.groups_list_items = page.locator("section[class='groups'] ul li")
self.group_by_name = lambda group_name: page.locator(
"section[class='groups']").get_by_role("link", name=group_name, exact=True)
# My profile page actions.
def get_my_profile_display_name_header_text(self) -> str:
"""Get the display name header text."""
return self._get_text_of_element(self.display_name_header)
def get_expected_header_locator(self, expected_username: str) -> Locator:
"""Get the expected header locator.
Args:
expected_username (str): The expected username
"""
return self.display_name_by_username(expected_username)
def get_my_profile_display_name_username_text(self) -> str:
"""Get the display name username text."""
return self._get_text_of_element(self.username_info)
def get_my_profile_location_text(self) -> str:
"""Get the location text."""
return self._get_text_of_element(self.location_info)
def get_my_profile_website_text(self) -> str:
"""Get the website text."""
return self._get_text_of_element(self.website_info)
def get_my_profile_twitter_text(self) -> str:
"""Get the Twitter text."""
return self._get_text_of_element(self.twitter_info)
def get_my_profile_community_portal_text(self) -> str:
"""Get the community portal text."""
return self._get_text_of_element(self.community_portal_info)
def get_my_profile_people_directory_text(self) -> str:
"""Get the people directory text."""
return self._get_text_of_element(self.people_directory_info)
def get_my_profile_matrix_text(self) -> str:
"""Get the Matrix text."""
return self._get_text_of_element(self.matrix_info)
def get_my_contributed_from_text(self) -> str:
"""Get the contributed from text."""
return self._get_text_of_element(self.contributed_from_info)
def get_my_profile_bio_text_paragraphs(self) -> list[str]:
"""Get the bio text."""
return self._get_text_of_elements(self.bio_info)
def get_my_profile_page_header(self) -> str:
"""Get the profile page header."""
return self._get_text_of_element(self.page_header)
def get_my_profile_email_information(self) -> str:
"""Get the email information."""
return self._get_text_of_element(self.email_address)
def get_text_of_selected_navbar_option(self) -> str:
"""Get the text of the selected navbar option."""
return self._get_text_of_element(self.user_navbar_selected_element)
def get_navbar_menu_options(self) -> list[ElementHandle]:
"""Get the navbar menu options."""
return self._get_element_handles(self.user_navbar_options)
def get_text_of_all_navbar_menu_options(self) -> list[str]:
"""Get the text of all navbar menu options."""
return self._get_text_of_elements(self.user_navbar_options)
def get_text_of_publicly_displayed_username(self) -> str:
"""Get the text of the publicly displayed username."""
return self._get_text_of_element(self.displayed_email_address)
def get_text_of_profile_subheading_location(self) -> str:
"""Get the text of the profile subheading location."""
return self._get_text_of_element(self.page_subheading)
def get_my_profile_questions_text(self) -> str:
"""Get the profile questions text."""
return self._get_text_of_element(self.questions_link)
def is_question_displayed(self) -> bool:
"""Check if the question is displayed."""
return self._is_element_visible(self.questions_link)
def get_my_profile_solutions_text(self) -> str:
"""Get the profile solutions text."""
return self._get_text_of_element(self.provided_solutions_text)
def is_solutions_displayed(self) -> bool:
"""Check if the solutions are displayed."""
return self._is_element_visible(self.provided_solutions_text)
def get_my_profile_documents_text(self) -> str:
"""Get the profile documents text."""
return self._get_text_of_element(self.provided_documents_link)
def get_my_profile_answers_text(self) -> str:
"""Get the profile answers text."""
return self._get_text_of_element(self.answers_link)
def get_my_profile_groups_heading_text(self) -> str:
"""Get the profile groups heading text."""
return self._get_text_of_element(self.groups_heading)
def get_my_profile_groups_items_text(self) -> set[str]:
"""Get the profile groups items text."""
return set(self._get_text_of_elements(self.groups_list_items))
def click_on_edit_user_profile_button(self):
"""Click on the edit user profile button."""
self._click(self.edit_user_profile_option)
def click_my_profile_answers_link(self):
"""Click on the profile answers link."""
self._click(self.answers_link)
def click_on_my_profile_questions_link(self):
"""Click on the profile questions link."""
self._click(self.questions_link)
def click_on_my_profile_document_link(self):
"""Click on the profile document link."""
self._click(self.provided_documents_link)
def click_on_my_website_link(self):
"""Click on the website link."""
self._click(self.website_info)
def click_on_twitter_link(self):
"""Click on the Twitter link."""
self._click(self.twitter_info)
def click_on_community_portal_link(self):
"""Click on the community portal link."""
self._click(self.community_portal_info)
def click_on_people_directory_link(self):
"""Click on the people directory link."""
self._click(self.people_directory_info)
def click_on_element(self, element: ElementHandle):
"""Click on the given element."""
element.click()
def click_my_profile_page_sign_out_button(self, expected_url=None):
"""Click on the profile page sign out button.
Args:
expected_url (str): The expected URL after clicking the 'sign out' button
"""
self._click(self.sign_out_button, expected_url=expected_url)
def click_on_report_abuse_option(self):
"""Click on the report abuse option."""
self._click(self.report_abuse_profile_option)
def click_on_report_abuse_close_button(self):
"""Click on the report abuse close button."""
self._click(self.report_abuse_close_panel_button)
def click_on_private_message_button(self, expected_url=None):
"""Click on the private message button.
Args:
expected_url (str): The expected URL after clicking the private message button.
"""
self._click(self.private_message_button, expected_url=expected_url)
def publicly_displayed_email_element(self) -> Locator:
"""Get the locator for the publicly displayed email element."""
return self.displayed_email_address
def is_website_information_displayed(self) -> bool:
"""Check if the website information is displayed."""
return self._is_element_visible(self.website_info)
def groups_section_element(self) -> Locator:
"""Get the locator for the groups section."""
return self.groups_section
def click_on_a_particular_profile_group(self, group_name: str):
"""Click on a particular profile group.
Args:
group_name (str): The name of the group to click on
"""
self._click(self.group_by_name(group_name))
def edit_user_profile_option_element(self) -> Locator:
"""Get the locator for the edit user profile option."""
return self.edit_user_profile_option
def is_report_user_option_displayed(self) -> Locator:
"""Get the locator for the report user option."""
return self.report_abuse_profile_option
def is_report_abuse_panel_displayed(self) -> Locator:
"""Get the locator for the report abuse panel."""
return self.report_abuse_panel
def is_deactivate_this_user_button_displayed(self) -> Locator:
"""Get the locator for the deactivate this user button."""
return self.deactivate_this_user_button
def deactivate_user_and_mark_content_as_spam_button(self) -> Locator:
"""Get the locator for the deactivate user and mark content as spam button."""
return self.deactivate_this_user_and_mark_all_content_as_spam