From fff9d339fbdd77c9346566c32b287b53f0044b91 Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 14 Dec 2023 10:15:14 -0800 Subject: [PATCH] Revert "- Adding tests for: popular topics page, product solutions page, contact support page, submitted aaq questions for freemium products, freemium aaq form (#5812)" (#5817) This reverts commit db58b90a728edf935e365207ca071690b05a6de2. --- .github/workflows/playwright.yml | 40 -- playwright_tests/core/testutilities.py | 10 - playwright_tests/flows/aaq_flows/aaq_flow.py | 67 +-- .../AAQ_messages/aaq_form_page_messages.py | 10 - .../messages/AAQ_messages/aaq_widget.py | 5 - .../contact_support_messages.py | 23 - .../support_forums_page_messages.py | 4 - .../messages/homepage_messages.py | 3 +- .../kb_article/kb_article_page_messages.py | 2 - .../product_solutions_messages.py | 3 - .../pages/aaq_pages/aaq_form_page.py | 158 ------- .../contact_support_page.py | 38 -- .../pages/forums_pages/support_forums_page.py | 32 -- .../product_solutions_page.py | 43 +- .../pages/product_support_page.py | 4 +- .../product_topics_page.py | 41 -- playwright_tests/pages/sumo_pages.py | 21 - playwright_tests/pages/top_navbar.py | 10 - .../my_profile_my_questions_page.py | 7 - .../user_questions_pages/aaq_form_page.py | 102 +++++ .../user_questions_pages/questions_page.py | 40 +- playwright_tests/pytest.ini | 4 - playwright_tests/test_data/aaq_question.json | 88 +--- playwright_tests/test_data/general_data.json | 52 --- playwright_tests/test_data/test-image.png | Bin 27089 -> 0 bytes .../tests/aaq_tests/test_aaq_page.py | 421 ------------------ .../test_contact_support_page.py | 104 ----- .../test_contribute_article_page.py | 4 +- .../test_contribute_forum_page.py | 4 +- .../test_contribute_localization_page.py | 4 +- .../test_contribute_mobile_page.py | 4 +- .../test_contribute_page.py | 4 +- .../test_contribute_social_media_page.py | 4 +- .../tests/homepage_tests/test_homepage.py | 4 +- .../test_popular_topics_page.py | 125 ------ .../test_product_solutions_page.py | 215 --------- .../user_page_tests/test_my_profile_page.py | 30 +- .../user_page_tests/test_my_questions.py | 44 +- 38 files changed, 155 insertions(+), 1619 deletions(-) delete mode 100644 playwright_tests/messages/AAQ_messages/aaq_form_page_messages.py delete mode 100644 playwright_tests/messages/AAQ_messages/aaq_widget.py delete mode 100644 playwright_tests/messages/contact_support_page_messages/contact_support_messages.py delete mode 100644 playwright_tests/messages/forums_messages/support_forums_page_messages.py delete mode 100644 playwright_tests/messages/product_solutions_page_messages/product_solutions_messages.py delete mode 100644 playwright_tests/pages/aaq_pages/aaq_form_page.py delete mode 100644 playwright_tests/pages/contact_support_pages/contact_support_page.py delete mode 100644 playwright_tests/pages/forums_pages/support_forums_page.py delete mode 100644 playwright_tests/pages/product_topics_pages/product_topics_page.py create mode 100644 playwright_tests/pages/user_questions_pages/aaq_form_page.py delete mode 100644 playwright_tests/test_data/general_data.json delete mode 100644 playwright_tests/test_data/test-image.png delete mode 100644 playwright_tests/tests/aaq_tests/test_aaq_page.py delete mode 100644 playwright_tests/tests/contact_support_page_tests/test_contact_support_page.py delete mode 100644 playwright_tests/tests/popular_topics_page_tests/test_popular_topics_page.py delete mode 100644 playwright_tests/tests/product_solutions_page_tests/test_product_solutions_page.py diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index bdb2887381d..2731cc7031b 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -141,46 +141,6 @@ jobs: if: success() || failure() && steps.create-sessions.outcome == 'success' run: | poetry run pytest -m userQuestions --numprocesses 2 --browser chrome --reruns 1 --html=reports/chrome_user_questions_page_tests.html --capture=tee-sys - - name: Run Contact Support Page Tests (Firefox) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m contactSupportPage --numprocesses 2 --browser firefox --reruns 1 --html=reports/firefox_contact_support_page_tests.html --capture=tee-sys - - name: Run Contact Support Page Tests (Chrome) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m contactSupportPage --numprocesses 2 --browser chrome --reruns 1 --html=reports/chrome_contact_support_page_tests.html --capture=tee-sys - - name: Run Product Solutions Page Tests (Firefox) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m productSolutionsPage --numprocesses 2 --browser firefox --reruns 1 --html=reports/firefox_product_solutions_page_tests.html --capture=tee-sys - - name: Run Product Solutions Page Tests (Chrome) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m productSolutionsPage --numprocesses 2 --browser chrome --reruns 1 --html=reports/chrome_product_solutions_page_tests.html --capture=tee-sys - - name: Run Product Topics Page Tests (Firefox) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m productTopicsPage --numprocesses 2 --browser firefox --reruns 1 --html=reports/firefox_product_topics_page_tests.html --capture=tee-sys - - name: Run Product Topics Page Tests (Chrome) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m productTopicsPage --numprocesses 2 --browser chrome --reruns 1 --html=reports/chrome_product_topics_page_tests.html --capture=tee-sys - - name: Run AAQ Tests (Firefox) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m aaqPage --numprocesses 2 --browser firefox --reruns 1 --html=reports/firefox_aaq_tests.html --capture=tee-sys - - name: Run AAQ Tests (Chrome) - working-directory: playwright_tests - if: success() || failure() && steps.create-sessions.outcome == 'success' - run: | - poetry run pytest -m aaqPage --numprocesses 2 --browser chrome --reruns 1 --html=reports/chrome_aaq_tests.html --capture=tee-sys - name: Combine Reports working-directory: playwright_tests if: success() || failure() diff --git a/playwright_tests/core/testutilities.py b/playwright_tests/core/testutilities.py index 94a3930ee62..aff3c52dbcf 100644 --- a/playwright_tests/core/testutilities.py +++ b/playwright_tests/core/testutilities.py @@ -34,10 +34,6 @@ class TestUtilities: user_message_test_data = json.load(user_message_test_data_file) user_message_test_data_file.close() - with open("test_data/general_data.json", "r") as general_test_data_file: - general_test_data = json.load(general_test_data_file) - general_test_data_file.close() - user_secrets_accounts = { "TEST_ACCOUNT_12": os.environ.get("TEST_ACCOUNT_12"), "TEST_ACCOUNT_13": os.environ.get("TEST_ACCOUNT_13"), @@ -131,9 +127,6 @@ def navigate_to_link(self, link: str): def wait_for_given_timeout(self, milliseconds: int): self.page.wait_for_timeout(milliseconds) - def wait_for_url_to_be(self, expected_url: str): - self.page.wait_for_url(expected_url, timeout=4000) - # Store authentication states def store_session_cookies(self, session_file_name: str): self.context.storage_state(path=f"core/sessions/.auth/{session_file_name}.json") @@ -151,9 +144,6 @@ def start_existing_session(self, session_file_name: str): # session self.page.reload() - def get_user_agent(self) -> str: - return self.page.evaluate('window.navigator.userAgent ') - def replace_special_chars_account(self, account: str) -> str: return account.replace(account, "testMozillaSpecialChars") diff --git a/playwright_tests/flows/aaq_flows/aaq_flow.py b/playwright_tests/flows/aaq_flows/aaq_flow.py index 9ffe411ba01..26449af6335 100644 --- a/playwright_tests/flows/aaq_flows/aaq_flow.py +++ b/playwright_tests/flows/aaq_flows/aaq_flow.py @@ -3,7 +3,7 @@ from playwright_tests.pages.product_solutions_pages.product_solutions_page import ( ProductSolutionsPage) from playwright_tests.pages.top_navbar import TopNavbar -from playwright_tests.pages.aaq_pages.aaq_form_page import AAQFormPage +from playwright_tests.pages.user_questions_pages.aaq_form_page import AAQFormPage from playwright_tests.pages.user_questions_pages.questions_page import QuestionPage @@ -11,65 +11,24 @@ class AAQFlow(AAQFormPage, ProductSolutionsPage, TopNavbar, TestUtilities, Quest def __init__(self, page: Page): super().__init__(page) - # Mozilla VPN has an extra optional dropdown menu for choosing an operating system - def submit_an_aaq_question_for_a_product(self, - subject: str, - topic_name: str, - body: str, - os="", - attach_image=False): - question_subject = self.add__valid_data_to_all_input_fields_without_submitting( - subject, - topic_name, - body, - os, - attach_image - ) - # Submitting the question. - super().click_aaq_form_submit_button() - # Waiting for submitted question reply button visibility. - super().is_post_reply_button_visible() - current_page_url = self._page.url - - # Returning the posted question subject and url for further usage. - return {"aaq_subject": question_subject, "question_page_url": current_page_url} - - # Mozilla VPN has an extra optional dropdown menu for choosing an operating system - def add__valid_data_to_all_input_fields_without_submitting(self, - subject: str, - topic_value: str, - body_text: str, - os='', - attach_image=False): + def submit_valid_firefox_prod_question_via_ask_now_fx_solutions(self) -> dict: random_number = str(super().generate_random_number(min_value=0, max_value=1000)) - aaq_subject = subject + random_number - # Adding text to subject field. + super().click_on_ask_a_question_firefox_browser_option() + super().click_ask_now_button() + aaq_question_data = super().aaq_question_test_data + aaq_subject = aaq_question_data["valid_firefox_question"]["subject"] + " " + random_number super().add_text_to_aaq_form_subject_field(aaq_subject) - # Selecting a topic. super().select_aaq_form_topic_value( - topic_value + aaq_question_data["valid_firefox_question"]["topic_value"] ) - # Adding text to question body. super().add_text_to_aaq_textarea_field( - body_text + aaq_question_data["valid_firefox_question"]["question_body"] ) - # Some products contain another OS dropdown menu. We are selecting an option for those. - if os != "": - super().select_aaq_form_os_value(os) - if attach_image: - # Uploading an image to the aaq question form. - super().get_upload_image_button_locator().set_input_files( - super().aaq_question_test_data["valid_firefox_question"]["image_path"] - ) + # Investigate why image upload is not working - # Waiting for the image preview to be displayed. - super().uploaded_image_locator() - - # Returning the entered question subject for further usage. - return aaq_subject + super().click_aaq_form_submit_button() + super().is_post_reply_button_visible() + current_page_url = self._page.url - def adding_an_image_to_aaq_form(self): - super().get_upload_image_button_locator().set_input_files( - super().aaq_question_test_data["valid_firefox_question"]["image_path"] - ) + return {"aaq_subject": aaq_subject, "question_page_url": current_page_url} diff --git a/playwright_tests/messages/AAQ_messages/aaq_form_page_messages.py b/playwright_tests/messages/AAQ_messages/aaq_form_page_messages.py deleted file mode 100644 index be71e60d8d1..00000000000 --- a/playwright_tests/messages/AAQ_messages/aaq_form_page_messages.py +++ /dev/null @@ -1,10 +0,0 @@ -class AAQFormMessages: - COMPLETED_MILESTONE_ONE = "Change Product" - COMPLETED_MILESTONE_TWO = "Explore Solutions" - IN_PROGRESS_MILESTONE = "Get Support" - SUMO_PAGE_INTRO = ("Be nice. Our volunteers are Mozilla users just like you, who take the " - "time out of their day to help.") - INFO_CARD = ("Be descriptive. Saying “playing video on YouTube is always choppy” will help us " - "understand the issue better than saying “something is wrong” or “the app is " - "broken”.") - ERROR_MESSAGE = "This field is required." diff --git a/playwright_tests/messages/AAQ_messages/aaq_widget.py b/playwright_tests/messages/AAQ_messages/aaq_widget.py deleted file mode 100644 index d52eeadf66b..00000000000 --- a/playwright_tests/messages/AAQ_messages/aaq_widget.py +++ /dev/null @@ -1,5 +0,0 @@ -class AAQWidgetMessages: - FREEMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT = "Ask Now" - PREMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT = "Contact Support" - FREEMIUM_AAQ_SUBHEADING_TEXT_SIGNED_OUT = "Sign in/up to post your question and get help." - PREMIUM_AAQ_SUBHEADING_TEXT = "Send a message to our support team." diff --git a/playwright_tests/messages/contact_support_page_messages/contact_support_messages.py b/playwright_tests/messages/contact_support_page_messages/contact_support_messages.py deleted file mode 100644 index c76600b34ad..00000000000 --- a/playwright_tests/messages/contact_support_page_messages/contact_support_messages.py +++ /dev/null @@ -1,23 +0,0 @@ -class ContactSupportMessages: - PAGE_URL = "https://support.allizom.org/en-US/questions/new" - PAGE_URL_CHANGE_PRODUCT_REDIRECT = PAGE_URL + "?q=change_product" - CURRENT_MILESTONE = "Select Product" - MAIN_HEADER = "Contact Support" - SUBHEADING = "Which product do you need help with?" - PRODUCT_CARDS_SUBHEADING = { - "Firefox": "Web browser for Windows, Mac and Linux", - "Firefox for Android": "Web browser for Android smartphones and tablets", - "Firefox for iOS": "Firefox for iPhone, iPad and iPod touch devices", - "Firefox for Enterprise": "Firefox Quantum for businesses", - "MDN Plus": "MDN Plus provides a custom experience for MDN supporters.", - "Firefox Reality": "Firefox for Virtual Reality headsets", - "Mozilla VPN": "VPN for Windows 10, Android and iOS devices", - "Firefox Private Network": "Browse securely on public Wi-Fi", - "Firefox Relay": "Service that lets you create aliases to hide your real email", - "Pocket": "The web’s most intriguing articles", - "Hubs": "Virtual 3D meeting spaces for collaborating with friends, family, " - "and colleagues on your browser or VR headset", - "Thunderbird": "Email software for Windows, Mac and Linux", - "Firefox Focus": "Automatic privacy browser and content blocker", - "Mozilla Account": "Mozilla account is the account system for Mozilla" - } diff --git a/playwright_tests/messages/forums_messages/support_forums_page_messages.py b/playwright_tests/messages/forums_messages/support_forums_page_messages.py deleted file mode 100644 index e99857af06f..00000000000 --- a/playwright_tests/messages/forums_messages/support_forums_page_messages.py +++ /dev/null @@ -1,4 +0,0 @@ -class SupportForumsPageMessages: - PAGE_URL = "https://support.allizom.org/en-US/questions/" - PAGE_TITLE = "Support Forums" - PAGE_SUBTITLE = "Browse by product" diff --git a/playwright_tests/messages/homepage_messages.py b/playwright_tests/messages/homepage_messages.py index 5ed6342db5a..83d7c7d068a 100644 --- a/playwright_tests/messages/homepage_messages.py +++ b/playwright_tests/messages/homepage_messages.py @@ -1,6 +1,5 @@ class HomepageMessages: - STAGE_HOMEPAGE_URL = "https://support.allizom.org" - STAGE_HOMEPAGE_URL_EN_US = "https://support.allizom.org/en-US/" + STAGE_HOMEPAGE_URL = "https://support.allizom.org/en-US/" JOIN_OUR_COMMUNITY_CARD_TITLE = "Join Our Community" JOIN_OUR_COMMUNITY_CARD_DESCRIPTION = ( "Grow and share your expertise with others. Answer questions and improve " diff --git a/playwright_tests/messages/kb_article/kb_article_page_messages.py b/playwright_tests/messages/kb_article/kb_article_page_messages.py index b49b1f069b5..2bacec41cea 100644 --- a/playwright_tests/messages/kb_article/kb_article_page_messages.py +++ b/playwright_tests/messages/kb_article/kb_article_page_messages.py @@ -1,4 +1,2 @@ class KBArticlePageMessages: CREATE_NEW_KB_ARTICLE_STAGE_URL = "https://support.allizom.org/en-US/kb/new" - GET_COMMUNITY_SUPPORT_ARTICLE_LINK = ("https://support.allizom.org/en-US/kb/get-community" - "-support?exit_aaq=1") diff --git a/playwright_tests/messages/product_solutions_page_messages/product_solutions_messages.py b/playwright_tests/messages/product_solutions_page_messages/product_solutions_messages.py deleted file mode 100644 index 9aeef599de6..00000000000 --- a/playwright_tests/messages/product_solutions_page_messages/product_solutions_messages.py +++ /dev/null @@ -1,3 +0,0 @@ -class ProductSolutionsMessages: - PAGE_HEADER = " Solutions" - CURRENT_MILESTONE_TEXT = "Explore Solutions" diff --git a/playwright_tests/pages/aaq_pages/aaq_form_page.py b/playwright_tests/pages/aaq_pages/aaq_form_page.py deleted file mode 100644 index 8289068bcbc..00000000000 --- a/playwright_tests/pages/aaq_pages/aaq_form_page.py +++ /dev/null @@ -1,158 +0,0 @@ -from playwright.sync_api import Page, ElementHandle, Locator -from playwright_tests.core.basepage import BasePage - - -class AAQFormPage(BasePage): - __uploaded_image_title = "" - __in_progress_item_label = ("//li[@class='progress--item is-current']//span[" - "@class='progress--label']") - __aaq_page_logo = "//img[@class='page-heading--logo']" - __aaq_page_product_heading = "//div[@id='main-content']/article/h3" - __aaq_page_intro_text = "//form[@id='question-form']/p[@class='sumo-page-intro']" - __aaq_page_info_card = "//div[contains(@class, 'info card')]" - - # AAQ Subject - __aaq_subject_input_field = "//input[@id='id_title']" - __aaq_subject_input_field_error_message = "//input[@id='id_title']/following-sibling::ul/li" - - # Product topic dropdown - __product_topic_options = "//select[@id='id_category']/option" - __product_topic_options_without_default_none = ('//select[@id="id_category"]/option[not(' - '@value="")]') - __product_topic_select_dropdown = "//select[@id='id_category']" - __product_topic_select_dropdown_error_message = ("//select[@id='id_category']/../ul[" - "@class='errorlist']/li") - - # Product os dropdown (Available for Mozilla VPN product only) - __product_os_select_dropdown = "//select[@id='id_os']" - - # How can we help textarea field - __how_can_we_help_textarea = "//textarea[@id='id_content']" - __how_can_we_help_textarea_error_field = ("//textarea[@id='id_content']/../following-sibling" - "::ul/li") - - # Add Image - __add_image_browse_button = "//span[text()='Browse...']/.." - __uploaded_test_image_preview = f"//img[@title='{__uploaded_image_title}']" - __uploaded_test_image_delete_button = "//form[@class='upload-input']/input[@class='delete']" - __uploaded_image = "//a[@class='image']/img" - - # Email me when someone answers the thread checkbox - __email_me_checkbox = "//input[@id='id_notifications']" - - # form buttons - __form_submit_button = "//button[contains(text(), 'Submit')]" - __form_cancel_option = "//a[contains(text(),'Cancel')]" - - # Share Data - __share_data_button = "//button[@id='share-data']" - __troubleshooting_information_textarea = "//textarea[@id='id_troubleshooting']" - __try_these_manual_steps_link = "//p[@id='troubleshooting-manual']/a" - __show_details_option = "//a[@class='show']" - __product_version_input = "//input[@id='id_ff_version']" - __product_os = "//input[@id='id_os']" - - # Helfpul Tip section - __helpful_tip_section = "//aside[@class='sumo-l-two-col--sidebar']/div[@class='large-only']" - - # Learn more button - __learn_more_button = "//aside[@class='sumo-l-two-col--sidebar']//a" - - def __init__(self, page: Page): - super().__init__(page) - - def get_in_progress_item_label(self) -> str: - return super()._get_text_of_element(self.__in_progress_item_label) - - def get_product_image_locator(self) -> Locator: - return super()._get_element_locator(self.__aaq_page_logo) - - def get_aaq_form_page_heading(self) -> str: - return super()._get_text_of_element(self.__aaq_page_product_heading) - - def get_aaq_form_page_intro_text(self) -> str: - return super()._get_text_of_element(self.__aaq_page_intro_text) - - def get_aaq_form_info_card_text(self) -> str: - return super()._get_text_of_element(self.__aaq_page_info_card) - - def get_aaq_form_subject_error(self) -> str: - return super()._get_text_of_element(self.__aaq_subject_input_field_error_message) - - def get_learn_more_button_locator(self) -> Locator: - return super()._get_element_locator(self.__learn_more_button) - - def get_helpful_tip_locator(self) -> Locator: - return super()._get_element_locator(self.__helpful_tip_section) - - def get_aaq_form_topic_select_error(self) -> str: - return super()._get_text_of_element(self.__product_topic_select_dropdown_error_message) - - # Returns all the non-default selectable topic options. - def get_aaq_form_topic_options(self) -> list[str]: - return super()._get_text_of_elements(self.__product_topic_options_without_default_none) - - def get_aaq_form_body_error(self) -> str: - return super()._get_text_of_element(self.__how_can_we_help_textarea_error_field) - - def add_text_to_aaq_form_subject_field(self, text: str): - super()._fill(self.__aaq_subject_input_field, text) - - def add_text_to_troubleshooting_information_textarea(self, text: str): - super()._fill(self.__troubleshooting_information_textarea, text) - - def add_text_to_product_version_field(self, text: str): - super()._fill(self.__product_version_input, text) - - def add_text_to_os_field(self, text: str): - super()._fill(self.__product_os, text) - - def select_aaq_form_topic_value(self, value: str): - super()._select_option_by_value(self.__product_topic_select_dropdown, value) - - def select_aaq_form_os_value(self, value: str): - super()._select_option_by_value(self.__product_os_select_dropdown, value) - - def add_text_to_aaq_textarea_field(self, text: str): - super()._fill(self.__how_can_we_help_textarea, text) - - def image_preview_element(self) -> ElementHandle: - return super()._get_element_handle(self.__uploaded_test_image_preview) - - def uploaded_image_locator(self) -> Locator: - try: - super()._wait_for_selector(self.__uploaded_image) - except TimeoutError: - print("Uploaded image not displayed") - return super()._get_element_locator(self.__uploaded_image) - - def uploaded_images_handles(self) -> list[ElementHandle]: - return super()._get_element_handles(self.__uploaded_image) - - def get_upload_image_button_locator(self) -> Locator: - return super()._get_element_locator(self.__add_image_browse_button) - - def click_on_email_me_when_someone_answers_the_thread_checkbox(self): - super()._click(self.__email_me_checkbox) - - def click_on_a_particular_completed_milestone(self, milestone_name: str): - xpath = f'//span[@class="progress--label" and text()="{milestone_name}"]/../..' - super()._click(xpath) - - def click_aaq_form_cancel_button(self): - super()._click(self.__form_cancel_option) - - def click_aaq_form_submit_button(self): - super()._click(self.__form_submit_button) - - def click_on_learn_more_button(self): - super()._click(self.__learn_more_button) - - def click_on_share_data_button(self): - super()._click(self.__share_data_button) - - def click_on_show_details_option(self): - super()._click(self.__show_details_option) - - def click_on_try_these_manual_steps_link(self): - super()._click(self.__try_these_manual_steps_link) diff --git a/playwright_tests/pages/contact_support_pages/contact_support_page.py b/playwright_tests/pages/contact_support_pages/contact_support_page.py deleted file mode 100644 index 4dc7f29fe1c..00000000000 --- a/playwright_tests/pages/contact_support_pages/contact_support_page.py +++ /dev/null @@ -1,38 +0,0 @@ -from playwright.sync_api import Page -from playwright_tests.core.basepage import BasePage - - -class ContactSupportPage(BasePage): - __current_milestone = ("//li[@class='progress--item is-current']//span[" - "@class='progress--label']") - __page_main_heading = "//h1[@class='sumo-page-heading']" - __page_subheading = "//h2[@class='sumo-page-subheading']" - __browse_all_product_forums_button = "//a[contains(text(), 'Browse All Product Forums')]" - __product_cards_titles = "//div[@id='product-picker']//h3[@class='card--title']" - - def __init__(self, page: Page): - super().__init__(page) - - def _get_text_of_current_milestone(self) -> str: - return super()._get_text_of_element(self.__current_milestone) - - def _get_contact_support_main_heading(self) -> str: - return super()._get_text_of_element(self.__page_main_heading) - - def _get_contact_support_subheading_text(self) -> str: - return super()._get_text_of_element(self.__page_subheading) - - def _get_all_product_card_titles(self) -> list[str]: - return super()._get_text_of_elements(self.__product_cards_titles) - - def _get_product_card_subtitle(self, card_name: str) -> str: - xpath = (f"//a[@data-event-label='{card_name}']/..//following-sibling::p[" - f"@class='card--desc']") - return super()._get_text_of_element(xpath) - - def _click_on_browse_all_product_forums_button(self): - super()._click(self.__browse_all_product_forums_button) - - def _click_on_a_particular_card(self, card_name: str): - xpath = f"//h3[@class='card--title']/a[@data-event-label='{card_name}']" - super()._click(xpath) diff --git a/playwright_tests/pages/forums_pages/support_forums_page.py b/playwright_tests/pages/forums_pages/support_forums_page.py deleted file mode 100644 index beba8205294..00000000000 --- a/playwright_tests/pages/forums_pages/support_forums_page.py +++ /dev/null @@ -1,32 +0,0 @@ -from playwright.sync_api import Page -from playwright_tests.core.basepage import BasePage - - -class SupportForumsPage(BasePage): - __page_main_heading = "//h1[@class='sumo-page-heading']" - __page_intro = "//p[@class='sumo-page-intro']" - __product_card_titles = "//h3[@class='card--title']" - __all_products_support_forum_button = "//a[contains(text(), 'All Products Support Forum')]" - - def __init__(self, page: Page): - super().__init__(page) - - def _get_page_heading_text(self) -> str: - return super()._get_text_of_element(self.__page_main_heading) - - def _get_page_intro_text(self) -> str: - return super()._get_text_of_element(self.__page_intro) - - def _get_product_card_titles_list(self) -> list[str]: - return super()._get_text_of_elements(self.__product_card_titles) - - def _get_card_description_text(self, card_title: str) -> str: - xpath = f"//strong[text()='{card_title}']/../../following-sibling::p" - return super()._get_text_of_element(xpath) - - def _click_on_all_products_support_forum_button(self): - super()._click(self.__all_products_support_forum_button) - - def _click_on_a_particular_product_card(self, card_name: str): - xpath = f"//strong[text()='{card_name}']" - super()._click(xpath) diff --git a/playwright_tests/pages/product_solutions_pages/product_solutions_page.py b/playwright_tests/pages/product_solutions_pages/product_solutions_page.py index fdfec8b6d10..8ecf9c73dc8 100644 --- a/playwright_tests/pages/product_solutions_pages/product_solutions_page.py +++ b/playwright_tests/pages/product_solutions_pages/product_solutions_page.py @@ -6,59 +6,22 @@ class ProductSolutionsPage(BasePage): __complete_progress_item = "//li[@class='progress--item is-complete']/a" __complete_progress_item_label = ("//li[@class='progress--item is-complete']//span[" "@class='progress--label']") + __current_progress_item = "//li[@class='progress--item is-current']/a" __current_progress_item_label = ("//li[@class='progress--item is-current']//span[" "@class='progress--label']") __product_title_heading = "//span[@class='product-title-text']" __product_solutions_find_help_searchbar = "//form[@id='question-search-masthead']/input" __product_solutions_find_help_search_button = "//form[@id='question-search-masthead']/button" __page_heading_intro_text = "//p[@class='page-heading--intro-text']" - __still_need_help_subheading = "//div[contains(@class, 'aaq-widget')]/p" __still_need_help_ask_now_button = "//a[@data-event-action='aaq']" - __featured_article_section_title = "//h2[contains(text(),'Featured Articles')]" __featured_articles_cards = "//h2[contains(text(),'Featured Articles')]/../..//a" - __popular_topics_section_title = "//h2[contains(text(),'Popular Topics')]" __popular_topics_cards = "//h2[contains(text(),'Popular Topics')]/../..//a" def __init__(self, page: Page): super().__init__(page) - def _click_ask_now_button(self): + def click_ask_now_button(self): super()._click(self.__still_need_help_ask_now_button) - def _click_on_the_completed_milestone(self): - super()._click(self.__complete_progress_item) - - def _click_on_a_featured_article_card(self, card_name: str): - xpath = f'//h2[contains(text(),"Featured Articles")]/../..//a[text()="{card_name}"]' - super()._click(xpath) - - def _click_on_a_popular_topic_card(self, card_name: str): - xpth = f'//h2[contains(text(),"Popular Topics")]/../..//a[@data-event-label="{card_name}"]' - super()._click(xpth) - - def _get_current_milestone_text(self) -> str: - return super()._get_text_of_element(self.__current_progress_item_label) - - def _get_product_solutions_heading(self) -> str: - return super()._get_text_of_element(self.__product_title_heading) - - def _get_aaq_subheading_text(self) -> str: - return super()._get_text_of_element(self.__still_need_help_subheading) - - def _get_all_featured_articles_titles(self) -> list[str]: - return super()._get_text_of_elements(self.__featured_articles_cards) - - def _get_aaq_widget_button_name(self) -> str: - return super()._get_text_of_element(self.__still_need_help_ask_now_button) - - def _get_popular_topics(self) -> list[str]: - return super()._get_text_of_elements(self.__popular_topics_cards) - - def _is_product_solutions_page_header_displayed(self) -> ElementHandle: + def is_product_solutions_page_header_displayed(self) -> ElementHandle: return super()._get_element_handle(self.__product_title_heading) - - def _is_featured_article_section_displayed(self) -> bool: - return super()._is_element_visible(self.__featured_article_section_title) - - def _is_popular_topics_section_displayed(self) -> bool: - return super()._is_element_visible(self.__popular_topics_section_title) diff --git a/playwright_tests/pages/product_support_page.py b/playwright_tests/pages/product_support_page.py index 305e6e59e76..f05eecaea7e 100644 --- a/playwright_tests/pages/product_support_page.py +++ b/playwright_tests/pages/product_support_page.py @@ -8,8 +8,8 @@ class ProductSupportPage(BasePage): def __init__(self, page: Page): super().__init__(page) - def _get_product_title_text(self) -> str: + def get_product_title_text(self) -> str: return super()._get_text_of_element(self.__product_title) - def _product_product_title_element(self) -> Locator: + def product_product_title_element(self) -> Locator: return super()._get_element_locator(self.__product_title) diff --git a/playwright_tests/pages/product_topics_pages/product_topics_page.py b/playwright_tests/pages/product_topics_pages/product_topics_page.py deleted file mode 100644 index a26acafcc08..00000000000 --- a/playwright_tests/pages/product_topics_pages/product_topics_page.py +++ /dev/null @@ -1,41 +0,0 @@ -from playwright.sync_api import Page -from playwright_tests.core.basepage import BasePage - - -class ProductTopicPage(BasePage): - __page_title = "//h1[@class='topic-title sumo-page-heading']" - __page_subheading = "//div[@class='sumo-article-header--text']/p" - __navbar_links = "//a[@data-event-action='topic sidebar']" - __selected_nav_link = "//a[contains(@class,'selected')]" - __learn_more_button = "//section[@id='get-involved-button']//a" - __still_need_help_subheading = "//div[contains(@class, 'aaq-widget')]/p" - __aaq_button = "//a[@data-event-label='aaq widget']" - - def __init__(self, page: Page): - super().__init__(page) - - def _get_page_title(self) -> str: - return super()._get_text_of_element(self.__page_title) - - def _get_selected_navbar_option(self) -> str: - return super()._get_text_of_element(self.__selected_nav_link) - - def _get_navbar_links_text(self) -> list[str]: - return super()._get_text_of_elements(self.__navbar_links) - - def _get_aaq_subheading_text(self) -> str: - return super()._get_text_of_element(self.__still_need_help_subheading) - - def _click_on_a_navbar_option(self, option_name: str): - xpath = f'//a[@data-event-action="topic sidebar" and contains(text(), "{option_name}")]' - super()._click(xpath) - - def _click_on_aaq_button(self): - super()._click(self.__aaq_button) - - def _click_on_learn_more_button(self): - super()._click(self.__learn_more_button) - - def _get_navbar_option_link(self, option_name: str) -> str: - xpath = f'//a[@data-event-action="topic sidebar" and contains(text(), "{option_name}")]' - return super()._get_element_attribute_value(xpath, "href") diff --git a/playwright_tests/pages/sumo_pages.py b/playwright_tests/pages/sumo_pages.py index d05dfd3572f..3be65e49464 100644 --- a/playwright_tests/pages/sumo_pages.py +++ b/playwright_tests/pages/sumo_pages.py @@ -6,25 +6,19 @@ from playwright_tests.flows.messaging_system_flows.messaging_system_flow import ( MessagingSystemFlows) from playwright_tests.flows.user_profile_flows.edit_profile_data_flow import EditProfileDataFlow -from playwright_tests.pages.aaq_pages.aaq_form_page import AAQFormPage from playwright_tests.pages.articles.kb_article_page import KBArticlePage from playwright_tests.pages.articles.kb_article_show_history_page import KBArticleShowHistoryPage from playwright_tests.pages.auth_page import AuthPage -from playwright_tests.pages.contact_support_pages.contact_support_page import ContactSupportPage from playwright_tests.pages.contribute_pages.contribute_page import ContributePage from playwright_tests.pages.contribute_pages.ways_to_contribute_pages import WaysToContributePages from playwright_tests.pages.footer import FooterSection -from playwright_tests.pages.forums_pages.support_forums_page import SupportForumsPage from playwright_tests.pages.homepage import Homepage from playwright_tests.pages.messaging_system_pages.inbox_page import InboxPage from playwright_tests.pages.messaging_system_pages.mess_system_user_navbar import ( MessagingSystemUserNavbar) from playwright_tests.pages.messaging_system_pages.new_message import NewMessagePage from playwright_tests.pages.messaging_system_pages.sent_messages import SentMessagePage -from playwright_tests.pages.product_solutions_pages.product_solutions_page import \ - ProductSolutionsPage from playwright_tests.pages.product_support_page import ProductSupportPage -from playwright_tests.pages.product_topics_pages.product_topics_page import ProductTopicPage from playwright_tests.pages.top_navbar import TopNavbar from playwright_tests.pages.user_pages.my_profile_answers_page import MyProfileAnswersPage from playwright_tests.pages.user_pages.my_profile_documents_page import MyProfileDocumentsPage @@ -76,28 +70,13 @@ def __init__(self, page: Page): # Contribute page. self.contribute_page = ContributePage(page) - # AAQ Pages - self.aaq_form_page = AAQFormPage(page) - # KB Articles. self.kb_article_page = KBArticlePage(page) self.kb_article_show_history_page = KBArticleShowHistoryPage(page) - # Product Topics page - self.product_topics_page = ProductTopicPage(page) - - # Product Solutions page. - self.product_solutions_page = ProductSolutionsPage(page) - # Product Support page. self.product_support_page = ProductSupportPage(page) - # Contact Support page. - self.contact_support_page = ContactSupportPage(page) - - # Forums - self.support_forums_page = SupportForumsPage(page) - # Auth flow Page. self.auth_flow_page = AuthFlowPage(page) diff --git a/playwright_tests/pages/top_navbar.py b/playwright_tests/pages/top_navbar.py index dac5bb81ace..f7e290978d8 100644 --- a/playwright_tests/pages/top_navbar.py +++ b/playwright_tests/pages/top_navbar.py @@ -14,8 +14,6 @@ class TopNavbar(BasePage): __ask_a_question_option = "//h4[contains(text(),'Ask a Question')]/parent::a" __aaq_firefox_browser_option = ("//div[@id='main-navigation']//h4[contains(text(), 'Ask a " "Question')]/../..//a[contains(text(),'Firefox Browser')]") - __browse_all_products_option = "//div[@id='main-navigation']//a[text()='Browse All Products']" - # Contribute Tools __contribute_option = "//a[contains(text(),'Contribute')]" @@ -78,18 +76,10 @@ def click_on_my_questions_profile_option(self): super()._hover_over_element(self.__signed_in_username) super()._click(self.__signed_in_my_questions_option) - def click_on_ask_a_question_option(self): - super()._hover_over_element(self.__get_help_option) - super()._click(self.__ask_a_question_option) - def click_on_ask_a_question_firefox_browser_option(self): super()._hover_over_element(self.__get_help_option) super()._click(self.__aaq_firefox_browser_option) - def click_on_browse_all_products_option(self): - super()._hover_over_element(self.__get_help_option) - super()._click(self.__browse_all_products_option) - def get_text_of_logged_in_username(self) -> str: return super()._get_text_of_element(self.__signed_in_username) diff --git a/playwright_tests/pages/user_pages/my_profile_my_questions_page.py b/playwright_tests/pages/user_pages/my_profile_my_questions_page.py index 4d991d5e7c5..b2625b978ca 100644 --- a/playwright_tests/pages/user_pages/my_profile_my_questions_page.py +++ b/playwright_tests/pages/user_pages/my_profile_my_questions_page.py @@ -30,10 +30,3 @@ def click_on_a_question_by_index(self, index_of_question: int): def get_text_of_first_listed_question(self) -> str: xpath = "//article[@id='profile']/ul/a[1]" return super()._get_element_inner_text_from_page(xpath) - - def get_listed_question(self, question_name: str) -> Locator: - xpath = f"//article[@id='profile']/ul/a/li[text()='{question_name}']" - return super()._get_element_locator(xpath) - - def get_all_my_posted_questions(self) -> list[str]: - return super()._get_text_of_elements(self.__my_profile_my_questions_titles) diff --git a/playwright_tests/pages/user_questions_pages/aaq_form_page.py b/playwright_tests/pages/user_questions_pages/aaq_form_page.py new file mode 100644 index 00000000000..7dacf7f0251 --- /dev/null +++ b/playwright_tests/pages/user_questions_pages/aaq_form_page.py @@ -0,0 +1,102 @@ +from playwright.sync_api import Page, ElementHandle +from playwright_tests.core.basepage import BasePage + + +class AAQFormPage(BasePage): + __uploaded_image_title = "" + __complete_progress_items = "//li[@class='progress--item is-complete']/a" + __complete_progress_items_labels = ("//li[@class='progress--item is-complete']//span[" + "@class='progress--label']") + __in_progress_item_label = ("//li[@class='progress--item is-current']//span[" + "@class='progress--label']") + __aaq_page_heading = "//h2[@class='sumo-page-heading']" + __aaq_page_intro_text = "//form[@id='question-form']/p[@class='sumo-page-intro']" + __aaq_page_info_card = "//div[contains(@class, 'info card')]" + + # AAQ Subject + __aaq_subject_input_field = "//input[@id='id_title']" + __aaq_subject_input_field_error_message = ("//input[@id='id_title']/../ul[" + "@class='errorlist']/li") + + # Product topic dropdown + __product_topic_select_dropdown = "//select[@id='id_category']" + __product_topic_select_dropdown_error_message = ("//select[@id='id_category']/../ul[" + "@class='errorlist']/li") + + # How can we help textarea field + __how_can_we_help_textarea = "//textarea[@id='id_content']" + __how_can_we_help_textarea_error_field = ("//textarea[@id='id_content']/../following-sibling" + "::ul/li") + + # Add Image + __add_image_browse_button = "//input[@id='id_image']" + __uploaded_test_image_preview = f"//img[@title='{__uploaded_image_title}']" + __uploaded_test_image_delete_button = "//form[@class='upload-input']/input[@class='delete']" + __uploaded_image = "//a[@class='image']/img" + + # Email me when someone answers the thread checkbox + __email_me_checkbox = "//input[@id='id_notifications']" + + # form buttons + __form_submit_button = "//button[contains(text(), 'Submit')]" + __form_cancel_option = "//a[contains(text(),'Cancel')]" + + # Learn more button + + def __init__(self, page: Page): + super().__init__(page) + + def get_complete_progress_item_labels(self) -> list[str]: + return super()._get_text_of_elements(self.__complete_progress_items_labels) + + def get_in_progress_item_label(self) -> str: + return super()._get_text_of_element(self.__in_progress_item_label) + + def get_aaq_form_page_heading(self) -> str: + return super()._get_text_of_element(self.__aaq_page_heading) + + def get_aaq_form_page_intro_text(self) -> str: + return super()._get_text_of_element(self.__aaq_page_intro_text) + + def get_aaq_form_info_card_text(self) -> str: + return super()._get_text_of_element(self.__aaq_page_info_card) + + def get_aaq_form_subject_error(self) -> str: + return super()._get_text_of_element(self.__aaq_subject_input_field_error_message) + + def get_aaq_form_topic_select_error(self) -> str: + return super()._get_text_of_element(self.__product_topic_select_dropdown_error_message) + + def add_text_to_aaq_form_subject_field(self, text: str): + super()._fill(self.__aaq_subject_input_field, text) + + def select_aaq_form_topic_value(self, value: str): + super()._select_option_by_value(self.__product_topic_select_dropdown, value) + + def add_text_to_aaq_textarea_field(self, text: str): + super()._fill(self.__how_can_we_help_textarea, text) + + # def attach_image_to_question(self, image_path: str, image_title: str): + # Need to update this when needed in tests + # self.__uploaded_image_title = image_title + # super()._upload_jpg_image(locator=self.__add_image_browse_button, path_to_image=image_path) + + def image_preview_element(self) -> ElementHandle: + return super()._get_element_handle(self.__uploaded_test_image_preview) + + def uploaded_image_element(self) -> ElementHandle: + return super()._get_element_handle(self.__uploaded_image) + + def click_on_email_me_when_someone_answers_the_thread_checkbox(self): + super()._click(self.__email_me_checkbox) + + def click_aaq_form_cancel_button(self): + super()._click(self.__form_cancel_option) + + def click_aaq_form_submit_button(self): + super()._click(self.__form_submit_button) + + def delete_uploaded_image(self): + super()._hover_over_element(self.__uploaded_image) + super()._click(self.__uploaded_test_image_delete_button) + super()._accept_dialog() diff --git a/playwright_tests/pages/user_questions_pages/questions_page.py b/playwright_tests/pages/user_questions_pages/questions_page.py index 76cac27aba1..1537e57bb11 100644 --- a/playwright_tests/pages/user_questions_pages/questions_page.py +++ b/playwright_tests/pages/user_questions_pages/questions_page.py @@ -1,4 +1,4 @@ -from playwright.sync_api import Page, ElementHandle, Locator +from playwright.sync_api import Page, ElementHandle from playwright_tests.core.basepage import BasePage @@ -10,7 +10,6 @@ class QuestionPage(BasePage): # Question __question_author = "//div[@class='question']//span[@class='display-name']" - __questions_header = "//article//h2" # Progress bar __complete_progress_items_label = ("//li[@class='progress--item is-complete']//span[" @@ -20,10 +19,7 @@ class QuestionPage(BasePage): __aaq_page_breadcrumbs = "//ol[@id='breadcrumbs']/li" # Question details - __question_details_button = "//button[@aria-controls='question-details']" - __more_system_details_option = "//a[@id='show-more-details']" - __close_additional_system_details_button = "//div[@class='mzp-c-modal-close']/button" - __user_agent_information = "//div[@class='about-support']//li" + __questions_header = "//article//h2" # Searchbar __search_support_searchbar = "//form[@id='support-search-sidebar']/input" @@ -37,7 +33,6 @@ class QuestionPage(BasePage): __stop_email_updates_option = "//ul[@id='related-content']/li[@class='email']/a" __subscribe_to_feed_option = "//ul[@id='related-content']/li[@class='rss']/a" __delete_this_question_option = "//ul[@id='related-content']//a[@class='delete']" - __system_details_options = "//div[@id='system-details']/ul[@class='system']/li" # Tags section __question_tags_options = "//li[@class='tag']/a" @@ -55,8 +50,7 @@ class QuestionPage(BasePage): # Needs more information from the user __needs_more_information_from_the_user_checkbox = "//input[@id='id_needs_info']" - # Attached image - __attached_image = "//a[@class='image']/img" + # Add images button # Preview Reply button __preview_reply_button = "//input[@id='preview']" @@ -74,25 +68,9 @@ def __init__(self, page: Page): def get_question_author_name(self) -> str: return super()._get_text_of_element(self.__question_author) - def get_question_tag_options(self) -> list[str]: - return super()._get_text_of_elements(self.__question_tags_options) - - def get_attached_image(self) -> Locator: - return super()._get_element_locator(self.__attached_image) - - def get_more_information_with_text_locator(self, text: str) -> Locator: - xpath = f"//div[@class='about-support']/p[text()='{text}']" - return super()._get_element_locator(xpath) - - def get_user_agent_information(self) -> str: - return super()._get_text_of_element(self.__user_agent_information) - def add_text_to_post_a_reply_textarea(self, text: str): super()._fill(self.__post_a_reply_textarea, text) - def get_system_details_information(self) -> list[str]: - return super()._get_text_of_elements(self.__system_details_options) - def click_on_post_reply_button(self, repliant_username) -> str: xpath_display_name = \ f"//span[@class='display-name' and contains(text(), '{repliant_username}')]" @@ -103,9 +81,6 @@ def click_on_post_reply_button(self, repliant_username) -> str: super()._wait_for_selector(xpath_display_name) return super()._get_element_attribute_value(xpath_reply_id, "id") - def click_on_my_questions_banner_option(self): - super()._click(self.__posted_questions_success_banner_my_questions_link) - def click_on_solves_the_problem_button(self, target_reply_id: str): xpath = f"//div[@id='{target_reply_id}']/following-sibling::aside//input[@type='submit']" @@ -124,12 +99,3 @@ def click_delete_this_question_question_tools_option(self): def click_delete_this_question_button(self): super()._click(self.__delete_question_delete_button) - - def click_on_question_details_button(self): - super()._click(self.__question_details_button) - - def click_on_more_system_details_option(self): - super()._click(self.__more_system_details_option) - - def click_on_the_additional_system_panel_close_button(self): - super()._click(self.__close_additional_system_details_button) diff --git a/playwright_tests/pytest.ini b/playwright_tests/pytest.ini index 7d611304735..8dcff264703 100644 --- a/playwright_tests/pytest.ini +++ b/playwright_tests/pytest.ini @@ -11,7 +11,3 @@ markers = userContributionTests: Tests belonging to the user contribution section. userQuestions: Tests belonging to the user questions section. messagingSystem: Tests belonging to the messaging system. - contactSupportPage: Tests belonging to the contact support page. - productSolutionsPage: Tests belonging to the product solutions page. - productTopicsPage: Tests belonging to the product topics page. - aaqPage: Tests belonging to the AAQ page. diff --git a/playwright_tests/test_data/aaq_question.json b/playwright_tests/test_data/aaq_question.json index 9256fab371c..ead70c58f43 100644 --- a/playwright_tests/test_data/aaq_question.json +++ b/playwright_tests/test_data/aaq_question.json @@ -4,92 +4,6 @@ "topic_value": "bookmarks", "question_body": "'''Lorem ipsum''' dolor ''sit amet'', consectetur [https://www.mediafax.ro adipiscing] elit, [[Stage test owl|sed]] do eiusmod tempor incididunt ut labore et dolore magna aliqua. Tincidunt id aliquet risus feugiat in ante. Etiam non quam lacus suspendisse faucibus interdum posuere. Diam sollicitudin tempor id eu nisl nunc mi ipsum. Velit egestas dui id ornare arcu odio ut sem nulla. Risus nec feugiat in fermentum posuere urna nec tincidunt. Sed egestas egestas fringilla phasellus faucibus. Amet consectetur adipiscing elit duis tristique. Lorem mollis aliquam ut porttitor. Purus sit amet volutpat consequat mauris. Lobortis mattis aliquam faucibus purus in. Enim praesent elementum facilisis leo vel. Volutpat lacus laoreet non curabitur gravida arcu. Tempus iaculis urna id volutpat.", "image_name": "test.image.jpg", - "image_path": "test_data/test-image.png" - }, - "troubleshooting_information_kb_article_url": "https://support.mozilla.org/en-US/kb/use-troubleshooting-information-page-fix-firefox", - "troubleshooting_information_textarea_field": "Test Troubleshooting data", - "troubleshoot_product_and_os_versions": ["Test os", "Test product version"], - "products_aaq_url": { - "Firefox": "https://support.allizom.org/en-US/questions/new/desktop/form", - "Firefox for Android": "https://support.allizom.org/en-US/questions/new/mobile/form", - "Firefox for iOS": "https://support.allizom.org/en-US/questions/new/ios/form", - "Firefox for Enterprise": "https://support.allizom.org/en-US/questions/new/firefox-enterprise/form", - "MDN Plus": "https://support.allizom.org/en-US/questions/new/mdn-plus/form", - "Firefox Reality": "https://support.allizom.org/en-US/questions/new/firefox-reality/form", - "Mozilla VPN": "https://support.allizom.org/en-US/questions/new/firefox-private-network-vpn/form", - "Firefox Private Network": "https://support.allizom.org/en-US/questions/new/firefox-private-network/form", - "Firefox Relay": "https://support.allizom.org/en-US/questions/new/relay/form", - "Pocket": "https://support.allizom.org/en-US/questions/new/pocket/form", - "Hubs": "https://support.allizom.org/en-US/questions/new/hubs/form", - "Thunderbird": "https://support.allizom.org/en-US/questions/new/thunderbird/form", - "Firefox Focus": "https://support.allizom.org/en-US/questions/new/focus/form", - "Mozilla Account": "https://support.allizom.org/en-US/questions/new/mozilla-account/form" - }, - "aaq_topic_tags": { - "Firefox": { - "Learn the Basics: get started": "get-started", - "Download, install and migration": "download-and-install", - "Privacy and security settings": "privacy-and-security", - "Customize controls, options and add-ons": "customize", - "Fix slowness, crashing, error messages and other problems": "fix-problems", - "Tips and tricks": "tips", - "Bookmarks": "bookmarks", - "Cookies": "cookies", - "Tabs": "tabs", - "Website breakages": "website-breakages", - "Firefox Sync": "sync", - "Other": "other", - "default_slug": "desktop" - }, - "Firefox for Android": { - "Download, install and migration": "download-and-install", - "Privacy and security settings": "privacy-and-security", - "Customize controls, options and add-ons": "customize", - "Fix slowness, crashing, error messages and other problems": "fix-problems", - "Tips and tricks": "tips", - "Bookmarks": "bookmarks", - "Cookies": "cookies", - "Tabs": "tabs", - "Websites": "websites", - "Firefox Sync": "sync", - "Other": "other", - "default_slug": "mobile" - }, - "Firefox for iOS": { - "Install and Update": "install-and-update-firefox-ios", - "How to use Firefox for iOS": "how-to-use-firefox-ios", - "Crash": "crash", - "Sync": "sync", - "Bookmarks": "bookmarks", - "Tabs": "tabs", - "Private Browsing mode": "privacy", - "default_slug": "ios" - }, - "Firefox for Enterprise": { - "Deploy": "deployment", - "Manage updates, policies & customization": "customization", - "Manage add-ons": "customization", - "Manage certificates": "customization", - "default_slug": "none" - }, - "Firefox Reality": { - "Get started with Firefox Reality": "get-started", - "Troubleshooting Firefox Reality": "troubleshooting", - "default_slug": "none" - }, - "Thunderbird": { - "Download, install and migration": "download-and-install", - "Privacy and security settings": "privacy-and-security", - "Customize controls, options and add-ons": "customize", - "Fix slowness, crashing, error messages and other problems": "fix-problems", - "Calendar": "calendar", - "Other": "other", - "default_slug": "none" - }, - "Firefox Focus": { - "Firefox Focus for iOS": "Focus-ios", - "Firefox Focus for Android": "firefox-focus-android", - "default_slug": "focus-firefox" - } + "image_path": "test_data/images/test-image.jpg" } } diff --git a/playwright_tests/test_data/general_data.json b/playwright_tests/test_data/general_data.json deleted file mode 100644 index 28999fbb09a..00000000000 --- a/playwright_tests/test_data/general_data.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "freemium_products": [ - "Firefox", - "Firefox for Android", - "Firefox for iOS", - "Firefox for Enterprise", - "Firefox Reality", - "Thunderbird", - "Firefox Focus" - ], - "premium_products": [ - "MDN Plus", - "Mozilla VPN", - "Firefox Private Network", - "Firefox Relay", - "Pocket", - "Hubs", - "Mozilla Account" - ], - "product_topics": { - "Firefox": "https://support.allizom.org/en-US/products/firefox/fix-problems", - "Firefox for Android": "https://support.allizom.org/en-US/products/mobile/fix-problems", - "Firefox for iOS": "https://support.allizom.org/en-US/products/ios/install-and-update-firefox-ios", - "Firefox for Enterprise": "https://support.allizom.org/en-US/products/firefox-enterprise/deploy-firefox-for-enterprise", - "MDN Plus": "https://support.allizom.org/en-US/products/mdn-plus/getting-started", - "Firefox Reality": "https://support.allizom.org/en-US/products/firefox-reality/get-started", - "Mozilla VPN": "https://support.allizom.org/en-US/products/firefox-private-network-vpn/download-setup", - "Firefox Private Network": "https://support.allizom.org/en-US/products/firefox-private-network/accounts", - "Firefox Relay": "https://support.allizom.org/en-US/products/relay/technical", - "Pocket": "https://support.allizom.org/en-US/products/pocket/pocket-for-ios", - "Hubs": "https://support.allizom.org/en-US/products/hubs/hubs-get-started", - "Thunderbird": "https://support.allizom.org/en-US/products/thunderbird/privacy-and-security-settings", - "Firefox Focus": "https://support.allizom.org/en-US/products/focus-firefox/Focus-ios", - "Mozilla Account": "https://support.allizom.org/en-US/products/mozilla-account/passwords-recovery" - }, - "product_solutions": { - "Firefox": "https://support.allizom.org/en-US/questions/new/desktop", - "Firefox for Android": "https://support.allizom.org/en-US/questions/new/mobile", - "Firefox for iOS": "https://support.allizom.org/en-US/questions/new/ios", - "Firefox for Enterprise": "https://support.allizom.org/en-US/questions/new/firefox-enterprise", - "MDN Plus": "https://support.allizom.org/en-US/questions/new/mdn-plus", - "Firefox Reality": "https://support.allizom.org/en-US/questions/new/firefox-reality", - "Mozilla VPN": "https://support.allizom.org/en-US/questions/new/firefox-private-network-vpn", - "Firefox Private Network": "https://support.allizom.org/en-US/questions/new/firefox-private-network", - "Firefox Relay": "https://support.allizom.org/en-US/questions/new/relay", - "Pocket": "https://support.allizom.org/en-US/questions/new/pocket", - "Hubs": "https://support.allizom.org/en-US/questions/new/hubs", - "Thunderbird": "https://support.allizom.org/en-US/questions/new/thunderbird", - "Firefox Focus": "https://support.allizom.org/en-US/questions/new/focus", - "Mozilla Account": "https://support.allizom.org/en-US/questions/new/mozilla-account" - } -} diff --git a/playwright_tests/test_data/test-image.png b/playwright_tests/test_data/test-image.png deleted file mode 100644 index 1fad96e71f0b7fb8cd79cb8aba190982b0391dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27089 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 diff --git a/playwright_tests/tests/aaq_tests/test_aaq_page.py b/playwright_tests/tests/aaq_tests/test_aaq_page.py deleted file mode 100644 index a35b1c852dc..00000000000 --- a/playwright_tests/tests/aaq_tests/test_aaq_page.py +++ /dev/null @@ -1,421 +0,0 @@ -import pytest -import pytest_check as check - -from playwright.sync_api import expect -from playwright_tests.core.testutilities import TestUtilities -from playwright_tests.messages.AAQ_messages.aaq_form_page_messages import AAQFormMessages -from playwright_tests.messages.contact_support_page_messages.contact_support_messages import ( - ContactSupportMessages) -from playwright_tests.messages.contribute_pages_messages.con_page_messages import ( - ContributePageMessages) - - -class TestAAQPage(TestUtilities): - - # C2188694, C2188695 - @pytest.mark.aaqPage - def test_community_card_and_helpful_tip_are_displayed_for_freemium_product(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts['TEST_ACCOUNT_12'] - )) - - self.logger.info("Navigating to each freemium aaq form") - for freemium_product in super().general_test_data["freemium_products"]: - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"][freemium_product] - ) - - self.logger.info("Verifying that the helpful tip card is displayed") - expect( - self.sumo_pages.aaq_form_page.get_helpful_tip_locator() - ).to_be_visible() - - self.logger.info("Clicking on the 'Learn More' button from the community help card") - self.sumo_pages.aaq_form_page.click_on_learn_more_button() - - self.logger.info("Verifying that we are on the contribute page") - expect( - self.page - ).to_have_url(ContributePageMessages.STAGE_CONTRIBUTE_PAGE_URL) - - # C2188694, C2188695 - @pytest.mark.aaqPage - def test_community_card_and_helpful_tip_not_displayed_for_premium_products(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts['TEST_ACCOUNT_12'] - )) - - self.logger.info("Navigating to each premium aaq form") - for premium_product in super().general_test_data["premium_products"]: - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"][premium_product] - ) - - self.logger.info("Verifying that the helpful tip option is not displayed") - expect( - self.sumo_pages.aaq_form_page.get_helpful_tip_locator() - ).to_be_hidden() - - self.logger.info("Verifying that the 'Learn More' button from the community help " - "banner is not displayed") - expect( - self.sumo_pages.aaq_form_page.get_learn_more_button_locator() - ).to_be_hidden() - - # C890537 - @pytest.mark.aaqPage - def test_corresponding_aaq_product_name_and_image_are_displayed(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts['TEST_ACCOUNT_12'] - )) - - self.logger.info("Navigating to each product aaq form") - for product in super().aaq_question_test_data["products_aaq_url"]: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - # This needs to change when we add the Mozilla Account icon/product. - if product != "Mozilla Account": - self.logger.info("Verifying that the product image is displayed") - expect( - self.sumo_pages.aaq_form_page.get_product_image_locator() - ).to_be_visible() - else: - self.logger.info("Verifying that the product image is hidden for Mozilla Account " - "product") - expect( - self.sumo_pages.aaq_form_page.get_product_image_locator() - ).to_be_visible() - - self.logger.info("Verifying that the correct product header is displayed") - check.equal( - self.sumo_pages.aaq_form_page.get_aaq_form_page_heading(), - product, - f"Incorrect form header displayed. " - f"Expected: {product} " - f"Received: {self.sumo_pages.aaq_form_page.get_aaq_form_page_heading()}" - ) - - # C890535, C890536 - @pytest.mark.aaqPage - def test_progress_milestone_redirect(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts['TEST_ACCOUNT_12'] - )) - - self.logger.info("Navigating to each product aaq form") - for product in super().aaq_question_test_data["products_aaq_url"]: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - self.logger.info("Verifying that the correct in progress milestone is displayed") - check.equal( - self.sumo_pages.aaq_form_page.get_in_progress_item_label(), - AAQFormMessages.IN_PROGRESS_MILESTONE, - f"Incorrect current milestone. " - f"Expected: {AAQFormMessages.IN_PROGRESS_MILESTONE} " - f"Received: {self.sumo_pages.aaq_form_page.get_in_progress_item_label()}" - ) - - self.logger.info( - f"Clicking on the {AAQFormMessages.COMPLETED_MILESTONE_TWO} milestone'" - ) - self.sumo_pages.aaq_form_page.click_on_a_particular_completed_milestone( - AAQFormMessages.COMPLETED_MILESTONE_TWO) - - self.logger.info("Verifying that the we are on the correct product solutions page") - expect( - self.page - ).to_have_url(super().general_test_data["product_solutions"][product]) - - self.logger.info( - f"Navigating back to the aaq form and " - f"clicking on the {AAQFormMessages.COMPLETED_MILESTONE_ONE} milestone") - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - self.sumo_pages.aaq_form_page.click_on_a_particular_completed_milestone( - AAQFormMessages.COMPLETED_MILESTONE_ONE) - - self.logger.info("Verifying that we are redirected to the correct page") - expect( - self.page - ).to_have_url(ContactSupportMessages.PAGE_URL_CHANGE_PRODUCT_REDIRECT) - - # C890612 - @pytest.mark.aaqPage - def test_aaq_form_cancel_button_freemium_products(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] - )) - - self.logger.info("Accessing the 'My profile' page via the top-navbar menu") - self.sumo_pages.top_navbar.click_on_view_profile_option() - - self.logger.info("Extracting original number of posted questions") - original_number_of_questions = self.number_extraction_from_string( - self.sumo_pages.my_profile_page.get_my_profile_questions_text() - ) - - self.logger.info("Navigating to each product aaq form") - for product in super().general_test_data["freemium_products"]: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - self.logger.info("Adding data inside AAQ form fields without submitting the form") - self.sumo_pages.aaq_flow.add__valid_data_to_all_input_fields_without_submitting( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_value=self.sumo_pages.aaq_form_page.get_aaq_form_topic_options()[0], - body_text=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) - - self.logger.info("Clicking on the Cancel button") - self.sumo_pages.aaq_form_page.click_aaq_form_cancel_button() - - self.logger.info("Verifying that we are redirected back to the correct product " - "solutions page") - expect( - self.page - ).to_have_url(super().general_test_data["product_solutions"][product]) - - self.logger.info("Navigating back to the My Profile page") - self.sumo_pages.top_navbar.click_on_view_profile_option() - - new_number = self.number_extraction_from_string( - self.sumo_pages.my_profile_page.get_my_profile_questions_text() - ) - - self.logger.info("Verifying that the correct number of posted questions is displayed " - "at profile level") - check.equal( - new_number, - original_number_of_questions, - f"Incorrect number of questions displayed. " - f"Expected: {original_number_of_questions} " - f"Received: {new_number}" - ) - - # C890614, C890613, C890538 - @pytest.mark.aaqPage - def test_post_aaq_questions_for_all_freemium_products_topics(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] - )) - - self.logger.info("Navigating to each product aaq form") - for product in super().general_test_data["freemium_products"]: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - for topic in self.sumo_pages.aaq_form_page.get_aaq_form_topic_options(): - self.logger.info(f"Submitting question for {product} product") - question_info = self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=topic, - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"], - attach_image=False - ) - - self.logger.info("Verifying that the correct implicit tags are added to the " - "question") - slugs = [super().aaq_question_test_data['aaq_topic_tags'][product][topic]] - if (super().aaq_question_test_data['aaq_topic_tags'][product]['default_slug'] - != "none"): - slugs.append( - super().aaq_question_test_data['aaq_topic_tags'][product]['default_slug'] - ) - assert ( - all(map( - lambda x: x in self.sumo_pages.question_page.get_question_tag_options(), - slugs)) - ) - - self.logger.info("Clicking on the 'My Questions' banner option") - self.sumo_pages.question_page.click_on_my_questions_banner_option() - - self.logger.info( - "Verifying that the posted question is displayed inside the 'My Questions " - "page'") - - expect( - self.sumo_pages.my_questions_page.get_listed_question( - question_info['aaq_subject'] - ) - ).to_be_visible() - - self.logger.info("Clicking on the question and deleting it") - self.sumo_pages.my_questions_page.click_on_a_question_by_index(1) - - self.sumo_pages.question_page.click_delete_this_question_question_tools_option() - self.sumo_pages.question_page.click_delete_this_question_button() - - self.logger.info( - "Verifying that the question is no longer displayed inside My Questions page") - self.sumo_pages.top_navbar.click_on_my_questions_profile_option() - - expect( - self.sumo_pages.my_questions_page.get_listed_question( - question_info['aaq_subject'] - ) - ).to_be_hidden() - - self.logger.info(f"Navigating back to the {product} product aa form") - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - @pytest.mark.aaqPage - def test_share_firefox_data_functionality(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] - )) - - self.logger.info("Navigating to the Firefox AAQ form page") - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"]["Firefox"]) - - self.logger.info("Clicking on the 'Share Data' option") - self.sumo_pages.aaq_form_page.click_on_share_data_button() - - self.logger.info( - "Clicking on the 'try these manual steps' option") - self.sumo_pages.aaq_form_page.click_on_try_these_manual_steps_link() - - self.logger.info("Verifying that we are redirected to the correct page") - assert ( - super().aaq_question_test_data["troubleshooting_information_kb_article_url"] in - self.get_page_url() - ) - - self.logger.info("Navigating back to the aaq form") - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"]["Firefox"]) - - self.logger.info("Adding data inside AAQ form fields without submitting the form") - self.sumo_pages.aaq_flow.add__valid_data_to_all_input_fields_without_submitting( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_value=self.sumo_pages.aaq_form_page.get_aaq_form_topic_options()[0], - body_text=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) - - self.logger.info("Clicking on the 'Share Data' option") - self.sumo_pages.aaq_form_page.click_on_share_data_button() - - self.logger.info("Adding text inside the troubleshooting information field") - self.sumo_pages.aaq_form_page.add_text_to_troubleshooting_information_textarea( - super().aaq_question_test_data["troubleshooting_information_textarea_field"] - ) - - self.logger.info("Submitting the aaq question") - self.sumo_pages.aaq_form_page.click_aaq_form_submit_button() - - self.logger.info("Verifying that the troubleshooting information is displayed") - self.sumo_pages.question_page.click_on_question_details_button() - self.sumo_pages.question_page.click_on_more_system_details_option() - - expect( - self.sumo_pages.question_page.get_more_information_with_text_locator( - super().aaq_question_test_data["troubleshooting_information_textarea_field"] - ) - ).to_be_visible() - - self.logger.info("Closing additional details panel") - self.sumo_pages.question_page.click_on_the_additional_system_panel_close_button() - - self.logger.info("Deleting the posted question") - self.sumo_pages.question_page.click_delete_this_question_question_tools_option() - self.sumo_pages.question_page.click_delete_this_question_button() - - @pytest.mark.aaqPage - def test_additional_system_details_user_agent_information(self): - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] - )) - - self.logger.info("Navigating to each product aaq form") - for product in super().general_test_data["freemium_products"]: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - self.logger.info(f"Submitting question for {product} product") - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=self.sumo_pages.aaq_form_page.get_aaq_form_topic_options()[0], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"], - attach_image=True - ) - - self.logger.info("Verifying that the correct user-agent information is displayed") - self.sumo_pages.question_page.click_on_question_details_button() - self.sumo_pages.question_page.click_on_more_system_details_option() - - check.equal( - "User Agent: " + self.get_user_agent(), - self.sumo_pages.question_page.get_user_agent_information(), - f"Incorrect user agent displayed. " - f"Expected: {'User Agent: ' + self.get_user_agent()} " - f"Received: {self.sumo_pages.question_page.get_user_agent_information()}" - ) - - self.logger.info("Closing additional details panel") - self.sumo_pages.question_page.click_on_the_additional_system_panel_close_button() - - self.logger.info("Deleting the posted question") - self.sumo_pages.question_page.click_delete_this_question_question_tools_option() - self.sumo_pages.question_page.click_delete_this_question_button() - - @pytest.mark.aaqPage - def test_system_details_information(self): - troubleshooting_info = [ - super().aaq_question_test_data["troubleshoot_product_and_os_versions"][ - 0], - "Firefox " + super().aaq_question_test_data["troubleshoot_product_and_os_versions"][1] - ] - - self.logger.info("Signing in with a normal user account") - self.start_existing_session(super().username_extraction_from_email( - self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] - )) - - self.logger.info("Navigating to each product aaq form") - for product in super().general_test_data["freemium_products"]: - self.logger.info(product) - if product == 'Firefox Reality' or product == "Thunderbird": - continue - else: - self.navigate_to_link(super().aaq_question_test_data["products_aaq_url"][product]) - - self.logger.info("Adding data inside AAQ form fields without submitting the form") - self.sumo_pages.aaq_flow.add__valid_data_to_all_input_fields_without_submitting( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_value=self.sumo_pages.aaq_form_page.get_aaq_form_topic_options()[0], - body_text=super().aaq_question_test_data["valid_firefox_question"][ - "question_body"] - ) - - self.logger.info("Clicking on the 'Show details' option") - self.sumo_pages.aaq_form_page.click_on_show_details_option() - - self.logger.info("Adding data to product version and OS fields") - self.sumo_pages.aaq_form_page.add_text_to_product_version_field( - super().aaq_question_test_data[ - "troubleshoot_product_and_os_versions"][1] - ) - self.sumo_pages.aaq_form_page.add_text_to_os_field( - super().aaq_question_test_data[ - "troubleshoot_product_and_os_versions"][0] - ) - - self.logger.info("Submitting the aaq question") - self.sumo_pages.aaq_form_page.click_aaq_form_submit_button() - - self.logger.info( - "Verifying that the correct provided troubleshooting information is displayed") - self.sumo_pages.question_page.click_on_question_details_button() - check.equal( - self.sumo_pages.question_page.get_system_details_information(), - troubleshooting_info, - f"Expected: {troubleshooting_info} " - f"Received:{self.sumo_pages.question_page.get_system_details_information()}" - ) - - self.logger.info("Deleting the posted question") - self.sumo_pages.question_page.click_delete_this_question_question_tools_option() - self.sumo_pages.question_page.click_delete_this_question_button() diff --git a/playwright_tests/tests/contact_support_page_tests/test_contact_support_page.py b/playwright_tests/tests/contact_support_page_tests/test_contact_support_page.py deleted file mode 100644 index 844689d6073..00000000000 --- a/playwright_tests/tests/contact_support_page_tests/test_contact_support_page.py +++ /dev/null @@ -1,104 +0,0 @@ -import pytest -import pytest_check as check -from playwright.sync_api import expect - -from playwright_tests.core.testutilities import TestUtilities -from playwright_tests.messages.contact_support_page_messages.contact_support_messages import ( - ContactSupportMessages) -from playwright_tests.messages.forums_messages.support_forums_page_messages import ( - SupportForumsPageMessages) -from playwright_tests.messages.product_solutions_page_messages.product_solutions_messages import ( - ProductSolutionsMessages) - - -class TestContactSupportPage(TestUtilities): - # C890363 - @pytest.mark.contactSupportPage - def test_contact_support_page_content(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > Ask a " - "Question") - self.sumo_pages.top_navbar.click_on_ask_a_question_option() - - self.logger.info("Verifying that the current milestone is the correct one") - check.equal( - self.sumo_pages.contact_support_page._get_text_of_current_milestone(), - ContactSupportMessages.CURRENT_MILESTONE, - f"Incorrect current milestone displayed. " - f"Expected: {ContactSupportMessages.CURRENT_MILESTONE}" - f"Received: {self.sumo_pages.contact_support_page._get_text_of_current_milestone()}" - ) - - self.logger.info("Verifying that the correct page header is displayed") - check.equal( - self.sumo_pages.contact_support_page._get_contact_support_main_heading(), - ContactSupportMessages.MAIN_HEADER, - f"Incorrect page header displayed. " - f"Expected: {ContactSupportMessages.MAIN_HEADER} " - f"Received: {self.sumo_pages.contact_support_page._get_contact_support_main_heading()}" - ) - - self.logger.info("Verifying that the correct page subheading is displayed") - check.equal( - self.sumo_pages.contact_support_page._get_contact_support_subheading_text(), - ContactSupportMessages.SUBHEADING, - f"Incorrect page subheading displayed. " - f"Expected: {ContactSupportMessages.SUBHEADING} " - f"Actual:{self.sumo_pages.contact_support_page._get_contact_support_subheading_text()}" - ) - - self.logger.info("Verifying that each product card has the correct subheading") - for card in self.sumo_pages.contact_support_page._get_all_product_card_titles(): - check.equal( - ContactSupportMessages.PRODUCT_CARDS_SUBHEADING[card], - self.sumo_pages.contact_support_page._get_product_card_subtitle(card), - f"Incorrect card subheading displayed " - f"Expected: {ContactSupportMessages.PRODUCT_CARDS_SUBHEADING[card]} " - f"Actual: {self.sumo_pages.contact_support_page._get_product_card_subtitle(card)}" - ) - - # C890368, C890387, C890388 - @pytest.mark.contactSupportPage - def test_contact_support_page_cards_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - self.logger.info("Clicking on all product cards") - - for card in self.sumo_pages.contact_support_page._get_all_product_card_titles(): - self.sumo_pages.contact_support_page._click_on_a_particular_card(card) - - self.logger.info("Verifying that we are on the correct product solutions page") - check.equal( - self.sumo_pages.product_solutions_page._get_product_solutions_heading(), - card + ProductSolutionsMessages.PAGE_HEADER, - f"Incorrect product solutions page displayed: " - f"Expected: {card + ProductSolutionsMessages.PAGE_HEADER} " - f"Actual:{self.sumo_pages.product_solutions_page._get_product_solutions_heading()}" - ) - - self.logger.info("Verifying that we are on the correct milestone") - check.equal( - self.sumo_pages.product_solutions_page._get_current_milestone_text(), - ProductSolutionsMessages.CURRENT_MILESTONE_TEXT, - f"Incorrect current milestone displayed " - f"Expected: {ProductSolutionsMessages.CURRENT_MILESTONE_TEXT} " - f"Received: {self.sumo_pages.product_solutions_page._get_current_milestone_text()}" - ) - - self.logger.info("Click on the 'Change Product' milestone") - self.sumo_pages.product_solutions_page._click_on_the_completed_milestone() - - @pytest.mark.contactSupportPage - def test_browse_all_product_forums_button_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > Ask a " - "Question") - self.sumo_pages.top_navbar.click_on_ask_a_question_option() - - self.sumo_pages.contact_support_page._click_on_browse_all_product_forums_button() - - self.logger.info("Verifying that we are redirected to the correct page url") - - expect( - self.page - ).to_have_url(SupportForumsPageMessages.PAGE_URL) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_article_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_article_page.py index 3673978f095..a322edafb71 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_article_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_article_page.py @@ -228,9 +228,9 @@ def test_contribute_article_page_breadcrumbs(self): self.logger.info("Verifying that the Home breadcrumb redirects to the Homepage") check.equal( self.get_page_url(), - HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, + HomepageMessages.STAGE_HOMEPAGE_URL, f"Expected to be on: " - f"{HomepageMessages.STAGE_HOMEPAGE_URL_EN_US}" + f"{HomepageMessages.STAGE_HOMEPAGE_URL}" f"We are actual on: " f"{self.get_page_url()}", ) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_forum_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_forum_page.py index c9d00553f85..8214636c452 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_forum_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_forum_page.py @@ -180,8 +180,8 @@ def test_contribute_forum_page_breadcrumbs(self): self.logger.info("Verifying that the Home breadcrumb redirects to the Homepage") check.equal( self.get_page_url(), - HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, - f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL_EN_US}" + HomepageMessages.STAGE_HOMEPAGE_URL, + f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL}" f"We are actual on {self.get_page_url()}", ) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_localization_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_localization_page.py index eda622c4e08..1667d8ec92b 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_localization_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_localization_page.py @@ -181,8 +181,8 @@ def test_contribute_localization_page_breadcrumbs(self): self.logger.info("Verifying that the Home breadcrumb redirects to the Homepage") check.equal( self.get_page_url(), - HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, - f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL_EN_US}" + HomepageMessages.STAGE_HOMEPAGE_URL, + f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL}" f"We are actual on {self.get_page_url()}", ) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_mobile_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_mobile_page.py index 8b06ba39b9f..57a3cdd9d67 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_mobile_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_mobile_page.py @@ -181,8 +181,8 @@ def test_contribute_mobile_page_breadcrumbs(self): self.logger.info("Verifying that the Home breadcrumb redirects to the Homepage") check.equal( self.get_page_url(), - HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, - f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL_EN_US}" + HomepageMessages.STAGE_HOMEPAGE_URL, + f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL}" f"We are actual on {self.get_page_url()}", ) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_page.py index f7a11b0aae4..7586b2ef01e 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_page.py @@ -134,8 +134,8 @@ def test_contribute_page_breadcrumbs(self): self.logger.info("Verifying that the home breadcrumb redirects to the homepage") self.sumo_pages.contribute_page.click_on_home_breadcrumb() - assert self.get_page_url() == HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, ( - f"{HomepageMessages.STAGE_HOMEPAGE_URL_EN_US} page was expected to be displayed" + assert self.get_page_url() == HomepageMessages.STAGE_HOMEPAGE_URL, ( + f"{HomepageMessages.STAGE_HOMEPAGE_URL} page was expected to be displayed" f"{self.get_page_url()} is displayed instead" ) diff --git a/playwright_tests/tests/contribute_pages_tests/test_contribute_social_media_page.py b/playwright_tests/tests/contribute_pages_tests/test_contribute_social_media_page.py index 0d6d467c6ca..1df58c37943 100644 --- a/playwright_tests/tests/contribute_pages_tests/test_contribute_social_media_page.py +++ b/playwright_tests/tests/contribute_pages_tests/test_contribute_social_media_page.py @@ -193,8 +193,8 @@ def test_contribute_social_page_breadcrumbs(self): self.logger.info("Verifying that the Home breadcrumb redirects to the Homepage") check.equal( self.get_page_url(), - HomepageMessages.STAGE_HOMEPAGE_URL_EN_US, - f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL_EN_US}" + HomepageMessages.STAGE_HOMEPAGE_URL, + f"Expected to be on {HomepageMessages.STAGE_HOMEPAGE_URL}" f"We are actual on {self.get_page_url()}", ) diff --git a/playwright_tests/tests/homepage_tests/test_homepage.py b/playwright_tests/tests/homepage_tests/test_homepage.py index 5a89af08163..b265951e0df 100644 --- a/playwright_tests/tests/homepage_tests/test_homepage.py +++ b/playwright_tests/tests/homepage_tests/test_homepage.py @@ -94,10 +94,10 @@ def test_product_cards_are_functional_and_redirect_to_the_proper_support_page(se self.logger.info("Verifying that the correct product support page is displayed") assert ( expected_product_title - == self.sumo_pages.product_support_page._get_product_title_text() + == self.sumo_pages.product_support_page.get_product_title_text() ), (f"Incorrect support page displayed. " f"Expected: {expected_product_title} " - f"Received: {self.sumo_pages.product_support_page._get_product_title_text()}") + f"Received: {self.sumo_pages.product_support_page.get_product_title_text()}") self.logger.info("Navigating back to the previous page") self.navigate_back() diff --git a/playwright_tests/tests/popular_topics_page_tests/test_popular_topics_page.py b/playwright_tests/tests/popular_topics_page_tests/test_popular_topics_page.py deleted file mode 100644 index b39ee7fc379..00000000000 --- a/playwright_tests/tests/popular_topics_page_tests/test_popular_topics_page.py +++ /dev/null @@ -1,125 +0,0 @@ -import pytest -import pytest_check as check - -from playwright.sync_api import TimeoutError, expect -from playwright_tests.core.testutilities import TestUtilities -from playwright_tests.messages.AAQ_messages.aaq_widget import AAQWidgetMessages -from playwright_tests.messages.contribute_pages_messages.con_page_messages import ( - ContributePageMessages) -from playwright_tests.messages.homepage_messages import HomepageMessages -from playwright_tests.messages.kb_article.kb_article_page_messages import KBArticlePageMessages - - -class TestPopularTopicsPage(TestUtilities): - - # C890379 - @pytest.mark.productTopicsPage - def test_popular_topics_navbar(self): - self.logger.info("Navigating to product topics pages") - for product_topic in super().general_test_data["product_topics"]: - topic_url = super().general_test_data["product_topics"][product_topic] - self.page.wait_for_timeout(400) - self.navigate_to_link(topic_url) - self.wait_for_url_to_be(topic_url) - - for option in self.sumo_pages.product_topics_page._get_navbar_links_text(): - self.logger.info(f"Clicking on {option} navbar option") - option_url = (HomepageMessages.STAGE_HOMEPAGE_URL + self.sumo_pages. - product_topics_page._get_navbar_option_link(option)) - self.sumo_pages.product_topics_page._click_on_a_navbar_option(option) - try: - self.wait_for_url_to_be(option_url) - except TimeoutError: - self.logger.info("Failed click, retrying") - self.sumo_pages.product_topics_page._click_on_a_navbar_option(option) - self.wait_for_url_to_be(option_url) - - self.logger.info("Verifying that the correct option is displayed") - check.equal( - self.sumo_pages.product_topics_page._get_page_title(), - option, - f"Incorrect topic: " - f"Expected: {option} " - f"Received: {self.sumo_pages.product_topics_page._get_page_title()}" - ) - - self.logger.info("Verifying that the correct navbar option is selected") - check.equal( - self.sumo_pages.product_topics_page._get_selected_navbar_option(), - option, - f"Incorrect selected navbar option " - f"Expected: {option} " - f"Actual: {self.sumo_pages.product_topics_page._get_selected_navbar_option()}" - ) - - # C2428991 - @pytest.mark.productTopicsPage - def test_learn_more_redirect(self): - self.logger.info("Navigating to product topics pages") - for product_topic in super().general_test_data["product_topics"]: - topic_url = super().general_test_data["product_topics"][product_topic] - self.navigate_to_link(topic_url) - self.wait_for_url_to_be(topic_url) - - self.logger.info("Clicking on the 'Learn More' button") - self.sumo_pages.product_topics_page._click_on_learn_more_button() - - self.logger.info("Verifying that we are redirected to the contribute page") - expect( - self.page - ).to_have_url(ContributePageMessages.STAGE_CONTRIBUTE_PAGE_URL) - - # C2188690 - @pytest.mark.productTopicsPage - def test_aaq_redirect(self): - self.logger.info("Navigating to product topics pages") - sign_in_with_the_same_account = False - for product_topic in super().general_test_data["product_topics"]: - topic_url = super().general_test_data["product_topics"][product_topic] - self.navigate_to_link(topic_url) - self.wait_for_url_to_be(topic_url) - - self.logger.info("Verifying the subheading text") - if product_topic in super().general_test_data["premium_products"]: - check.equal( - self.sumo_pages.product_topics_page._get_aaq_subheading_text(), - AAQWidgetMessages.PREMIUM_AAQ_SUBHEADING_TEXT, - f"Incorrect aaq subheading " - f"Expected: {AAQWidgetMessages.PREMIUM_AAQ_SUBHEADING_TEXT} " - f"Received: {self.sumo_pages.product_topics_page._get_aaq_subheading_text()}" - ) - self.logger.info("Clicking on the AAQ button") - self.sumo_pages.product_topics_page._click_on_aaq_button() - - self.logger.info("Signing in to SUMO") - self.sumo_pages.auth_flow_page.sign_in_flow( - username=super().user_special_chars, - account_password=super().user_secrets_pass, - sign_in_with_same_account=sign_in_with_the_same_account, - ) - - self.logger.info("Verifying that we are on the correct AAQ form page") - - expect( - self.page - ).to_have_url(super().aaq_question_test_data["products_aaq_url"][product_topic]) - - self.logger.info("Signing out") - self.sumo_pages.top_navbar.click_on_sign_out_button() - - sign_in_with_the_same_account = True - else: - check.equal( - self.sumo_pages.product_topics_page._get_aaq_subheading_text(), - AAQWidgetMessages.FREEMIUM_AAQ_SUBHEADING_TEXT_SIGNED_OUT, - f"Incorrect aaq subheading " - f"Expected: {AAQWidgetMessages.FREEMIUM_AAQ_SUBHEADING_TEXT_SIGNED_OUT} " - f"Received: {self.sumo_pages.product_topics_page._get_aaq_subheading_text()}" - ) - self.logger.info("Clicking on the AAQ button") - self.sumo_pages.product_topics_page._click_on_aaq_button() - - self.logger.info("Verifying that we are on the 'Get community support article'") - expect( - self.page - ).to_have_url(KBArticlePageMessages.GET_COMMUNITY_SUPPORT_ARTICLE_LINK) diff --git a/playwright_tests/tests/product_solutions_page_tests/test_product_solutions_page.py b/playwright_tests/tests/product_solutions_page_tests/test_product_solutions_page.py deleted file mode 100644 index 63e71990abe..00000000000 --- a/playwright_tests/tests/product_solutions_page_tests/test_product_solutions_page.py +++ /dev/null @@ -1,215 +0,0 @@ -import pytest -import pytest_check as check - -from playwright.sync_api import expect -from playwright_tests.core.testutilities import TestUtilities -from playwright_tests.messages.AAQ_messages.aaq_widget import AAQWidgetMessages -from playwright_tests.messages.product_solutions_page_messages.product_solutions_messages import ( - ProductSolutionsMessages) - - -class TestProductSolutionsPage(TestUtilities): - - # Currently fails due to https://github.com/mozilla/sumo/issues/1608 - # C890370 - @pytest.mark.skip - def test_featured_articles_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - self.logger.info("Clicking on all product cards") - - for card in self.sumo_pages.contact_support_page._get_all_product_card_titles(): - self.sumo_pages.contact_support_page._click_on_a_particular_card(card) - - check.equal( - self.sumo_pages.product_solutions_page._get_product_solutions_heading(), - card + ProductSolutionsMessages.PAGE_HEADER, - f"Incorrect product solutions page displayed: " - f"Expected: {card + ProductSolutionsMessages.PAGE_HEADER} " - f"Actual:{self.sumo_pages.product_solutions_page._get_product_solutions_heading()}" - ) - - if self.sumo_pages.product_solutions_page._is_featured_article_section_displayed(): - for featured_article_card in (self.sumo_pages.product_solutions_page - ._get_all_featured_articles_titles()): - self.sumo_pages.product_solutions_page._click_on_a_featured_article_card( - featured_article_card) - with self.page.context.expect_page() as tab: - feature_article_page = tab.value - print("Tab open") - - article_text = (feature_article_page. - locator("//h1[@class='sumo-page-heading']").inner_text()) - check.equal( - article_text, - featured_article_card, - f"Incorrect article page title. " - f"Expected: {featured_article_card} " - f"Received: {article_text}" - ) - feature_article_page.close() - else: - self.logger.info(f"{card} has no featured articles displayed!!!") - - self.navigate_back() - - # C890375, C890379 - @pytest.mark.productSolutionsPage - def test_popular_topics_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - self.logger.info("Clicking on all product cards") - - for card in self.sumo_pages.contact_support_page._get_all_product_card_titles(): - self.sumo_pages.contact_support_page._click_on_a_particular_card(card) - - check.equal( - self.sumo_pages.product_solutions_page._get_product_solutions_heading(), - card + ProductSolutionsMessages.PAGE_HEADER, - f"Incorrect product solutions page displayed: " - f"Expected: {card + ProductSolutionsMessages.PAGE_HEADER} " - f"Actual:{self.sumo_pages.product_solutions_page._get_product_solutions_heading()}" - ) - - if self.sumo_pages.product_solutions_page._is_popular_topics_section_displayed: - for topic in self.sumo_pages.product_solutions_page._get_popular_topics(): - self.sumo_pages.product_solutions_page._click_on_a_popular_topic_card(topic) - - with self.page.context.expect_page() as tab: - feature_article_page = tab.value - print("Tab open") - - popular_topic = (feature_article_page - .locator("//h1[@class='topic-title sumo-page-heading']") - .inner_text()) - check.equal( - popular_topic, - topic, - f"Incorrect topic page title. " - f"Expected: {topic} " - f"Received: {popular_topic}" - ) - feature_article_page.close() - - else: - self.logger.info(f"{card} has no featured articles displayed!!!") - - self.navigate_back() - - # C890382 - @pytest.mark.productSolutionsPage - def test_ask_now_widget_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - self.logger.info("Clicking on all product cards") - sign_in_with_the_same_account = False - - for freemium_product in super().general_test_data["freemium_products"]: - self.sumo_pages.contact_support_page._click_on_a_particular_card(freemium_product) - - self.logger.info("Verifying that the correct 'Still need help' subtext is displayed") - check.equal( - self.sumo_pages.product_solutions_page._get_aaq_subheading_text(), - AAQWidgetMessages.FREEMIUM_AAQ_SUBHEADING_TEXT_SIGNED_OUT, - f"Incorrect AAQ widget displayed: " - f"Expected: {AAQWidgetMessages.FREEMIUM_AAQ_SUBHEADING_TEXT_SIGNED_OUT} " - f"Received: {self.sumo_pages.product_solutions_page._get_aaq_subheading_text()}" - ) - - self.logger.info("Verifying that the correct AAQ button text is displayed") - check.equal( - self.sumo_pages.product_solutions_page._get_aaq_widget_button_name(), - AAQWidgetMessages.FREEMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT, - f"Incorrect AAQ button name. " - f"Expected: {self.sumo_pages.product_solutions_page._get_aaq_widget_button_name()}" - f" Actual: {AAQWidgetMessages.FREEMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT}" - ) - - self.logger.info("Clicking on the AAQ button and verifying that the auth page is " - "displayed") - self.sumo_pages.product_solutions_page._click_ask_now_button() - - self.logger.info("Signing in to SUMO") - self.sumo_pages.auth_flow_page.sign_in_flow( - username=super().user_special_chars, - account_password=super().user_secrets_pass, - sign_in_with_same_account=sign_in_with_the_same_account, - ) - - self.logger.info("Verifying that we are on the correct AAQ form page") - - expect( - self.page - ).to_have_url(super().aaq_question_test_data["products_aaq_url"][freemium_product]) - - self.logger.info("Signing out") - self.sumo_pages.top_navbar.click_on_sign_out_button() - - sign_in_with_the_same_account = True - - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - # C890382 - @pytest.mark.productSolutionsPage - def test_contact_support_widget_redirect(self): - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() - - self.logger.info("Clicking on all product cards") - sign_in_with_the_same_account = False - - for premium_product in super().general_test_data["premium_products"]: - self.sumo_pages.contact_support_page._click_on_a_particular_card(premium_product) - - self.logger.info("Verifying that the correct 'Still need help' subtext is displayed") - check.equal( - self.sumo_pages.product_solutions_page._get_aaq_subheading_text(), - AAQWidgetMessages.PREMIUM_AAQ_SUBHEADING_TEXT, - f"Incorrect AAQ widget displayed: " - f"Expected: {AAQWidgetMessages.PREMIUM_AAQ_SUBHEADING_TEXT} " - f"Received: {self.sumo_pages.product_solutions_page._get_aaq_subheading_text()}" - ) - - self.logger.info("Verifying that the correct AAQ button text is displayed") - check.equal( - self.sumo_pages.product_solutions_page._get_aaq_widget_button_name(), - AAQWidgetMessages.PREMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT, - f"Incorrect AAQ button name. " - f"Expected: {self.sumo_pages.product_solutions_page._get_aaq_widget_button_name()}" - f" Actual: {AAQWidgetMessages.FREEMIUM_PRODUCTS_AAQ_WIDGET_BUTTON_TEXT}" - ) - - self.logger.info("Clicking on the AAQ button and verifying that the auth page is " - "displayed") - self.sumo_pages.product_solutions_page._click_ask_now_button() - - self.logger.info("Signing in to SUMO") - self.sumo_pages.auth_flow_page.sign_in_flow( - username=super().user_special_chars, - account_password=super().user_secrets_pass, - sign_in_with_same_account=sign_in_with_the_same_account, - ) - - self.logger.info("Verifying that we are on the correct AAQ form page") - - expect( - self.page - ).to_have_url(super().aaq_question_test_data["products_aaq_url"][premium_product]) - - self.logger.info("Signing out") - self.sumo_pages.top_navbar.click_on_sign_out_button() - - sign_in_with_the_same_account = True - - self.logger.info("Accessing the contact support page via the top navbar Get Help > " - "Browse All products") - self.sumo_pages.top_navbar.click_on_browse_all_products_option() diff --git a/playwright_tests/tests/user_page_tests/test_my_profile_page.py b/playwright_tests/tests/user_page_tests/test_my_profile_page.py index 60b4944b39c..3a1543120dd 100644 --- a/playwright_tests/tests/user_page_tests/test_my_profile_page.py +++ b/playwright_tests/tests/user_page_tests/test_my_profile_page.py @@ -70,7 +70,7 @@ def test_my_profile_sign_out_button_functionality(self): expect( self.page - ).to_have_url(HomepageMessages.STAGE_HOMEPAGE_URL_EN_US) + ).to_have_url(HomepageMessages.STAGE_HOMEPAGE_URL) self.logger.info("Verify that the 'Sign in/Up' button from the page header is displayed") @@ -88,18 +88,9 @@ def test_provided_solutions_number_is_successfully_displayed(self): repliant_username = self.sumo_pages.top_navbar.get_text_of_logged_in_username() - self.logger.info("Navigating to the Firefox AAQ form") - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"]["Firefox"] - ) - - self.logger.info("Posting a new AAQ question for Firefox product") + self.logger.info("Posting a new AAQ question") question_info = ( - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=super().aaq_question_test_data["valid_firefox_question"]["topic_value"], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) + self.sumo_pages.aaq_flow.submit_valid_firefox_prod_question_via_ask_now_fx_solutions() ) self.sumo_pages.top_navbar.click_on_view_profile_option() @@ -158,7 +149,7 @@ def test_provided_solutions_number_is_successfully_displayed(self): self.logger.info("Verifying that we are on the product support forum page after deletion") expect( - self.sumo_pages.product_support_page._product_product_title_element() + self.sumo_pages.product_support_page.product_product_title_element() ).to_be_visible() # C890832, C2094281 @@ -181,18 +172,9 @@ def test_number_of_my_profile_answers_is_successfully_displayed(self): self.sumo_pages.my_profile_page.get_my_profile_answers_text() ) - self.logger.info("Navigating to the Firefox AAQ form") - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"]["Firefox"] - ) - self.logger.info("Posting a new AAQ question") question_info = ( - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=super().aaq_question_test_data["valid_firefox_question"]["topic_value"], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) + self.sumo_pages.aaq_flow.submit_valid_firefox_prod_question_via_ask_now_fx_solutions() ) self.logger.info("Posting a reply for the question") @@ -245,7 +227,7 @@ def test_number_of_my_profile_answers_is_successfully_displayed(self): self.logger.info("Verifying that we are on the product support forum page after deletion") expect( - self.sumo_pages.product_support_page._product_product_title_element() + self.sumo_pages.product_support_page.product_product_title_element() ).to_be_visible() # C2094285, C2094284 diff --git a/playwright_tests/tests/user_page_tests/test_my_questions.py b/playwright_tests/tests/user_page_tests/test_my_questions.py index 70368b8d3d4..be287253898 100644 --- a/playwright_tests/tests/user_page_tests/test_my_questions.py +++ b/playwright_tests/tests/user_page_tests/test_my_questions.py @@ -23,18 +23,9 @@ def test_number_of_questions_is_incremented_when_posting_a_question(self): self.sumo_pages.my_profile_page.get_my_profile_questions_text() ) - self.logger.info("Navigating to the Firefox AAQ form") - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"]["Firefox"] - ) - - self.logger.info("Posting a new AAQ question for Firefox product") + self.logger.info("Posting a new AAQ question") question_info = ( - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=super().aaq_question_test_data["valid_firefox_question"]["topic_value"], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) + self.sumo_pages.aaq_flow.submit_valid_firefox_prod_question_via_ask_now_fx_solutions() ) self.logger.info("Navigating back to the My Profile page") @@ -44,7 +35,9 @@ def test_number_of_questions_is_incremented_when_posting_a_question(self): ) assert ( - new_number + self.number_extraction_from_string( + self.sumo_pages.my_profile_page.get_my_profile_questions_text() + ) == original_number_of_questions + 1 ), ( f"The number of questions should have incremented! " @@ -62,7 +55,7 @@ def test_number_of_questions_is_incremented_when_posting_a_question(self): self.logger.info("Verifying that we are on the product support forum page after deletion") expect( - self.sumo_pages.product_support_page._product_product_title_element() + self.sumo_pages.product_support_page.product_product_title_element() ).to_be_visible() # write tests to check my questions section as well @@ -136,18 +129,10 @@ def test_correct_messages_is_displayed_if_user_has_no_posted_questions(self): self.sumo_pages.my_questions_page.is_question_list_displayed() ).to_be_hidden() - self.logger.info("Navigating to the Firefox AAQ form") - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"]["Firefox"] - ) + self.logger.info("Posting a new aaq question") - self.logger.info("Posting a new AAQ question for Firefox product") question_info = ( - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=super().aaq_question_test_data["valid_firefox_question"]["topic_value"], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) + self.sumo_pages.aaq_flow.submit_valid_firefox_prod_question_via_ask_now_fx_solutions() ) self.logger.info( @@ -226,18 +211,9 @@ def test_my_question_page_reflects_posted_questions_and_redirects_to_the_correct self.user_secrets_accounts["TEST_ACCOUNT_MODERATOR"] )) - self.logger.info("Navigating to the Firefox AAQ form") - self.navigate_to_link( - super().aaq_question_test_data["products_aaq_url"]["Firefox"] - ) - - self.logger.info("Posting a new AAQ question for Firefox product") + self.logger.info("Posting a new aaq question") question_info = ( - self.sumo_pages.aaq_flow.submit_an_aaq_question_for_a_product( - subject=super().aaq_question_test_data["valid_firefox_question"]["subject"], - topic_name=super().aaq_question_test_data["valid_firefox_question"]["topic_value"], - body=super().aaq_question_test_data["valid_firefox_question"]["question_body"] - ) + self.sumo_pages.aaq_flow.submit_valid_firefox_prod_question_via_ask_now_fx_solutions() ) self.logger.info(