playwright_tests/pages/user_pages/my_profile_edit.py (158 lines of code) (raw):

from playwright.sync_api import Page, Locator from playwright_tests.core.basepage import BasePage class MyProfileEdit(BasePage): def __init__(self, page: Page): super().__init__(page) # Access denied section self.access_denied_main_header = page.locator("article#error-page h1") self.access_denied_subheading_message = page.locator("div[class='center-on-mobile'] p") # Navbar section self.my_profile_user_navbar_options = page.locator("ul#user-nav li a") self.my_profile_user_navbar_selected_element = page.locator("a[class='selected']") # Edit profile page self.edit_my_profile_edit_input_form = page.locator("article#edit-profile form") self.edit_my_profile_main_header = page.locator("h1[class='sumo-page-heading']") self.manage_firefox_account_button = page.get_by_role("link").filter( has_text="Manage account") self.username_input_field = page.locator("input#id_username") self.username_error_message = page.locator( "//input[@id='id_username']/following-sibling::span[contains(@class, 'form-error " "is-visible')]") self.display_name_input_field = page.locator("input#id_name") self.biography_textarea_field = page.locator("textarea#id_bio") self.make_email_visible_to_logged_in_users_checkbox = page.locator( "label[for='id_public_email']") self.website_input_field = page.locator("input#id_website") self.twitter_username_field = page.locator("input#id_twitter") self.community_portal_username_field = page.locator("input#id_community_mozilla_org") self.people_directory_username_field = page.locator("input#id_people_mozilla_org") self.matrix_nickname_field = page.locator("input#id_matrix_handle") self.country_dropdown = page.locator("select#id_country") self.city_field = page.locator("input#id_city") self.timezone_dropdown = page.locator("select#id_timezone") self.selected_timezone = page.locator("select#id_timezone option[selected]") self.preferred_locale_dropdown = page.locator("select#id_locale") self.selected_locale = page.locator("select#id_locale option[selected]") self.involved_with_mozilla_from_month = page.locator("select#id_involved_from_month") self.involved_with_mozilla_from_year = page.locator("select#id_involved_from_year") self.cancel_button = page.get_by_role("button").filter(has_text="Cancel") self.update_my_profile_button = page.get_by_role("button").filter( has_text="Update My Profile") self.close_account_and_delete_all_profile_information_link = page.locator( "p.delete-account-link a") self.all_input_edit_profile_input_fields = page.locator( "//form[not(contains(@action, '/en-US/users/close_account'))]/div[@class='field']/" "input[not(contains(@id, 'id_username'))]" ) def get_access_denied_header_text(self) -> str: """Return the text of the access denied header""" return self._get_text_of_element(self.access_denied_main_header) def get_access_denied_subheading_text(self) -> str: """Return the text of the access denied subheading message""" return self._get_text_of_element(self.access_denied_subheading_message) def get_value_of_all_input_fields(self) -> list[str]: """Return the value of all input fields""" elements = self._get_element_handles(self.all_input_edit_profile_input_fields) return [el.input_value() for el in elements] def get_timezone_select_value(self) -> str: """Return the selected value of the timezone dropdown""" return self._get_element_inner_text_from_page(self.selected_timezone) def get_preferred_locale_select_value(self) -> str: """Return the selected value of the preferred locale dropdown""" return self._get_element_inner_text_from_page(self.selected_locale) def get_involved_with_mozilla_month_select_value(self) -> str: """Return the selected value of the involved with mozilla month dropdown""" return self._get_text_of_element(self.involved_with_mozilla_from_month) def get_involved_with_mozilla_year_select_value(self) -> str: """Return the selected value of the involved with mozilla year dropdown""" return self._get_text_of_element(self.involved_with_mozilla_from_year) def get_value_of_all_fields(self) -> list[str]: """Return the value of all fields""" return [ self.get_value_of_all_input_fields(), self.get_timezone_select_value(), self.get_preferred_locale_select_value(), self.get_involved_with_mozilla_month_select_value(), self.get_involved_with_mozilla_year_select_value(), ] def get_username_input_field_value(self) -> str: """Return the value of the username input field""" return self._get_element_input_value(self.username_input_field) def get_username_error_message_text(self) -> str: """Return the text of the username error message""" return self._get_text_of_element(self.username_error_message) def get_display_name_input_field_value(self) -> str: """Return the value of the display name input field""" return self._get_element_input_value(self.display_name_input_field) def get_website_input_field_value(self) -> str: """Return the value of the website input field""" return self._get_element_input_value(self.website_input_field) def get_twitter_input_field_value(self) -> str: """Return the value of the twitter input field""" return self._get_element_input_value(self.twitter_username_field) def get_community_portal_field_value(self) -> str: """Return the value of the community portal input field""" return self._get_element_input_value(self.community_portal_username_field) def get_people_directory_field_value(self) -> str: """Return the value of the people directory input field""" return self._get_element_input_value(self.people_directory_username_field) def get_matrix_username_field_value(self) -> str: """Return the value of the matrix nickname input field""" return self._get_element_input_value(self.matrix_nickname_field) def get_city_field_value(self) -> str: """Return the value of the city input field""" return self._get_element_input_value(self.city_field) def send_text_to_username_field(self, text: str): """Send text to the username input field""" self._fill(self.username_input_field, text) def send_text_to_display_name_field(self, text: str): """Send text to the display name input field""" self._fill(self.display_name_input_field, text) def send_text_to_biography_field(self, text: str): """Send text to the biography textarea field""" self._fill(self.biography_textarea_field, text) def send_text_to_website_field(self, text: str): """Send text to the website input field""" self._fill(self.website_input_field, text) def send_text_to_twitter_username_field(self, text: str): """Send text to the twitter input field""" self._fill(self.twitter_username_field, text) def send_text_to_community_portal_field(self, text: str): """Send text to the community portal input field""" self._fill(self.community_portal_username_field, text) def send_text_to_people_directory_username(self, text: str): """Send text to the people directory input field""" self._fill(self.people_directory_username_field, text) def send_text_to_matrix_nickname(self, text: str): """Send text to the matrix nickname input field""" self.matrix_nickname_field.fill(text) def sent_text_to_city_field(self, text: str): """Send text to the city input field""" self._fill(self.city_field, text) def select_country_dropdown_option_by_value(self, option_value: str): """Select an option from the country dropdown""" self._select_option_by_value(self.country_dropdown, option_value) def select_timezone_dropdown_option_by_value(self, option_value: str): """Select an option from the timezone dropdown""" self._select_option_by_value(self.timezone_dropdown, option_value) def select_preferred_language_dropdown_option_by_value(self, option_value: str): """Select an option from the preferred locale dropdown""" self._select_option_by_value(self.preferred_locale_dropdown, option_value) def select_involved_from_month_option_by_value(self, option_value: str): """Select an option from the involved with mozilla month dropdown""" self._select_option_by_value(self.involved_with_mozilla_from_month, option_value) def select_involved_from_year_option_by_value(self, option_value: str): """Select an option from the involved with mozilla year dropdown""" self._select_option_by_value(self.involved_with_mozilla_from_year, option_value) def clear_all_input_fields(self, only_profile_info=False): """Clear all input fields Args: only_profile_info (bool): Clear only the profile info fields ignoring the username and display name fields """ for input_element in self._get_element_handles(self.all_input_edit_profile_input_fields): if only_profile_info: element_id = self._get_element_attribute_value(input_element, "id") if element_id == "id_username" or element_id == "id_name": continue input_element.fill("") def clear_biography_textarea_field(self): """Clear the biography textarea field""" self._clear_field(self.biography_textarea_field) def clear_username_field(self): """Clear the username input field""" self._clear_field(self.username_input_field) def clear_display_name_field(self): """Clear the display name input field""" self._clear_field(self.display_name_input_field) def clear_website_field(self): """Clear the website input field""" self._clear_field(self.website_input_field) def clear_twitter_field(self): """Clear the twitter input field""" self._clear_field(self.twitter_username_field) def clear_community_portal_field(self): """Clear the community portal input field""" self._clear_field(self.community_portal_username_field) def clear_people_directory_field(self): """Clear the people directory input field""" self._clear_field(self.people_directory_username_field) def clear_matrix_field(self): """Clear the matrix nickname input field""" self._clear_field(self.matrix_nickname_field) def clear_country_dropdown_field(self): """Clear the country dropdown field""" self._select_option_by_value(self.country_dropdown, "") def clear_city_field(self): """Clear the city input field""" self._clear_field(self.city_field) def clear_involved_from_month_select_field(self): """Clear the involved with mozilla month dropdown""" self._select_option_by_value(self.involved_with_mozilla_from_month, "0") def clear_involved_from_year_select_field(self): """Clear the involved with mozilla year dropdown""" self._select_option_by_value(self.involved_with_mozilla_from_year, "0") def click_cancel_button(self): """Click the cancel button""" self._click(self.cancel_button) def click_update_my_profile_button(self, expected_url=None, expected_locator=None): """Click the update my profile button""" self._click(self.update_my_profile_button, expected_url=expected_url, expected_locator=expected_locator) def click_close_account_option(self): """Click the close account and delete all profile information link""" self._click(self.close_account_and_delete_all_profile_information_link) def click_manage_firefox_account_button(self): """Click the manage firefox account button""" self._click(self.manage_firefox_account_button) def click_make_email_visible_checkbox(self, check: bool): """Click the make email visible checkbox""" self._checkbox_interaction(self.make_email_visible_to_logged_in_users_checkbox, check) def is_make_email_visible_checkbox_selected(self) -> bool: """Return True if the make email visible checkbox is selected""" return self._is_checkbox_checked(self.make_email_visible_to_logged_in_users_checkbox) def get_my_profile_edit_form_locator(self) -> Locator: """Return the locator of the edit profile form""" return self.edit_my_profile_edit_input_form