@@ -314,20 +314,23 @@ async def test_set_thinking_budget_value_max_fallback(mock_controller, mock_page
314314async def test_control_thinking_mode_toggle_click_failure_fallback (
315315 mock_controller , mock_page
316316):
317- # Test fallback to label click if toggle click fails
317+ # Test fallback to aria- label based toggle click if main toggle click fails
318318 toggle = AsyncMock ()
319319 toggle .click .side_effect = Exception ("Not clickable" )
320320
321- label = AsyncMock ()
321+ alt_toggle = AsyncMock ()
322+ alt_toggle .count = AsyncMock (return_value = 1 )
322323
323324 def locator_side_effect (selector ):
324325 if "button" in selector and "switch" in selector :
325326 return toggle
326- if "mat-slide-toggle" in selector : # Root for fallback
327+ if 'aria-label="Toggle thinking mode"' in selector :
328+ return alt_toggle
329+ if "mat-slide-toggle" in selector : # Old fallback
327330 root = MagicMock ()
328- root .locator .return_value = label
331+ root .locator .return_value = AsyncMock ()
329332 return root
330- return toggle # Default for first locator call
333+ return toggle
331334
332335 mock_page .locator .side_effect = locator_side_effect
333336 toggle .get_attribute .return_value = "false"
@@ -344,7 +347,7 @@ def locator_side_effect(selector):
344347 True , MagicMock (return_value = False )
345348 )
346349
347- label .click .assert_called ()
350+ alt_toggle .click .assert_called ()
348351
349352
350353@pytest .mark .asyncio
@@ -623,20 +626,23 @@ async def test_set_thinking_level_errors(mock_controller):
623626
624627@pytest .mark .asyncio
625628async def test_control_thinking_mode_toggle_fallback (mock_controller ):
626- # Test fallback to label click
629+ # Test fallback to aria- label based toggle click
627630 toggle = MagicMock ()
628631 toggle .get_attribute = AsyncMock (return_value = "false" )
629632 toggle .click = AsyncMock (side_effect = Exception ("Click failed" ))
630633
631- label = MagicMock ()
632- label .click = AsyncMock ()
633- root = MagicMock ()
634- root .locator .return_value = label
634+ alt_toggle = MagicMock ()
635+ alt_toggle .count = AsyncMock (return_value = 1 )
636+ alt_toggle .click = AsyncMock ()
635637
636638 def locator_side_effect (selector ):
637- if "button" in selector and 'data-test-toggle="enable-thinking"' in selector :
639+ if "button" in selector and "switch" in selector :
638640 return toggle
641+ if 'aria-label="Toggle thinking mode"' in selector :
642+ return alt_toggle
639643 if 'data-test-toggle="enable-thinking"' in selector :
644+ root = MagicMock ()
645+ root .locator .return_value = MagicMock ()
640646 return root
641647 return toggle
642648
@@ -653,25 +659,28 @@ def locator_side_effect(selector):
653659 ):
654660 await mock_controller ._control_thinking_mode_toggle (True , check_disconnect_mock )
655661
656- label .click .assert_called ()
662+ alt_toggle .click .assert_called ()
657663
658664
659665@pytest .mark .asyncio
660666async def test_control_thinking_budget_toggle_fallback (mock_controller ):
661- # Test fallback to label click
667+ # Test fallback to aria- label based toggle click
662668 toggle = MagicMock ()
663669 toggle .get_attribute = AsyncMock (return_value = "false" )
664670 toggle .click = AsyncMock (side_effect = Exception ("Click failed" ))
665671
666- label = MagicMock ()
667- label .click = AsyncMock ()
668- root = MagicMock ()
669- root .locator .return_value = label
672+ alt_toggle = MagicMock ()
673+ alt_toggle .count = AsyncMock (return_value = 1 )
674+ alt_toggle .click = AsyncMock ()
670675
671676 def locator_side_effect (selector ):
672- if "button" in selector and 'data-test-toggle="manual-budget"' in selector :
677+ if "button" in selector and "switch" in selector :
673678 return toggle
679+ if 'aria-label="Toggle thinking budget between auto and manual"' in selector :
680+ return alt_toggle
674681 if 'data-test-toggle="manual-budget"' in selector :
682+ root = MagicMock ()
683+ root .locator .return_value = MagicMock ()
675684 return root
676685 return toggle
677686
@@ -690,7 +699,7 @@ def locator_side_effect(selector):
690699 True , check_disconnect_mock
691700 )
692701
693- label .click .assert_called ()
702+ alt_toggle .click .assert_called ()
694703
695704
696705@pytest .mark .asyncio
@@ -1185,26 +1194,28 @@ async def test_control_thinking_mode_toggle_click_cancelled_error(
11851194async def test_control_thinking_mode_toggle_fallback_success (
11861195 mock_controller , mock_page
11871196):
1188- """Test successful fallback to label click (lines 459-468) ."""
1197+ """Test successful fallback to aria- label based toggle click ."""
11891198 toggle = AsyncMock ()
11901199 toggle .get_attribute = AsyncMock (side_effect = ["false" , "true" ]) # Before and after
11911200 toggle .click = AsyncMock (side_effect = Exception ("Click failed" ))
11921201 toggle .scroll_into_view_if_needed = AsyncMock ()
11931202
1194- label = AsyncMock ()
1195- label .click = AsyncMock () # Success on fallback
1196-
1197- root = MagicMock ()
1198- root .locator .return_value = label
1203+ alt_toggle = AsyncMock ()
1204+ alt_toggle .count = AsyncMock (return_value = 1 )
1205+ alt_toggle .click = AsyncMock () # Success on fallback
11991206
12001207 locator_call_count = [0 ]
12011208
12021209 def locator_side_effect (selector ):
12031210 locator_call_count [0 ] += 1
1204- if locator_call_count [ 0 ] == 1 : # First call for toggle button
1211+ if "button" in selector and "switch" in selector :
12051212 return toggle
1206- else : # Second call for mat-slide-toggle root
1207- return root
1213+ if 'aria-label="Toggle thinking mode"' in selector :
1214+ return alt_toggle
1215+ # Old fallback path
1216+ root = MagicMock ()
1217+ root .locator .return_value = MagicMock ()
1218+ return root
12081219
12091220 mock_page .locator .side_effect = locator_side_effect
12101221
@@ -1218,13 +1229,13 @@ def locator_side_effect(selector):
12181229 ):
12191230 mock_controller ._check_disconnect = AsyncMock ()
12201231
1221- # Should succeed via fallback (lines 459-468)
1232+ # Should succeed via fallback
12221233 result = await mock_controller ._control_thinking_mode_toggle (
12231234 True , check_disconnect_mock
12241235 )
12251236
1226- # Verify label click was called (fallback)
1227- label .click .assert_called ()
1237+ # Verify alt_toggle click was called (fallback)
1238+ alt_toggle .click .assert_called ()
12281239 assert result is True
12291240
12301241
@@ -1429,26 +1440,25 @@ async def test_control_thinking_budget_toggle_click_cancelled_error(
14291440async def test_control_thinking_budget_toggle_fallback_success (
14301441 mock_controller , mock_page
14311442):
1432- """Test successful fallback to label click (lines 545-554) ."""
1443+ """Test successful fallback to aria- label based toggle click ."""
14331444 toggle = AsyncMock ()
14341445 toggle .get_attribute = AsyncMock (side_effect = ["false" , "true" ]) # Before and after
14351446 toggle .click = AsyncMock (side_effect = Exception ("Click failed" ))
14361447 toggle .scroll_into_view_if_needed = AsyncMock ()
14371448
1438- label = AsyncMock ()
1439- label .click = AsyncMock () # Success on fallback
1440-
1441- root = MagicMock ()
1442- root .locator .return_value = label
1443-
1444- locator_call_count = [0 ]
1449+ alt_toggle = AsyncMock ()
1450+ alt_toggle .count = AsyncMock (return_value = 1 )
1451+ alt_toggle .click = AsyncMock () # Success on fallback
14451452
14461453 def locator_side_effect (selector ):
1447- locator_call_count [0 ] += 1
1448- if locator_call_count [0 ] == 1 : # First call for toggle button
1454+ if "button" in selector and "switch" in selector :
14491455 return toggle
1450- else : # Second call for mat-slide-toggle root
1451- return root
1456+ if 'aria-label="Toggle thinking budget between auto and manual"' in selector :
1457+ return alt_toggle
1458+ # Old fallback path
1459+ root = MagicMock ()
1460+ root .locator .return_value = MagicMock ()
1461+ return root
14521462
14531463 mock_page .locator .side_effect = locator_side_effect
14541464
@@ -1462,13 +1472,13 @@ def locator_side_effect(selector):
14621472 ):
14631473 mock_controller ._check_disconnect = AsyncMock ()
14641474
1465- # Should succeed via fallback (lines 545-554)
1475+ # Should succeed via fallback
14661476 await mock_controller ._control_thinking_budget_toggle (
14671477 True , check_disconnect_mock
14681478 )
14691479
1470- # Verify label click was called (fallback)
1471- label .click .assert_called ()
1480+ # Verify alt_toggle click was called (fallback)
1481+ alt_toggle .click .assert_called ()
14721482
14731483
14741484@pytest .mark .asyncio
0 commit comments