Skip to content

Commit c08a00b

Browse files
test: Refine selectors
1 parent 5c04769 commit c08a00b

File tree

5 files changed

+24
-15
lines changed

5 files changed

+24
-15
lines changed

tests/us5.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class US05Tests(unittest.TestCase):
3030
# Original complex XPath selector
3131
NAV_BACK_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'back-icon')]/svg[contains(@class, 'lucide-chevron-left')]]"
3232
# Simpler CSS selector for the back button - targeting the first button in the nav-bar
33-
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-child"
33+
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-of-type" # Refined selector
3434
HOME_CONTAINER_SELECTOR = "div.home__container"
3535
SETTINGS_NAV_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'settings-icon')]/svg[contains(@class, 'lucide-settings')]]"
3636
APPROVAL_GRADE_INPUT_SELECTOR = "input.settings__input[type='number']"

tests/us6.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class US06Tests(unittest.TestCase):
2727
FIRST_TIME_ALERT_BUTTON_SELECTOR = ".alert__button.alert__button--single"
2828
ALERT_OVERLAY_SELECTOR = "div.alert__overlay"
2929
NAV_BACK_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'back-icon')]/svg[contains(@class, 'lucide-chevron-left')]]"
30-
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-child"
30+
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-of-type" # Refined selector
3131
HOME_CONTAINER_SELECTOR = "div.home__container"
3232

3333
# Selector for US06 - Final Estimated Status

tests/us7.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class US07Tests(unittest.TestCase):
2727
FIRST_TIME_ALERT_BUTTON_SELECTOR = ".alert__button.alert__button--single"
2828
ALERT_OVERLAY_SELECTOR = "div.alert__overlay"
2929
NAV_BACK_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'back-icon')]/svg[contains(@class, 'lucide-chevron-left')]]"
30-
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-child"
30+
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-of-type" # Refined selector
3131
HOME_CONTAINER_SELECTOR = "div.home__container"
3232

3333
# Selectors for results verification (from US4, US5, US6)

tests/us8.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class US08Tests(unittest.TestCase):
2727
FIRST_TIME_ALERT_BUTTON_SELECTOR = ".alert__button.alert__button--single"
2828
ALERT_OVERLAY_SELECTOR = "div.alert__overlay"
2929
NAV_BACK_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'back-icon')]/svg[contains(@class, 'lucide-chevron-left')]]"
30-
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-child"
30+
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-of-type" # Refined selector
3131
HOME_CONTAINER_SELECTOR = "div.home__container"
3232

3333
# Selectors for results verification (from US4, US5, US6)

tests/us9.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@ class US09Tests(unittest.TestCase):
2727
FIRST_TIME_ALERT_BUTTON_SELECTOR = ".alert__button.alert__button--single"
2828
ALERT_OVERLAY_SELECTOR = "div.alert__overlay"
2929
NAV_BACK_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'back-icon')]/svg[contains(@class, 'lucide-chevron-left')]]"
30-
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-child"
30+
NAV_BACK_BUTTON_SELECTOR = "nav.nav-bar > button.nav-bar__button:first-of-type" # Refined selector
3131
HOME_CONTAINER_SELECTOR = "div.home__container"
3232

3333
# Selectors for results verification
3434
REQUIRED_GRADE_DISPLAY_SELECTOR = "p.result__card-needed"
3535

3636
# Selectors for US09 - Settings page
3737
SETTINGS_NAV_BUTTON_XPATH = "//button[contains(@class, 'nav-bar__button') and .//span[contains(@class, 'settings-icon')]/svg[contains(@class, 'lucide-settings')]]"
38+
SETTINGS_NAV_BUTTON_SELECTOR = "nav.nav-bar button.nav-bar__button:nth-of-type(2)" # CSS selector for the settings button (assuming it's the second button)
3839
APPROVAL_GRADE_INPUT_SELECTOR = "input.settings__input[type='number']" # As per selenium-test-dev.md
3940
SETTINGS_PAGE_IDENTIFIER = "div.settings__container" # Assuming a container for settings page
4041

