|
1 | 1 | from playwright.sync_api import Page |
2 | 2 | from pages.base_page import BasePage |
3 | | - |
| 3 | +from typing import List |
4 | 4 |
|
5 | 5 | class OrganisationsPage(BasePage): |
6 | 6 | """Organisations Page locators, and methods for interacting with the page.""" |
@@ -51,36 +51,47 @@ def go_to_bureau_page(self) -> None: |
51 | 51 | """Clicks the 'Bureau' link.""" |
52 | 52 | self.click(self.bureau_page) |
53 | 53 |
|
| 54 | +class OrganisationNotSelectedError(Exception): |
| 55 | + """Raised when no organisation is selected on the organisation switch page.""" |
| 56 | + pass |
54 | 57 |
|
55 | 58 | class OrganisationSwitchPage: |
56 | | - """Organisation Switch Page locators and methods for interacting with the page""" |
| 59 | + """Organisation Switch Page locators and reusable interactions""" |
| 60 | + |
| 61 | + SELECT_ORG_LINK_TEXT = "Select Org" |
57 | 62 |
|
58 | 63 | def __init__(self, page: Page): |
59 | 64 | self.page = page |
60 | | - self.radio_selector = "input[name='organisation']" |
61 | | - self.select_org_link = "a:has-text('Select Organisation')" |
62 | 65 |
|
63 | | - RADIO_SELECTOR = "input[type='radio']" |
64 | | - SELECT_ORG_LINK_TEXT = "Select Org" |
65 | | - LOGIN_INFO_SELECTOR = "td.loginInfo" |
| 66 | + # Locators initialized using Playwright's locator API |
| 67 | + self.radio_buttons = self.page.locator("input[type='radio']") |
| 68 | + self.selected_radio = self.page.locator("input[name='organisation']:checked") |
| 69 | + self.continue_button = self.page.get_by_role("button", name="Continue") |
| 70 | + self.select_org_link = self.page.get_by_role("link", name=self.SELECT_ORG_LINK_TEXT) |
| 71 | + self.login_info = self.page.locator("td.loginInfo") |
66 | 72 |
|
67 | | - def get_available_organisation_ids(self) -> list[str]: |
68 | | - radios = self.page.locator(self.RADIO_SELECTOR) |
| 73 | + def click(self, locator) -> None: |
| 74 | + locator.click() |
| 75 | + |
| 76 | + def get_available_organisation_ids(self) -> List[str]: |
69 | 77 | org_ids = [] |
70 | | - for int in range(radios.count()): |
71 | | - org_id = radios.nth(int).get_attribute("id") |
| 78 | + count = self.radio_buttons.count() |
| 79 | + for element in range(count): |
| 80 | + org_id = self.radio_buttons.nth(element).get_attribute("id") |
72 | 81 | if org_id: |
73 | 82 | org_ids.append(org_id) |
74 | 83 | return org_ids |
75 | 84 |
|
76 | 85 | def select_organisation_by_id(self, org_id: str) -> None: |
77 | | - self.page.locator(f"#{org_id}").check() |
| 86 | + self.click(self.page.locator(f"#{org_id}")) |
78 | 87 |
|
79 | 88 | def click_continue(self) -> None: |
80 | | - self.page.get_by_role("button", name="Continue").click() |
| 89 | + self.click(self.continue_button) |
81 | 90 |
|
82 | 91 | def click_select_org_link(self) -> None: |
83 | | - self.page.get_by_role("link", name=self.SELECT_ORG_LINK_TEXT).click() |
| 92 | + self.click(self.select_org_link) |
84 | 93 |
|
85 | 94 | def get_logged_in_text(self) -> str: |
86 | | - return self.page.locator(self.LOGIN_INFO_SELECTOR).inner_text() |
| 95 | + return self.login_info.inner_text() |
| 96 | + |
| 97 | + |
0 commit comments