Skip to content

Commit e947e4f

Browse files
test: Refine logic for adding and deleting grades in US02 tests
1 parent 9a96dba commit e947e4f

File tree

1 file changed

+25
-30
lines changed

1 file changed

+25
-30
lines changed

tests/us2.py

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -282,40 +282,35 @@ def test_us02_delete_grade_entry(self):
282282
test_name = self._testMethodName
283283
logger.info(f"Running test: {test_name}")
284284

285-
# Add two grades to ensure there's something to delete and something remaining.
286-
# If initial state has 1 row:
287-
# After 1st add: 1 + 2 = 3 rows
288-
# After 2nd add (to the 2nd row, which was previously empty): 3 + 2 = 5 rows (incorrect logic here, see below)
289-
# Corrected logic for _add_grade_and_percentage: it targets the *last* row for input.
290-
# If initial state has 1 row (empty):
291-
# 1. _add_grade_and_percentage("3.0", "20"):
292-
# - Inputs into row 1. Row 1 becomes filled. handleChange adds row 2 (empty). Total = 2.
293-
# - Clicks "Add Grade". handleAddGrade adds row 3 (empty). Total = 3. [F, E, E]
294-
# 2. _add_grade_and_percentage("4.0", "30"):
295-
# - Targets last row (row 3, index 2). Inputs into row 3. Row 3 becomes filled. handleChange adds row 4 (empty). Total = 4. [F, E, F, E]
296-
# - Clicks "Add Grade". handleAddGrade adds row 5 (empty). Total = 5. [F, E, F, E, E]
297-
# This interpretation of +2 per call seems to be what was discussed.
298-
285+
# Add two grades.
286+
# Initial: [E]
287+
# After 1st add ("3.0", "20"): [F1, E, E] (3 rows total)
288+
# After 2nd add ("4.0", "30") to last row (index 2): [F1, E, F2, E, E] (5 rows total)
299289
self._add_grade_and_percentage("3.0", "20")
300290
self._add_grade_and_percentage("4.0", "30")
301291

302292
initial_item_count_before_delete = self._get_grades_list_item_count()
303293
logger.info(f"Item count after adding two grades for delete test: {initial_item_count_before_delete}")
304294

305295
grade_rows_before_delete = self.driver.find_elements(By.CSS_SELECTOR, self.GRADES_LIST_ITEM_SELECTOR)
306-
# We need at least one deletable row that contains data, and preferably more than one row to see a change.
307-
# If we added two grades, we should have at least two rows with data (the first two in the list of rows).
308-
if not grade_rows_before_delete or len(grade_rows_before_delete) < 2:
309-
self._take_screenshot(f"{test_name}_not_enough_rows_to_delete")
310-
self.fail(f"Not enough grade rows to perform delete test. Found: {len(grade_rows_before_delete)}, Expected at least 2 data rows.")
311-
312-
# We will delete the first grade entry (the one in grade_rows_before_delete[0])
313-
first_row_to_delete = grade_rows_before_delete[0]
296+
297+
# We need at least 3 rows to target the second filled one at index 2.
298+
# After two adds, we expect 5 rows: [F1, E, F2, E, E].
299+
if len(grade_rows_before_delete) < 3:
300+
self._take_screenshot(f"{test_name}_not_enough_rows_to_target_second_filled_for_delete")
301+
self.fail(f"Not enough grade rows to target the second filled entry for delete. Found: {len(grade_rows_before_delete)}, Expected at least 3.")
302+
303+
# Target the second filled grade entry (the one at index 2, containing "4.0", "30")
304+
row_to_delete_index = 2
305+
row_to_delete = grade_rows_before_delete[row_to_delete_index]
306+
logger.info(f"Attempting to delete grade from row at index {row_to_delete_index}.")
307+
# logger.info(f"HTML of row to delete: {row_to_delete.get_attribute('outerHTML')}") # For debugging
308+
314309
try:
315-
delete_button = first_row_to_delete.find_element(By.CSS_SELECTOR, self.DELETE_BUTTON_IN_ROW_SELECTOR)
310+
delete_button = row_to_delete.find_element(By.CSS_SELECTOR, self.DELETE_BUTTON_IN_ROW_SELECTOR)
316311
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(delete_button))
317312
delete_button.click()
318-
logger.info("Clicked delete button for the first grade entry.")
313+
logger.info(f"Clicked delete button for the grade entry at index {row_to_delete_index}.")
319314

320315
# Deleting one row should decrease the total count by 1.
321316
expected_count_after_delete = initial_item_count_before_delete - 1
@@ -326,22 +321,22 @@ def test_us02_delete_grade_entry(self):
326321
)
327322
except TimeoutException:
328323
current_count = self._get_grades_list_item_count()
329-
self._take_screenshot(f"{test_name}_timeout_waiting_for_delete")
324+
self._take_screenshot(f"{test_name}_timeout_waiting_for_delete_count_update")
330325
logger.error(f"Timeout waiting for grade item count to become {expected_count_after_delete} after delete. Current count: {current_count}")
331-
# Re-raise or assert here to ensure test fails if wait times out
332326
self.fail(f"Timeout waiting for delete. Expected {expected_count_after_delete}, got {current_count}")
333327

334328
current_item_count_after_delete = self._get_grades_list_item_count()
335329
self.assertEqual(current_item_count_after_delete, expected_count_after_delete,
336330
f"Grade item count did not decrease by 1 after delete. Initial: {initial_item_count_before_delete}, Expected: {expected_count_after_delete}, Current: {current_item_count_after_delete}")
337331

338332
except NoSuchElementException:
339-
self._take_screenshot(f"{test_name}_delete_button_not_found")
340-
logger.error(f"Delete button not found in the first grade row using selector '{self.DELETE_BUTTON_IN_ROW_SELECTOR}'.")
333+
self._take_screenshot(f"{test_name}_delete_button_not_found_in_row_index_{row_to_delete_index}")
334+
logger.error(f"Delete button not found in the grade row at index {row_to_delete_index} using selector '{self.DELETE_BUTTON_IN_ROW_SELECTOR}'.")
335+
logger.error(f"HTML of parent row (index {row_to_delete_index}) where button was not found: {row_to_delete.get_attribute('outerHTML')}")
341336
raise
342337
except TimeoutException: # For the delete button clickability
343-
self._take_screenshot(f"{test_name}_delete_button_not_clickable")
344-
logger.error("Timeout waiting for delete button to be clickable.")
338+
self._take_screenshot(f"{test_name}_delete_button_not_clickable_in_row_index_{row_to_delete_index}")
339+
logger.error(f"Timeout waiting for delete button to be clickable in row at index {row_to_delete_index}.")
345340
raise
346341
except AssertionError as e:
347342
self._take_screenshot(f"{test_name}_assertion_failed_delete")

0 commit comments

Comments
 (0)