Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extending playwright coverage over the group messaging system. #6020

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
- Extending playwright coverage over the group messaging system.
- Updating the playwright.yml to contain the group messaging system suite for both scheduled & workflow dispatch executions.
- Fix twitter profile link test since twitter is now "x".
- Fix footer test.
- Added group page to POM & flows.
  • Loading branch information
emilghittasv committed May 20, 2024
commit 257f2d1e141328a8b3b7ecee2904191b12c5f0e6
4 changes: 2 additions & 2 deletions .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,10 @@ jobs:
if: success() || failure() && steps.create-sessions.outcome == 'success'
run: |
declare dispatch_test_suite="${{inputs.TestSuite}}"
declare all_test_suites=("homePageTests" "topNavbarTests" "footerSectionTests" "contributePagesTests" "messagingSystem" "userContributionTests" "userProfile" "userSettings" "editUserProfileTests" "userQuestions" "contactSupportPage" "productSolutionsPage" "productTopicsPage" "aaqPage" "postedQuestions" "kbProductsPage" "kbArticleCreationAndAccess" "beforeThreadTests" "articleThreads" "afterThreadTests" "kbArticleShowHistory" "recentRevisionsDashboard" "kbDashboard" "restrictedArticleCreation" "kbRestrictedVisibilitySingleGroup" "whitelistingDifferentGroup" "kbRestrictedVisibilityMultipleGroups" "removingAllArticleRestrictions" "kbRemovedRestrictions" "deleteAllRestrictedTestArticles")
declare all_test_suites=("homePageTests" "topNavbarTests" "footerSectionTests" "contributePagesTests" "messagingSystem" "messagingSystemCleanup" "userContributionTests" "userProfile" "userSettings" "editUserProfileTests" "userQuestions" "contactSupportPage" "productSolutionsPage" "productTopicsPage" "aaqPage" "postedQuestions" "kbProductsPage" "kbArticleCreationAndAccess" "beforeThreadTests" "articleThreads" "afterThreadTests" "kbArticleShowHistory" "recentRevisionsDashboard" "kbDashboard" "restrictedArticleCreation" "kbRestrictedVisibilitySingleGroup" "whitelistingDifferentGroup" "kbRestrictedVisibilityMultipleGroups" "removingAllArticleRestrictions" "kbRemovedRestrictions" "deleteAllRestrictedTestArticles")
if [ "$dispatch_test_suite" == "All" ] || [ "${{ github.event_name}}" == "schedule" ] ; then
for test in "${all_test_suites[@]}"; do
if ! poetry run pytest -m $test --numprocesses 2 --browser ${{ env.BROWSER }} --reruns 1; then
if ! poetry run pytest -m ${test} --numprocesses 2 --browser ${{ env.BROWSER }} --reruns 1; then
any_failures=true
fi
done
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,35 @@ def complete_send_message_form_with_data(self,
recipient_username='',
message_body='',
submit_message=True):
if recipient_username != '':
if recipient_username != '' and not isinstance(recipient_username, list):
super()._type_into_new_message_to_input_field(recipient_username)
super()._click_on_a_searched_user(recipient_username)

if isinstance(recipient_username, list):
for recipient in recipient_username:
super()._type_into_new_message_to_input_field(recipient)
super()._click_on_a_searched_user(recipient)

if message_body != '':
super()._fill_into_new_message_body_textarea(message_body)

if submit_message:
super()._click_on_new_message_send_button()

