Skip to content

Commit 13cc0af

Browse files
committed
Merge branch 'feature/BCSS-20026–refactor-reports-pages-and-tests-new' into feature/BCSS-20025-playwright-resolve-daylight-saving-issue
2 parents fa9327c + c33e105 commit 13cc0af

File tree

3 files changed

+180
-116
lines changed

3 files changed

+180
-116
lines changed

pages/base_page.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def bowel_cancer_screening_system_header_is_displayed(self) -> None:
8787
expect(self.bowel_cancer_screening_system_header).to_contain_text(
8888
"Bowel Cancer Screening System"
8989
)
90+
expect(self.bowel_cancer_screening_system_header).to_contain_text(
91+
"Bowel Cancer Screening System"
92+
)
9093

9194
def main_menu_header_is_displayed(self) -> None:
9295
expect(self.main_menu__header).to_contain_text("Main Menu")

pages/reports/reports_page.py

Lines changed: 107 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,92 +6,131 @@ class ReportsPage(BasePage):
66
def __init__(self, page):
77
super().__init__(page)
88
self.page = page
9+
910
# Reports page main menu links
10-
self.bureau_reports_page = self.page.get_by_role("link", name="Bureau Reports")
11-
self.failsafe_reports_page = self.page.get_by_role(
11+
self.bureau_reports_link = self.page.get_by_text("Bureau Reports")
12+
self.failsafe_reports_link = self.page.get_by_role(
1213
"link", name="Failsafe Reports"
1314
)
14-
self.operational_reports_page = self.page.get_by_role(
15+
self.operational_reports_link = self.page.get_by_role(
1516
"link", name="Operational Reports"
1617
)
17-
self.strategic_reports_page = self.page.get_by_role(
18+
self.strategic_reports_link = self.page.get_by_role(
1819
"link", name="Strategic Reports"
1920
)
20-
self.cancer_waiting_times_reports_page = self.page.get_by_role(
21+
self.cancer_waiting_times_reports_link = self.page.get_by_role(
2122
"link", name="Cancer Waiting Times Reports"
2223
)
23-
self.dashboard = self.page.get_by_role("link", name="Dashboard")
24-
self.qa_report_dataset_completion_page = self.page.get_by_role(
24+
self.dashboard_link = self.page.get_by_role("link", name="Dashboard")
25+
self.qa_report_dataset_completion_link = self.page.get_by_role(
2526
"link", name="QA Report : Dataset Completion"
2627
)
27-
# Reports pages shared buttons & links
28+
29+
# Reports pages shared buttons, locators & links
2830
self.refresh_page_button = self.page.get_by_role("button", name="Refresh")
31+
self.reports_update_button = self.page.get_by_role("button", name="Update")
32+
self.report_start_date_field = self.page.get_by_role(
33+
"textbox", name="Report Start Date"
34+
)
35+
self.qa_report_dataset_completion_link = self.page.get_by_text(
36+
"QA Report : Dataset Completion"
37+
)
38+
39+
# Generate Report button locators
2940
self.generate_report_button = self.page.get_by_role(
3041
"button", name="Generate Report"
3142
)
32-
self.reports_update_button = self.page.get_by_role("button", name="Update")
33-
self.report_timestamp_element = self.page.locator("b")
43+
self.operational_reports_sp_appointments_generate_report_button = (
44+
self.page.locator("#submitThisForm")
45+
)
46+
47+
# Set patients screening centre dropdown locators
3448
self.set_patients_screening_centre_dropdown = self.page.locator(
3549
"#cboScreeningCentre"
3650
)
51+
self.six_weeks_availability_not_set_up_set_patients_screening_centre_dropdown = self.page.get_by_label(
52+
"Screening Centre"
53+
)
54+
self.practitioner_appointments_set_patients_screening_centre_dropdown = (
55+
page.get_by_label("Screening Centre")
56+
)
57+
self.attendance_not_updated_set_patients_screening_centre_dropdown = (
58+
page.get_by_label("Screening Centre")
59+
)
60+
61+
# Select screening practitioner dropdown locators
62+
self.screening_practitioner_dropdown = self.page.locator("#A_C_NURSE")
63+
64+
# Report Timestamp locators
65+
self.common_report_timestamp_element = self.page.locator("b")
66+
self.subject_ceased_report_timestamp_element = self.page.locator(
67+
"#displayGenerateDate > tbody > tr > td > b"
68+
)
69+
self.fobt_logged_not_read_report_timestamp_element = self.page.locator(
70+
"#report-generated"
71+
)
72+
self.six_weeks_availability_not_set_up_report_timestamp_element = (
73+
self.page.locator("#displayGenerateDate")
74+
)
3775

3876
# Failsafe Reports menu links
39-
self.date_report_last_requested_page = self.page.get_by_role(
77+
self.date_report_last_requested_link = self.page.get_by_role(
4078
"link", name="Date Report Last Requested"
4179
)
42-
self.screening_subjects_with_inactive_open_episode_link_page = (
43-
self.page.get_by_role("link", name="Screening Subjects With")
80+
self.screening_subjects_with_inactive_open_episode_link = self.page.get_by_role(
81+
"link", name="Screening Subjects With"
4482
)
45-
self.subjects_ceased_due_to_date_of_birth_changes_page = self.page.get_by_role(
83+
self.subjects_ceased_due_to_date_of_birth_changes_link = self.page.get_by_role(
4684
"link", name="Subjects Ceased Due to Date"
4785
)
48-
self.allocate_sc_for_patient_movements_within_hub_boundaries_page = (
86+
self.allocate_sc_for_patient_movements_within_hub_boundaries_link = (
4987
self.page.get_by_role(
5088
"link", name="Allocate SC for Patient Movements within Hub Boundaries"
5189
)
5290
)
53-
self.allocate_sc_for_patient_movements_into_your_hub_page = (
91+
self.allocate_sc_for_patient_movements_into_your_hub_link = (
5492
self.page.get_by_role(
5593
"link", name="Allocate SC for Patient Movements into your Hub"
5694
)
5795
)
58-
self.identify_and_link_new_gp_page = self.page.get_by_role(
96+
self.identify_and_link_new_gp_link = self.page.get_by_role(
5997
"link", name="Identify and link new GP"
6098
)
99+
61100
# Operational Reports menu links
62-
self.appointment_attendance_not_updated_page = self.page.get_by_role(
101+
self.appointment_attendance_not_updated_link = self.page.get_by_role(
63102
"link", name="Appointment Attendance Not"
64103
)
65-
self.fobt_kits_logged_but_not_read_page = self.page.get_by_role(
104+
self.fobt_kits_logged_but_not_read_link = self.page.get_by_role(
66105
"link", name="FOBT Kits Logged but Not Read"
67106
)
68-
self.demographic_update_inconsistent_with_manual_update_page = (
107+
self.demographic_update_inconsistent_with_manual_update_link = (
69108
self.page.get_by_role("link", name="Demographic Update")
70109
)
71-
self.screening_practitioner_6_weeks_availability_not_set_up_report_page = (
110+
self.screening_practitioner_6_weeks_availability_not_set_up_report_link = (
72111
page.get_by_role("link", name="Screening Practitioner 6")
73112
)
74-
self.screening_practitioner_appointments_page = self.page.get_by_role(
113+
self.screening_practitioner_appointments_link = self.page.get_by_role(
75114
"link", name="Screening Practitioner Appointments"
76115
)
77116

78-
# Reports page main menu links
117+
# Reports page main menu navigation
79118
def go_to_failsafe_reports_page(self) -> None:
80-
self.click(self.failsafe_reports_page)
119+
self.click(self.failsafe_reports_link)
81120

82121
def go_to_operational_reports_page(self) -> None:
83-
self.click(self.operational_reports_page)
122+
self.click(self.operational_reports_link)
84123

85124
def go_to_strategic_reports_page(self) -> None:
86-
self.click(self.strategic_reports_page)
125+
self.click(self.strategic_reports_link)
87126

88127
def go_to_cancer_waiting_times_reports_page(self) -> None:
89-
self.click(self.cancer_waiting_times_reports_page)
128+
self.click(self.cancer_waiting_times_reports_link)
90129

91130
def go_to_dashboard(self) -> None:
92-
self.click(self.dashboard)
131+
self.click(self.dashboard_link)
93132

94-
# Reports pages shared buttons actions
133+
# Reports pages shared buttons and actions
95134
def click_refresh_button(self) -> None:
96135
self.click(self.refresh_page_button)
97136

@@ -103,41 +142,69 @@ def click_reports_pages_update_button(self) -> None:
103142

104143
# Failsafe Reports menu links
105144
def go_to_date_report_last_requested_page(self) -> None:
106-
self.click(self.date_report_last_requested_page)
145+
self.click(self.date_report_last_requested_link)
107146

108147
def go_to_screening_subjects_with_inactive_open_episode_link_page(self) -> None:
109-
self.click(self.screening_subjects_with_inactive_open_episode_link_page)
148+
self.click(self.screening_subjects_with_inactive_open_episode_link)
110149

111150
def go_to_subjects_ceased_due_to_date_of_birth_changes_page(self) -> None:
112-
self.click(self.subjects_ceased_due_to_date_of_birth_changes_page)
151+
self.click(self.subjects_ceased_due_to_date_of_birth_changes_link)
113152

114153
def go_to_allocate_sc_for_patient_movements_within_hub_boundaries_page(
115154
self,
116155
) -> None:
117-
self.click(self.allocate_sc_for_patient_movements_within_hub_boundaries_page)
156+
self.click(self.allocate_sc_for_patient_movements_within_hub_boundaries_link)
118157

119158
def go_to_allocate_sc_for_patient_movements_into_your_hub_page(self) -> None:
120-
self.click(self.allocate_sc_for_patient_movements_into_your_hub_page)
159+
self.click(self.allocate_sc_for_patient_movements_into_your_hub_link)
121160

122161
def go_to_identify_and_link_new_gp_page(self) -> None:
123-
self.click(self.identify_and_link_new_gp_page)
162+
self.click(self.identify_and_link_new_gp_link)
124163

125164
# Operational Reports menu links
126165
def go_to_appointment_attendance_not_updated_page(self) -> None:
127-
self.click(self.appointment_attendance_not_updated_page)
166+
self.click(self.appointment_attendance_not_updated_link)
128167

129168
def go_to_fobt_kits_logged_but_not_read_page(self) -> None:
130-
self.click(self.fobt_kits_logged_but_not_read_page)
169+
self.click(self.fobt_kits_logged_but_not_read_link)
131170

132171
def go_to_demographic_update_inconsistent_with_manual_update_page(self) -> None:
133-
self.click(self.demographic_update_inconsistent_with_manual_update_page)
172+
self.click(self.demographic_update_inconsistent_with_manual_update_link)
134173

135174
def go_to_screening_practitioner_6_weeks_availability_not_set_up_report_page(
136175
self,
137176
) -> None:
138177
self.click(
139-
self.screening_practitioner_6_weeks_availability_not_set_up_report_page
178+
self.screening_practitioner_6_weeks_availability_not_set_up_report_link
140179
)
141180

142181
def go_to_screening_practitioner_appointments_page(self) -> None:
143-
self.click(self.screening_practitioner_appointments_page)
182+
self.click(self.screening_practitioner_appointments_link)
183+
184+
def click_nhs_number_link(self, page: Page) -> None:
185+
"""
186+
Clicks the first NHS number link present on the screen if any are found.
187+
"""
188+
# List of locators to check for NHS number links.
189+
# This implementation is a workaround for the fact that the NHS number
190+
# links are not using the same locators accross bcss
191+
# This is a temporary solution until
192+
# we have a table utility that will allow us to interact with tables across bcss.
193+
locators = [
194+
"#listReportDataTable > tbody > tr:nth-child(3) > td:nth-child(1) > a",
195+
"//*[@id='listReportDataTable']/tbody/tr[3]/td[1]",
196+
"//*[@id='listReportDataTable']/tbody/tr[3]/td[2]",
197+
"#listReportDataTable > tbody > tr:nth-child(3) > td:nth-child(1) > a",
198+
"#subjInactiveOpenEpisodes > tbody > tr:nth-child(1) > td.NHS_NUMBER.dt-type-numeric > a",
199+
]
200+
201+
for locator_string in locators:
202+
try:
203+
# Use page.locator to get a locator object
204+
locator = page.locator(locator_string)
205+
# Check if the locator is visible
206+
if locator.is_visible():
207+
# Click the locator
208+
locator.click()
209+
except Exception:
210+
print("No NHS number links found on the page")

0 commit comments

Comments
 (0)