1- from playwright .sync_api import Page , expect
1+ from playwright .sync_api import Page , Locator
22from pages .base_page import BasePage
33from typing import Dict
44
@@ -11,57 +11,39 @@ def __init__(self, page: Page):
1111 self .page = page
1212 self .spine_url = "https://bcss-bcss-18680-ddc-bcss.k8s-nonprod.texasplatform.uk/servlet/SpineSearchScreen"
1313
14+ # Define locators
15+ self .retrieve_data_link = self .page .get_by_role ("link" , name = "Retrieve Data from Spine" )
16+ self .demographics_radio = self .page .get_by_role ("radio" , name = "Demographics" )
17+ 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+
22+ self .surname_field = self .page .locator ("#surname" )
23+ self .forename_field = self .page .locator ("#forename" )
24+ self .gender_dropdown = self .page .locator ("#gender" )
25+ self .postcode_field = self .page .locator ("#postcode" )
26+ self .search_button = self .page .get_by_role ("button" , name = "Search" )
27+ self .alert_message = self .page .get_by_role ("alert" )
28+
1429 def navigate_to_spine_search (self ):
15- """
16- Navigates to the Spine Search screen by clicking the appropriate link and
17- loading the target URL.
18- """
19- self .page .get_by_role ("link" , name = "Retrieve Data from Spine" ).click ()
30+ self .retrieve_data_link .click ()
2031 self .page .goto (self .spine_url )
2132
2233 def select_demographic_search (self ):
23- """
24- Selects the 'Demographics' radio button to enable demographic-based search.
25- """
26- self .page .get_by_role ("radio" , name = "Demographics" ).check ()
34+ self .demographics_radio .check ()
2735
2836 def enter_search_criteria (self , dob : str , surname : str , forename : str , gender : str , postcode : str ):
29- """Fills in demographic search fields with user details."""
30- # Date of Birth
31- self .page .locator ("#dateOfBirth" ).click ()
32- self .page .get_by_role ("cell" , name = "6" ).first .click ()
33-
34- # Surname
35- self .page .locator ("#surname" ).fill (surname )
36-
37- # Forename
38- self .page .locator ("#forename" ).fill (forename )
39-
40- # Gender
37+ self .date_of_birth_field .click ()
38+ self .date .click ()
39+ self .surname_field .fill (surname )
40+ self .forename_field .fill (forename )
4141 gender_option = {"Male" : "1" , "Female" : "2" }.get (gender , "1" )
42- self .page .locator ("#gender" ).select_option (gender_option )
43-
44- # Postcode
45- self .page .locator ("#postcode" ).fill (postcode )
42+ self .gender_dropdown .select_option (gender_option )
43+ self .postcode_field .fill (postcode )
4644
4745 def perform_search (self ):
48- """
49- Clicks the 'Search' button to initiate the demographic search.
50- """
51- self .page .get_by_role ("button" , name = "Search" ).click ()
52-
46+ self .search_button .click ()
5347
5448 def get_spine_alert_message (self ) -> str :
55- """
56- Retrieve the visible alert message from the page, if any.
57-
58- Returns:
59- str: The inner text of the alert element if it's visible;
60- otherwise, an empty string.
61- """
62- self .alert_message = self .page .get_by_role ("alert" )
63- if self .alert_message .is_visible ():
64- return self .alert_message .inner_text ()
65- else :
66- return ""
67-
49+ return self .alert_message .inner_text () if self .alert_message .is_visible () else ""
0 commit comments