Skip to content

Commit 45615d2

Browse files
As per PR # 112 comments, code change is implemented.
1 parent e4b4590 commit 45615d2

File tree

1 file changed

+48
-11
lines changed

1 file changed

+48
-11
lines changed
Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
from datetime import datetime
12
from playwright.sync_api import Page, Locator
23
from pages.base_page import BasePage
34
from typing import Dict
45

6+
# Assume you have a CalendarPicker utility in your project
7+
from utils.calendar_picker import CalendarPicker
8+
59
class SpineSearchPage:
610
"""
711
Page object for the Spine Search screen, enabling demographic searches
@@ -15,35 +19,68 @@ def __init__(self, page: Page):
1519
self.retrieve_data_link = self.page.get_by_role("link", name="Retrieve Data from Spine")
1620
self.demographics_radio = self.page.get_by_role("radio", name="Demographics")
1721
self.date_of_birth_field = self.page.locator("#dateOfBirth")
18-
19-
# Represents the calendar cell for the 6th day in the date picker
20-
self.date = self.page.get_by_role("cell", name="6").first
21-
2222
self.surname_field = self.page.locator("#surname")
2323
self.forename_field = self.page.locator("#forename")
2424
self.gender_dropdown = self.page.locator("#gender")
2525
self.postcode_field = self.page.locator("#postcode")
2626
self.search_button = self.page.get_by_role("button", name="Search")
27-
self.alert_message = self.page.get_by_role("alert")
27+
self.alert_message = self.page.locator(".spine-alert")
2828

29-
def navigate_to_spine_search(self):
29+
# CalendarPicker utility instance
30+
self.calendar_picker = CalendarPicker(self.page)
31+
32+
def navigate_to_spine_search(self) -> None:
33+
"""
34+
Navigates to the Spine Search screen by clicking the appropriate link
35+
and loading the target URL.
36+
"""
3037
self.retrieve_data_link.click()
3138
self.page.goto(self.spine_url)
3239

33-
def select_demographic_search(self):
40+
def select_demographic_search(self) -> None:
41+
"""
42+
Selects the 'Demographics' radio button to enable demographic search mode.
43+
"""
3444
self.demographics_radio.check()
3545

36-
def enter_search_criteria(self, dob: str, surname: str, forename: str, gender: str, postcode: str):
46+
def enter_search_criteria(
47+
self, dob: str, surname: str, forename: str, gender: str, postcode: str
48+
) -> None:
49+
"""
50+
Fills in the demographic search fields with the provided values.
51+
52+
Args:
53+
dob (str): Date of birth in string format (e.g., "06 May 1940").
54+
surname (str): Subject's surname.
55+
forename (str): Subject's forename.
56+
gender (str): Gender value ("Male" or "Female").
57+
postcode (str): Subject's postcode.
58+
"""
59+
60+
# Convert dob string to datetime object
61+
dob_dt = datetime.strptime(dob, "%d %b %Y") # Adjust format if needed
3762
self.date_of_birth_field.click()
38-
self.date.click()
63+
self.calendar_picker.v2_calendar_picker(dob_dt) # dob should be in a supported format, e.g. "YYYY-MM-DD"
3964
self.surname_field.fill(surname)
4065
self.forename_field.fill(forename)
4166
gender_option = {"Male": "1", "Female": "2"}.get(gender, "1")
4267
self.gender_dropdown.select_option(gender_option)
4368
self.postcode_field.fill(postcode)
4469

45-
def perform_search(self):
70+
def perform_search(self) -> None:
71+
"""
72+
Clicks the 'Search' button to initiate the Spine demographic search.
73+
"""
4674
self.search_button.click()
4775

4876
def get_spine_alert_message(self) -> str:
49-
return self.alert_message.inner_text() if self.alert_message.is_visible() else ""
77+
alert_locator = self.page.locator(".spine-alert") # Update selector if needed
78+
try:
79+
alert_locator.wait_for(state="visible", timeout=5000)
80+
return alert_locator.inner_text().strip()
81+
except TimeoutError:
82+
print("Alert message not visible within timeout.")
83+
return ""
84+
except Exception as e:
85+
print(f"Unexpected error while fetching alert: {e}")
86+
return ""

0 commit comments

Comments
 (0)