@@ -141,16 +142,23 @@ def _initial_setup(self):
141142
def _navigate_to_settings(self):
142143
logger.info("Navigating to Settings page.")
143144
try:
145+
# Try CSS selector first
146+
logger.info(f"Attempting to click settings button with CSS selector: {self.SETTINGS_NAV_BUTTON_SELECTOR}")
144147
settings_button = self.wait_long.until(
145-
EC.element_to_be_clickable((By.XPATH, self.SETTINGS_NAV_BUTTON_XPATH))
148+
EC.element_to_be_clickable((By.CSS_SELECTOR, self.SETTINGS_NAV_BUTTON_SELECTOR))
146149
)
147-
settings_button.click()
148-
self.wait_long.until(EC.presence_of_element_located((By.CSS_SELECTOR, self.SETTINGS_PAGE_IDENTIFIER)))
149-
self.wait_long.until(EC.visibility_of_element_located((By.CSS_SELECTOR, self.APPROVAL_GRADE_INPUT_SELECTOR)))
150-
logger.info("Successfully navigated to Settings page.")
150+
logger.info("Found settings button using CSS selector.")
151151
except TimeoutException:
152-
self._take_screenshot("navigate_to_settings_timeout")
153-
self.fail("Timeout navigating to Settings page or finding approval grade input.")
152+
logger.info("CSS selector failed for settings button, trying XPath...")
153+
settings_button = self.wait_long.until(
154+
EC.element_to_be_clickable((By.XPATH, self.SETTINGS_NAV_BUTTON_XPATH))
155+
)
156+
logger.info("Found settings button using XPath selector.")
157+
158+
settings_button.click()
159+
self.wait_long.until(EC.presence_of_element_located((By.CSS_SELECTOR, self.SETTINGS_PAGE_IDENTIFIER)))
160+
self.wait_long.until(EC.visibility_of_element_located((By.CSS_SELECTOR, self.APPROVAL_GRADE_INPUT_SELECTOR)))
161+
logger.info("Successfully navigated to Settings page.")
154162

155163
def _navigate_to_home_from_settings(self):
156164
logger.info("Navigating to Home page from Settings.")
@@ -314,7 +322,8 @@ def test_us09_change_min_approval_grade_and_verify_calculations(self):
314322
self._click_calculate_and_wait_for_result_page()
315323

316324
required_grade_step1 = self._get_required_grade_value_from_display()
317-
self.assertAlmostEqual(required_grade_step1, 4.0, places=1,
325+
self.assertIsInstance(required_grade_step1, float, f"Step 1: Required grade should be a float, got {type(required_grade_step1)}: {required_grade_step1}")
326+
self.assertAlmostEqual(float(required_grade_step1), 4.0, places=1,
318327
msg=f"Step 1: Expected required grade ~4.0 with approval 3.0. Got: {required_grade_step1}")
319328
logger.info(f"Step 1 Passed. Required grade with approval 3.0: {required_grade_step1}")
320329

@@ -357,8 +366,8 @@ def test_us09_change_min_approval_grade_and_verify_calculations(self):
357366
self._click_calculate_and_wait_for_result_page()
358367

359368
required_grade_step3 = self._get_required_grade_value_from_display()
360-
# Formula: (2.5 * 100 - (2.0 * 50)) / 50 = (250 - 100) / 50 = 150 / 50 = 3.0
361-
self.assertAlmostEqual(required_grade_step3, 3.0, places=1,
369+
self.assertIsInstance(required_grade_step3, float, f"Step 3: Required grade should be a float, got {type(required_grade_step3)}: {required_grade_step3}")
370+
self.assertAlmostEqual(float(required_grade_step3), 3.0, places=1,
362371
msg=f"Step 3: Expected required grade ~3.0 with approval 2.5. Got: {required_grade_step3}")
363372
logger.info(f"Step 3 Passed. Required grade with approval 2.5: {required_grade_step3}")
364373

0 commit comments

Comments
 (0)