Skip to content

Commit af8ec41

Browse files
Initial commit
1 parent e95889d commit af8ec41

16 files changed

+265
-130
lines changed

docs/RepositoryGuide.md

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# BCSS Playwright Automation Repository Reference
2+
3+
This document provides a comprehensive reference for all Page Object Models (POMs), classes, utilities, and UI applications available in this repository.
4+
It is intended to help developers and testers understand the structure, usage, and capabilities of each component.
5+
6+
---
7+
8+
## Table of Contents
9+
10+
- [BCSS Playwright Automation Repository Reference](#bcss-playwright-automation-repository-reference)
11+
- [Table of Contents](#table-of-contents)
12+
- [Page Object Models (POMs)](#page-object-models-poms)
13+
- [Available POMs](#available-poms)
14+
15+
---
16+
17+
## Page Object Models (POMs)
18+
19+
All POMs are located in the `pages/` directory.<br>
20+
Each POM encapsulates locators and methods for interacting with a specific page or feature in the UI.
21+
The POMs have been organised into folders based on the base/main page to allow for easier navigation.
22+
23+
### Available POMs
24+
25+
- base_page
26+
- alerts/
27+
- alerts_page
28+
- bowel_scope/
29+
- bowel_scope_appointments_page
30+
- bowel_scope_page
31+
- call_and_recall/
32+
- age_extension_rollout_plans_page
33+
- call_and_recall_page
34+
- create_a_plan_page
35+
- generate_invitations_page
36+
- invitations_monitoring_page
37+
- invitations_plans_page
38+
- non_invitation_days_page
39+
- communication_production/
40+
- batch_list_page
41+
- communication_production_page
42+
- electronic_communication_management_page
43+
- letter_library_index_page
44+
- manage_active_batch_page
45+
- manage_archived_batch_page
46+
- contacts_list/
47+
- contacts_list_page
48+
- edit_contact_page
49+
- edit_my_contact_details_page
50+
- maintain_contacts_page
51+
- my_preference_settings_page
52+
- resect_and_discard_accreditation_history_page
53+
- view_contacts_page
54+
- datasets/
55+
- cancer_audit_datasets_page
56+
- colonoscopy_dataset_page
57+
- investigation_dataset_page
58+
- subject_dataset_page
59+
- download/
60+
- batch_download_request_and_retrieval_page
61+
- downloads_page
62+
- individual_download_request_and_retrieval_page
63+
- list_of_individual_downloads_page
64+
- fit_test_kits/
65+
- fit_rollout_summary_page
66+
- fit_test_kits_page
67+
- kit_result_audit_page
68+
- kit_service_management_page
69+
- log_devices_page
70+
- maintain_analysers_page
71+
- manage_qc_products_page
72+
- screening_incidents_list_page
73+
- view_algorithms_page
74+
- view_fit_kit_result_page
75+
- view_screening_centre_fit_confguration_page
76+
- gfobt_test_kits/
77+
- gfobt_creaate_qc_kit_page
78+
- gfobt_test_kit_logging_page
79+
- gfobt_test_kit_quality_control_reading_page
80+
- gfobt_test_kits_page
81+
- gfobt_view_test_kit_result_page
82+
- login/
83+
- cognito_login_page
84+
- login_failure_screen_page
85+
- login_page
86+
- select_job_role_page
87+
- logout/
88+
- log_out_page
89+
- lynch_surveillance/
90+
- lynch_invitation_page
91+
- set_lynch_invitation_rates_page
92+
- manual_cease/
93+
- manual_cease_page
94+
- organisations/
95+
- create_organisation_page
96+
- create_site_page
97+
- list_all_organisations_page
98+
- list_all_sites_page
99+
- organisations_and_site_details_page
100+
- organisations_page
101+
- view_organisation_page
102+
- reports/
103+
- reports_page
104+
- screening_practitioner_appointments/
105+
- appointment_calendar_page
106+
- appointment_detail_page
107+
- book_appointment_page
108+
- colonoscopy_assessment_appointments_apge
109+
- practitioner_availability_page
110+
- screening_practitioner_appointments_page
111+
- screening_practitioner_day_view_page
112+
- set_availability_page
113+
- screening_subject_search/
114+
- advance_fobt_screening_episode_page
115+
- attend_diagnostic_test_page
116+
- close_fobt_screening_episode_page
117+
- contact_with_patient_page
118+
- diagnostic_test_outcome_page
119+
- episode_events_and_notes_page
120+
- handover_into_symptomatic_cate_page
121+
- non_neoplastic_result_from_symtpomatic_prociedure_page
122+
- patient_adviced_of_diagnosis_page
123+
- record_diagnosis_date_page
124+
- reopen_fobt_screening_episode_page
125+
- return_from_symtomatic_referral_page
126+
- subject_demographic_page
127+
- subject_episode_events_and_notes_page
128+
- subject_events_notes_page
129+
- subject_screening_search_page
130+
- subject_screening_summary_page
131+
- subject_spine_retrieval_search_page
132+
- surveillance/
133+
- surveillance_summary_review_page
134+
135+
---

pages/alerts/alerts_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ def click_refresh_alerts(self) -> None:
1111
"""Clicks the 'Refresh Alerts' link to trigger an update of alert messages."""
1212
self.refresh_alerts_link.click()
1313

14-
def is_refresh_alerts_visible(self, timeout=5000) -> bool:
14+
def is_refresh_alerts_visible(self, timeout: int = 5000) -> bool:
1515
"""Returns True if the 'Refresh Alerts' link is visible within the given timeout."""
1616
return self.refresh_alerts_link.is_visible(timeout=timeout)

pages/base_page.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ def __init__(self, page: Page):
4545
self.screening_subject_search_page = self.page.get_by_role(
4646
"link", name="Screening Subject Search"
4747
)
48+
self.log_in_page = self.page.get_by_role("button", name="Log in")
4849
# Bowel Cancer Screening System header
4950
self.bowel_cancer_screening_system_header = self.page.locator("#ntshAppTitle")
5051
# Bowel Cancer Screening Page header
5152
self.bowel_cancer_screening_page_title = self.page.locator("#page-title")
5253
self.bowel_cancer_screening_ntsh_page_title = self.page.locator(
5354
"#ntshPageTitle"
5455
)
55-
self.main_menu__header = self.page.locator("#ntshPageTitle")
56-
self.log_in_page = self.page.get_by_role("button", name="Log in")
56+
self.main_menu_header = self.page.locator("#ntshPageTitle")
5757

5858
def click_main_menu_link(self) -> None:
5959
"""Click the Base Page 'Main Menu' link if it is visible."""
@@ -64,8 +64,8 @@ def click_main_menu_link(self) -> None:
6464
if self.main_menu_link.is_visible():
6565
self.click(self.main_menu_link)
6666
try:
67-
if self.main_menu__header.is_visible():
68-
text = self.main_menu__header.text_content()
67+
if self.main_menu_header.is_visible():
68+
text = self.main_menu_header.text_content()
6969
else:
7070
text = None
7171
except Exception as e:
@@ -132,7 +132,7 @@ def main_menu_header_is_displayed(self) -> None:
132132
Asserts that the Main Menu header is displayed.
133133
self.main_menu_string contains the string 'Main Menu'
134134
"""
135-
expect(self.main_menu__header).to_contain_text(self.main_menu_string)
135+
expect(self.main_menu_header).to_contain_text(self.main_menu_string)
136136

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

pages/organisations/create_organisation.py renamed to pages/organisations/create_organisation_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pages.base_page import BasePage
44

55

6-
class CreateOrganisation(BasePage):
6+
class CreateOrganisationPage(BasePage):
77
"""Create Organisation Page locators, and methods for interacting with the page."""
88

99
def __init__(self, page: Page):
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pages.base_page import BasePage
44

55

6-
class CreateSite(BasePage):
6+
class CreateSitePage(BasePage):
77
"""Create Site Page locators, and methods for interacting with the page."""
88

99
def __init__(self, page: Page):

pages/organisations/list_all_organisations.py renamed to pages/organisations/list_all_organisations_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from utils.table_util import TableUtils
66

77

8-
class ListAllOrganisations(BasePage):
8+
class ListAllOrganisationsPage(BasePage):
99
"""Organisations And Site Details Page locators, and methods for interacting with the page."""
1010

1111
def __init__(self, page: Page):

pages/organisations/list_all_sites.py renamed to pages/organisations/list_all_sites_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from utils.table_util import TableUtils
66

77

8-
class ListAllSites(BasePage):
8+
class ListAllSitesPage(BasePage):
99
"""List All Sites Page locators, and methods for interacting with the page."""
1010

1111
def __init__(self, page: Page):

pages/organisations/organisations_and_site_details.py renamed to pages/organisations/organisations_and_site_details_page.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pages.base_page import BasePage
44

55

6-
class OrganisationsAndSiteDetails(BasePage):
6+
class OrganisationsAndSiteDetailsPage(BasePage):
77
"""Organisations And Site Details Page locators, and methods for interacting with the page."""
88

99
def __init__(self, page: Page):

pages/organisations/view_organisation.py renamed to pages/organisations/view_organisation_page.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pages.base_page import BasePage
44

55

6-
class ViewOrganisation(BasePage):
6+
class ViewOrganisationPage(BasePage):
77
"""View Organisation Page locators, and methods for interacting with the page."""
88

99
def __init__(self, page: Page):
@@ -16,12 +16,12 @@ def verify_page_title(self) -> None:
1616
logging.info("Verifying page title for View Organisation")
1717
expect(self.page.locator("#ntshPageTitle")).to_contain_text("View Organisation")
1818

19-
def verify_organisation_code_details(self,text:str) -> None:
19+
def verify_organisation_code_details(self, text: str) -> None:
2020
"""Verifies that the organisation code details are displayed correctly."""
2121
logging.info("Verifying organisation code details on View Organisation page")
2222
expect(self.page.locator('form[name="frm"]')).to_contain_text(text)
2323

24-
def verify_organisation_type_details(self,text:str) -> None:
24+
def verify_organisation_type_details(self, text: str) -> None:
2525
"""Verifies that the organisation type details are displayed correctly."""
2626
logging.info("Verifying organisation type details on View Organisation page")
2727
expect(self.page.locator('form[name="frm"]')).to_contain_text(text)

pages/screening_subject_search/subject_events_notes.py renamed to pages/screening_subject_search/subject_events_notes_page.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
from playwright.sync_api import Page, Locator
1+
from playwright.sync_api import Page
22
from pages.base_page import BasePage
33
from enum import StrEnum
44
import logging
5-
import pytest
65
from utils.table_util import TableUtils
76

87

9-
class SubjectEventsNotes(BasePage):
8+
class SubjectEventsNotesPage(BasePage):
109
"""Subject Events Notes Page locators, and methods for interacting with the page."""
1110

1211
def __init__(self, page: Page):

0 commit comments

Comments
 (0)