Skip to content

Commit be04897

Browse files
Merge branch 'main' into feature/BCSS-20316-workflow-amendments
2 parents bba8a5a + fb8264a commit be04897

File tree

8 files changed

+199
-39
lines changed

8 files changed

+199
-39
lines changed

pages/logout/log_out_page.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ def __init__(self, page: Page):
1313
def verify_log_out_page(self) -> None:
1414
expect(self.log_out_msg).to_be_visible()
1515

16-
def log_out(self) -> None:
17-
logging.info("Test Complete - Logging Out")
16+
def log_out(self, close_page: bool = True) -> None:
17+
logging.info("Logging Out")
1818
self.click_log_out_link()
1919
expect(self.log_out_msg).to_be_visible()
20-
self.page.close()
20+
if close_page:
21+
self.page.close()
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
4+
5+
class BookAppointmentPage(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Book Appointment - page locators
10+
self.screening_center_dropdown = page.locator("#UI_NEW_SCREENING_CENTRE")
11+
self.site_dropdown = page.locator("#UI_NEW_SITE")
12+
self.day_with_available_slots = page.locator(
13+
'input.twoColumnCalendar[style*="background-color: rgb(102, 255, 153);"]'
14+
).last
15+
self.appointment_time_radio_button = page.locator(
16+
page.get_by_role("radio", name="UI_NEW_SLOT_SELECTION_ID")
17+
)
18+
self.save_button = page.get_by_role("button", name="Save")
19+
20+
def select_screening_centre_dropdown_option(self, screening_centre: str) -> None:
21+
self.screening_center_dropdown.select_option(label=screening_centre)
22+
23+
def select_site_dropdown_option(self, screening_site: str) -> None:
24+
self.site_dropdown.select_option(label=screening_site)
25+
self.site_dropdown.press("Enter")
26+
27+
def choose_day_with_available_slots(self) -> None:
28+
self.click(self.day_with_available_slots)
29+
30+
def choose_appointment_time(self) -> None:
31+
self.appointment_time_radio_button.check()
32+
33+
def click_save_button(self) -> None:
34+
self.click(self.save_button)
35+
36+
def appointment_booked_confirmation_is_displayed(self, message: str) -> None:
37+
expect(self.page.get_by_text(message)).to_be_visible()

pages/screening_practitioner_appointments/colonoscopy_assessment_appointments_page.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,16 @@ def __init__(self, page: Page):
88
self.page = page
99
# Colonoscopy Assessment Appointments - page locators
1010
self.page_header = self.page.locator("#page-title")
11+
self.nhs_number_filter_text_field = self.page.locator("#nhsNumberFilter")
1112

1213
def verify_page_header(self) -> None:
1314
expect(self.page_header).to_contain_text(
1415
"Patients that Require Colonoscopy Assessment Appointments"
1516
)
17+
18+
def filter_by_nhs_number(self, nhs_number: str) -> None:
19+
self.nhs_number_filter_text_field.fill(nhs_number)
20+
self.nhs_number_filter_text_field.press("Enter")
21+
22+
def click_nhs_number_link(self, nhs_number: str) -> None:
23+
self.click(self.page.get_by_role("link", name=nhs_number))
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
4+
5+
class PractitionerAvailabilityPage(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Practitioner Availability - page locators
10+
self.site_id_dropdown = page.locator("#UI_SITE_ID")
11+
self.screening_practitioner_dropdown = page.locator("#UI_PRACTITIONER_ID")
12+
self.calendar_button = page.get_by_role("button", name="Calendar")
13+
self.show_button = page.get_by_role("button", name="Show")
14+
self.time_from_text_field = page.get_by_role("textbox", name="From:")
15+
self.time_to_text_field = page.get_by_role("textbox", name="To:")
16+
self.calculate_slots_button = page.get_by_role("button", name="Calculate Slots")
17+
self.number_of_weeks_text_field = page.locator("#FOR_WEEKS")
18+
self.save_button = page.get_by_role("button", name="Save")
19+
20+
def select_site_dropdown_option(self, site_to_use: str) -> None:
21+
self.site_id_dropdown.select_option(label=site_to_use)
22+
23+
def select_practitioner_dropdown_option(self, practitioner: str) -> None:
24+
self.screening_practitioner_dropdown.select_option(label=practitioner)
25+
26+
def click_calendar_button(self) -> None:
27+
self.click(self.calendar_button)
28+
29+
def click_show_button(self) -> None:
30+
self.click(self.show_button)
31+
32+
def enter_start_time(self, start_time: str) -> None:
33+
self.time_from_text_field.fill(start_time)
34+
35+
def enter_end_time(self, end_time: str) -> None:
36+
self.time_to_text_field.fill(end_time)
37+
38+
def click_calculate_slots_button(self) -> None:
39+
self.click(self.calculate_slots_button)
40+
41+
def enter_number_of_weeks(self, weeks: str) -> None:
42+
self.number_of_weeks_text_field.fill(weeks)
43+
44+
def click_save_button(self) -> None:
45+
self.click(self.save_button)
46+
47+
def slots_updated_message_is_displayed(self, message: str) -> None:
48+
expect(self.page.get_by_text(message)).to_be_visible()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from playwright.sync_api import Page
2+
from pages.base_page import BasePage
3+
4+
5+
class SetAvailabilityPage(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Set Availability - page locators
10+
self.practitioner_availability_link = page.get_by_role(
11+
"link", name="Practitioner Availability -"
12+
)
13+
14+
def go_to_practitioner_availability_page(self) -> None:
15+
self.click(self.practitioner_availability_link)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
4+
5+
class EpisodeEventsAndNotesPage(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# List of episode events and notes - page locators
10+
11+
def expected_episode_event_is_displayed(self, event_description: str) -> None:
12+
expect(
13+
self.page.get_by_role("cell", name=event_description, exact=True)
14+
).to_be_visible()

pages/screening_subject_search/subject_screening_summary.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def __init__(self, page: Page):
1919
"link", name="Subject Events & Notes"
2020
)
2121
self.list_episodes = self.page.get_by_role("link", name="List Episodes")
22+
self.episodes_list_expander_icon = self.page.locator("#ID_LINK_EPISODES_img")
2223
self.subject_demographics = self.page.get_by_role(
2324
"link", name="Subject Demographics"
2425
)
@@ -44,6 +45,9 @@ def __init__(self, page: Page):
4445
)
4546
self.subject_search_results_title = self.page.locator("#ntshPageTitle")
4647
self.display_rs = self.page.locator("#displayRS")
48+
self.first_fobt_episode_link = page.get_by_role(
49+
"link", name="FOBT Screening"
50+
).first
4751

4852
def verify_result_contains_text(self, text) -> None:
4953
expect(self.display_rs).to_contain_text(text)
@@ -112,6 +116,12 @@ def select_change_screening_status(self, option: str) -> None:
112116
def select_reason(self, option: str) -> None:
113117
self.reason.select_option(option)
114118

119+
def expand_episodes_list(self) -> None:
120+
self.click(self.episodes_list_expander_icon)
121+
122+
def click_first_fobt_episode_link(self) -> None:
123+
self.click(self.first_fobt_episode_link)
124+
115125

116126
class ChangeScreeningStatusOptions(Enum):
117127
SEEKING_FURTHER_DATA = "4007"

tests/smokescreen/test_compartment_4.py

Lines changed: 63 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,28 @@
1-
import logging
21
import pytest
3-
from playwright.sync_api import Page, expect
2+
from playwright.sync_api import Page
43
from pages.logout.log_out_page import Logout
54
from pages.base_page import BasePage
5+
from pages.screening_practitioner_appointments.screening_practitioner_appointments import (
6+
ScreeningPractitionerAppointmentsPage,
7+
)
8+
from pages.screening_practitioner_appointments.set_availability_page import (
9+
SetAvailabilityPage,
10+
)
11+
from pages.screening_practitioner_appointments.practitioner_availability_page import (
12+
PractitionerAvailabilityPage,
13+
)
14+
from pages.screening_practitioner_appointments.colonoscopy_assessment_appointments_page import (
15+
ColonoscopyAssessmentAppointments,
16+
)
17+
from pages.screening_practitioner_appointments.book_appointment_page import (
18+
BookAppointmentPage,
19+
)
20+
from pages.screening_subject_search.subject_screening_summary import (
21+
SubjectScreeningSummary,
22+
)
23+
from pages.screening_subject_search.episode_events_and_notes_page import (
24+
EpisodeEventsAndNotesPage,
25+
)
626
from utils.user_tools import UserTools
727
from utils.load_properties_file import PropertiesFile
828
from utils.calendar_picker import CalendarPicker
@@ -46,42 +66,48 @@ def test_compartment_4(page: Page, smokescreen_properties: dict) -> None:
4666

4767
UserTools.user_login(page, "Screening Centre Manager at BCS001")
4868
BasePage(page).go_to_screening_practitioner_appointments_page()
49-
page.get_by_role("link", name="Set Availability").click()
50-
page.get_by_role("link", name="Practitioner Availability -").click()
51-
page.locator("#UI_SITE_ID").select_option(index=1)
52-
page.locator("#UI_PRACTITIONER_ID").select_option(index=1)
53-
page.get_by_role("button", name="Calendar").click()
69+
ScreeningPractitionerAppointmentsPage(page).go_to_set_availability_page()
70+
SetAvailabilityPage(page).go_to_practitioner_availability_page()
71+
PractitionerAvailabilityPage(page).select_site_dropdown_option(
72+
"THE ROYAL HOSPITAL (WOLVERHAMPTON)"
73+
)
74+
PractitionerAvailabilityPage(page).select_practitioner_dropdown_option(
75+
"Astonish, Ethanol"
76+
)
77+
PractitionerAvailabilityPage(page).click_calendar_button()
5478
CalendarPicker(page).select_day(
5579
datetime.today()
5680
) # This will make it so that we can only run this test once a day, or we need to restore the DB back to the snapshot
57-
page.get_by_role("button", name="Show").dblclick()
58-
page.get_by_role("textbox", name="From:").click()
59-
page.get_by_role("textbox", name="From:").fill("09:00")
60-
page.get_by_role("textbox", name="To:").click()
61-
page.get_by_role("textbox", name="To:").fill("17:15")
62-
page.get_by_role("button", name="Calculate Slots").click()
63-
page.locator("#FOR_WEEKS").click()
64-
page.locator("#FOR_WEEKS").fill("6")
65-
page.locator("#FOR_WEEKS").press("Enter")
66-
page.get_by_role("button", name="Save").click()
67-
expect(page.get_by_text("Slots Updated for 6 Weeks")).to_be_visible()
68-
Logout(page).log_out()
81+
PractitionerAvailabilityPage(page).click_show_button()
82+
PractitionerAvailabilityPage(page).enter_start_time("09:00")
83+
PractitionerAvailabilityPage(page).enter_end_time("17:15")
84+
PractitionerAvailabilityPage(page).click_calculate_slots_button()
85+
PractitionerAvailabilityPage(page).enter_number_of_weeks("6")
86+
PractitionerAvailabilityPage(page).click_save_button()
87+
PractitionerAvailabilityPage(page).slots_updated_message_is_displayed(
88+
"Slots Updated for 6 Weeks"
89+
)
90+
Logout(page).log_out(close_page=False)
6991

70-
page.get_by_role("button", name="Log in").click()
92+
ScreeningPractitionerAppointmentsPage(page).go_to_log_in_page()
7193
UserTools.user_login(page, "Hub Manager State Registered at BCS01")
7294
BasePage(page).go_to_screening_practitioner_appointments_page()
73-
page.get_by_role("link", name="Patients that Require").click()
95+
ScreeningPractitionerAppointmentsPage(page).go_to_patients_that_require_page()
7496
# Add for loop to loop x times (depends on how many we want to run it for) 70 - 79
75-
page.locator("#nhsNumberFilter").click()
76-
page.locator("#nhsNumberFilter").fill("9991406131")
77-
page.locator("#nhsNumberFilter").press("Enter")
78-
page.get_by_role("link", name="999 140 6131").click()
79-
page.get_by_label("Screening Centre ( All)").select_option("23162")
80-
page.locator("#UI_NEW_SITE").select_option("42808")
81-
page.locator('input[name="fri2"]').click() # Todays date if available
82-
page.locator("#UI_NEW_SLOT_SELECTION_ID_359119").check()
83-
page.get_by_role("button", name="Save").click()
84-
expect(page.get_by_text("Appointment booked")).to_be_visible()
97+
ColonoscopyAssessmentAppointments(page).filter_by_nhs_number("999 205 6339")
98+
ColonoscopyAssessmentAppointments(page).click_nhs_number_link("999 205 6339")
99+
BookAppointmentPage(page).select_screening_centre_dropdown_option(
100+
"BCS001 - Wolverhampton Bowel Cancer Screening Centre"
101+
)
102+
BookAppointmentPage(page).select_site_dropdown_option("Holly Hall Clinic (? km)")
103+
BookAppointmentPage(page).choose_day_with_available_slots()
104+
# page.locator("#UI_NEW_SLOT_SELECTION_ID_359119").check()
105+
# Will be revisited as part of Utilities update
106+
BookAppointmentPage(page).choose_appointment_time()
107+
BookAppointmentPage(page).click_save_button()
108+
BookAppointmentPage(page).appointment_booked_confirmation_is_displayed(
109+
"Appointment booked"
110+
)
85111

86112
batch_processing(
87113
page,
@@ -96,9 +122,10 @@ def test_compartment_4(page: Page, smokescreen_properties: dict) -> None:
96122
"GP Result (Abnormal)",
97123
"A25 - 1st Colonoscopy Assessment Appointment Booked, letter sent",
98124
)
99-
page.locator("#ID_LINK_EPISODES_img").click()
100-
page.get_by_role("link", name="FOBT Screening").click()
101-
expect(
102-
page.get_by_role("cell", name="A167 - GP Abnormal FOBT Result Sent", exact=True)
103-
).to_be_visible()
125+
126+
SubjectScreeningSummary(page).expand_episodes_list()
127+
SubjectScreeningSummary(page).click_first_fobt_episode_link()
128+
EpisodeEventsAndNotesPage(page).expected_episode_event_is_displayed(
129+
"A167 - GP Abnormal FOBT Result Sent"
130+
)
104131
Logout(page).log_out()

0 commit comments

Comments
 (0)