Skip to content

Commit f4a8ce3

Browse files
Improving reliability of the main menu click
1 parent 074b567 commit f4a8ce3

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

pages/base_page.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class BasePage:
77

88
def __init__(self, page: Page):
99
self.page = page
10+
# Homepage - vars
11+
self.main_menu_string = "Main Menu"
1012
# Homepage/Navigation Bar links
1113
self.sub_menu_link = self.page.get_by_role("link", name="Show Sub-menu")
1214
self.hide_sub_menu_link = self.page.get_by_role("link", name="Hide Sub-menu")
@@ -16,7 +18,7 @@ def __init__(self, page: Page):
1618
self.refresh_alerts_link = self.page.get_by_role("link", name="Refresh alerts")
1719
self.user_guide_link = self.page.get_by_role("link", name="User guide")
1820
self.help_link = self.page.get_by_role("link", name="Help")
19-
self.main_menu_link = self.page.get_by_role("link", name="Main Menu")
21+
self.main_menu_link = self.page.get_by_role("link", name=self.main_menu_string)
2022
self.log_out_link = self.page.get_by_role("link", name="Log-out")
2123
# Main menu - page links
2224
self.contacts_list_page = self.page.get_by_role("link", name="Contacts List")
@@ -54,8 +56,27 @@ def __init__(self, page: Page):
5456

5557
def click_main_menu_link(self) -> None:
5658
"""Click the Base Page 'Main Menu' link if it is visible."""
57-
if self.main_menu_link.is_visible():
58-
self.click(self.main_menu_link)
59+
loops = 0
60+
while loops <= 3:
61+
if self.main_menu_link.is_visible():
62+
self.click(self.main_menu_link)
63+
try:
64+
if self.main_menu__header.is_visible():
65+
text = self.main_menu__header.text_content()
66+
else:
67+
text = None
68+
except Exception as e:
69+
logging.warning(f"Could not read header text: {e}")
70+
text = None
71+
72+
if text and self.main_menu_string in text:
73+
break
74+
else:
75+
logging.warning("Main Menu click failed, retrying after 0.2 seconds")
76+
# The timeout is in place here to allow the page ample time to load if it has not already been loaded
77+
self.page.wait_for_timeout(200)
78+
79+
loops += 1
5980

6081
def click_log_out_link(self) -> None:
6182
"""Click the Base Page 'Log-out' link."""
@@ -101,7 +122,7 @@ def bowel_cancer_screening_system_header_is_displayed(self) -> None:
101122

102123
def main_menu_header_is_displayed(self) -> None:
103124
"""Asserts that the Main Menu header is displayed."""
104-
expect(self.main_menu__header).to_contain_text("Main Menu")
125+
expect(self.main_menu__header).to_contain_text(self.main_menu_string)
105126

106127
def bowel_cancer_screening_page_title_contains_text(self, text: str) -> None:
107128
"""Asserts that the page title contains the specified text.

0 commit comments

Comments
 (0)