def delete_message_flow(self, username: str,
def delete_message_flow(self, username='',
excerpt='',
delete_message=True,
from_sent_list=False,
from_inbox_list=False):
if from_sent_list:
super()._click_on_sent_message_delete_button(username)

if from_inbox_list:
super()._click_on_inbox_message_delete_button(username)
if from_sent_list and username != '':
super()._click_on_sent_message_delete_button_by_user(username)
elif from_sent_list and excerpt != '':
super()._click_on_sent_message_delete_button_by_excerpt(excerpt)

if from_inbox_list and username != '':
super()._click_on_inbox_message_delete_button_by_username(username)
elif from_inbox_list and excerpt != '':
super()._click_on_inbox_message_delete_button_by_excerpt(excerpt)

if delete_message:
super()._click_on_delete_page_delete_button()
19 changes: 19 additions & 0 deletions playwright_tests/flows/user_groups_flows/user_group_flow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from playwright_tests.core.testutilities import TestUtilities
from playwright_tests.pages.contribute.groups_page import GroupsPage
from playwright.sync_api import Page


class UserGroupFlow(TestUtilities, GroupsPage):
def __init__(self, page: Page):
super().__init__(page)

def remove_a_user_from_group(self, user: str):
super()._click_on_edit_group_members()
super()._click_on_remove_a_user_from_group_button(user)
super()._click_on_remove_member_confirmation_button()

def add_a_user_to_group(self, user: str):
super()._click_on_edit_group_members()
super()._type_into_add_member_field(user)
super()._group_click_on_a_searched_username(user)
super()._click_on_add_member_button()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class MyProfileMessages:
STAGE_MY_PROFILE_PAGE_HEADER = "Your Account"
TWITTER_REDIRECT_LINK = "https://twitter.com/"
TWITTER_REDIRECT_LINK = "https://x.com/"
COMMUNITY_PORTAL_LINK = "https://community.mozilla.org"
PEOPLE_DIRECTORY_LINK = "https://people.mozilla.org"

Expand Down
3 changes: 3 additions & 0 deletions playwright_tests/messages/user_groups_messages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class UserGroupMessages:
def get_user_added_success_message(self, username: str) -> str:
return f"{username} added to the group successfully!"
46 changes: 46 additions & 0 deletions playwright_tests/pages/contribute/groups_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from playwright_tests.core.basepage import BasePage
from playwright.sync_api import Page, Locator


class GroupsPage(BasePage):
__private_message_group_members_button = "//section[@id='main-area']/p[@class='pm']/a"
__user_added_notification = "//ul[@class='user-messages']//p"
__edit_group_members_option = "//div[@id='group-members']/a"
__add_group_member_field = "//div[@id='group-members']//input[@id='token-input-id_users']"
__add_member_button = "//div[@id='group-members']//input[@value='Add Member']"
__remove_user_from_group_confirmation_button = "//input[@value='Remove member']"

def __init__(self, page: Page):
super().__init__(page)

# Add Group member
def _get_user_added_successfully_message(self) -> str:
return super()._get_text_of_element(self.__user_added_notification)

def _get_pm_group_members_button(self) -> Locator:
return super()._get_element_locator(self.__private_message_group_members_button)

def _click_on_a_particular_group(self, group_name):
super()._click(f"//a[text()='{group_name}']")

def _click_on_pm_group_members_button(self):
super()._click(self.__private_message_group_members_button)

def _click_on_edit_group_members(self):
super()._click(self.__edit_group_members_option)

def _click_on_remove_a_user_from_group_button(self, username: str):
super()._click(f"//div[@class='info']/a[text()='{username}']/../..//a"
f"[@title='Remove user from group']")

def _click_on_remove_member_confirmation_button(self):
super()._click(self.__remove_user_from_group_confirmation_button)

def _type_into_add_member_field(self, text: str):
super()._type(self.__add_group_member_field, text, delay=0)

def _group_click_on_a_searched_username(self, username: str):
super()._click(f"//div[@class='name_search']/b[text()='{username}']")

def _click_on_add_member_button(self):
super()._click(self.__add_member_button)
53 changes: 36 additions & 17 deletions playwright_tests/pages/messaging_system_pages/inbox_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,22 +53,24 @@ def _get_text_of_inbox_no_message_header(self) -> str:

# Inbox messages actions.
def _get_inbox_message_subject(self, username: str) -> str:
xpath = (
return super()._get_text_of_element((
f"//div[@class='email-cell from']//a[contains(text(),'{username}')]/../..//"
f"a[@class='read']"
)
return super()._get_text_of_element(xpath)
))

# This requires a change def click_on_inbox_message_banner_close_button(self):
# self._page.locator(self.__inbox_page_message_action_banner_close_button).dispatch_event(
# type='click')

def _click_on_inbox_message_delete_button(self, username: str):
xpath_delete_button = (
def _click_on_inbox_message_delete_button_by_username(self, username: str):
super()._click((
f"//div[@class='email-cell from']//a[contains(text(),'{username}')]/../..//"
f"a[@class='delete']"
)
super()._click(xpath_delete_button)
))

def _click_on_inbox_message_delete_button_by_excerpt(self, excerpt: str):
super()._click(f"//div[@class='email-cell excerpt']/a[normalize-space(text())='{excerpt}']"
f"/../..//a[@class='delete']")

def _click_on_inbox_new_message_button(self):
super()._click(self.__inbox_new_message_button)
Expand All @@ -80,16 +82,19 @@ def _click_on_inbox_delete_selected_button(self):
super()._click(self.__inbox_delete_selected_button)

def _click_on_inbox_message_sender_username(self, username: str):
xpath = f"//div[@class='email-cell from']//a[contains(text(),'{username}')]"
super()._click(xpath)
super()._click(f"//div[@class='email-cell from']//a[contains(text(),'{username}')]")

def _inbox_message_select_checkbox_element(self) -> list[ElementHandle]:
return super()._get_element_handles(self.__inbox_delete_checkbox)
def _inbox_message_select_checkbox_element(self, excerpt='') -> list[ElementHandle]:
if excerpt != '':
return super()._get_element_handles(f"//div[@class='email-cell excerpt']"
f"/a[normalize-space(text())='{excerpt}']/../.."
f"/div[@class='email-cell check']/input")
else:
return super()._get_element_handles(self.__inbox_delete_checkbox)

def _click_on_inbox_message_subject(self, username: str):
xpath = (f"//div[@class='email-cell from']//a[contains(text(),'{username}')]/../..//"
f"a[@class='read']")
super()._click(xpath)
super()._click((f"//div[@class='email-cell from']//a[contains(text(),'{username}')]/../.."
f"//a[@class='read']"))

def _click_on_delete_page_delete_button(self):
super()._click(self.__inbox_delete_page_delete_button)
Expand All @@ -109,6 +114,14 @@ def _inbox_message(self, username: str) -> Locator:
return super()._get_element_locator(f"//div[@class='email-cell from']//a[contains(text(),"
f"'{username}')]")

def _inbox_message_based_on_excerpt(self, excerpt: str) -> Locator:
return super()._get_element_locator(f"//div[@class='email-cell excerpt']/a[normalize-space"
f"(text())='{excerpt}']")

def _inbox_message_element_handles(self, excerpt: str) -> list[ElementHandle]:
return super()._get_element_handles(f"//div[@class='email-cell excerpt']/a[normalize-space"
f"(text())='{excerpt}']")

def _are_inbox_messages_displayed(self) -> bool:
return super()._is_element_visible(self.__inbox_messages_section)

Expand All @@ -122,11 +135,17 @@ def _delete_all_inbox_messages(self):
delete_button.click()
self._click_on_delete_page_delete_button()

def _delete_all_inbox_messages_via_delete_selected_button(self):
inbox_messages_count = super()._get_element_handles(self.__inbox_messages)
def _delete_all_inbox_messages_via_delete_selected_button(self, excerpt=''):
if excerpt != '':
inbox_messages_count = self._inbox_message_element_handles(excerpt)
else:
inbox_messages_count = super()._get_element_handles(self.__inbox_messages)
counter = 0
for i in range(len(inbox_messages_count)):
inbox_checkbox = self._inbox_message_select_checkbox_element()
if excerpt != '':
inbox_checkbox = self._inbox_message_select_checkbox_element(excerpt)
else:
inbox_checkbox = self._inbox_message_select_checkbox_element()
element = inbox_checkbox[counter]
element.click()
counter += 1
Expand Down
8 changes: 8 additions & 0 deletions playwright_tests/pages/messaging_system_pages/new_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class NewMessagePage(BasePage):
__new_message_search_results_bolded_characters = "//div[@class='name_search']/b"
__new_message_search_results_text = "//div[@class='name_search']"
__sent_message_page_to_user_text = "//li[@class='token-input-token-facebook']/p"
__sent_messages_page_no_user_text = ("//div[@class='token-input-dropdown-facebook']/p[text("
")='No results']")
__sent_message_page_to_user_delete_button = ("//span[@class='token-input-delete-token"
"-facebook']")

Expand Down Expand Up @@ -61,6 +63,9 @@ def _get_text_of_message_preview_username(self) -> str:
def _get_user_to_text(self) -> str:
return super()._get_text_of_element(self.__sent_message_page_to_user_text)

def _get_no_user_to_locator(self) -> Locator:
return super()._get_element_locator(self.__sent_messages_page_no_user_text)

def _get_new_message_page_header_text(self) -> str:
return super()._get_text_of_element(self.__new_message_page_header)

Expand Down Expand Up @@ -94,6 +99,9 @@ def _click_on_new_message_preview_button(self):
def _click_on_new_message_send_button(self):
super()._click(self.__new_message_send_button)

def _click_on_a_search_result(self, username: str):
super()._click(f"//div[@class='name_search' and text()='{username}']")

def _click_on_a_searched_user(self, username: str):
xpath = f"//div[@class='name_search' and text()='{username}']"
super()._click(xpath)
Expand Down
Loading