@@ -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