fix: guard transient controls and verify timeline endpoints

This commit is contained in:
chenmingxuan committed 2026-11-02 13:54:50 +08:00
1 parent 479a185192
commit 00e62a663a
29 files changed
+1150 -90

No files matched your search

+33
View File
@@ -284,6 +284,39 @@ async def test_android_driver_parses_xml_hierarchy_fallback():
assert any(element.get("text") == "Settings" for element in screen_data.ui_elements)
@pytest.mark.asyncio
async def test_android_live_targets_read_fresh_hierarchy_without_screenshot():
client = MagicMock()
client.get_hierarchy.side_effect = [
'<hierarchy><node resource-id="app:id/plus" bounds="[10,20][30,40]"/></hierarchy>',
"<hierarchy/>",
]
driver = AndroidAdbDriver("test-device", MagicMock(), ui_adb_client=client)
driver.get_screen_data = AsyncMock(side_effect=AssertionError("must not capture screen"))
present = await driver.get_ui_elements()
absent = await driver.get_ui_elements()
assert any(e.get("resource-id") == "app:id/plus" for e in present)
assert not any(e.get("resource-id") == "app:id/plus" for e in absent)
assert client.get_hierarchy.call_count == 2
client.get_screen_data.assert_not_called()
driver.get_screen_data.assert_not_called()
@pytest.mark.asyncio
async def test_android_live_hierarchy_errors_do_not_fall_back_to_stale_screen():
client = MagicMock()
client.get_hierarchy.side_effect = TimeoutError("hierarchy unavailable")
driver = AndroidAdbDriver("test-device", MagicMock(), ui_adb_client=client)
driver.get_screen_data = AsyncMock()
with pytest.raises(TimeoutError, match="hierarchy unavailable"):
await driver.get_ui_elements()
driver.get_screen_data.assert_not_called()
@pytest.mark.asyncio
async def test_find_element_prefers_fresh_bounds_over_stale_center():
"""Layout transitions must not leave dynamic element taps at old coordinates."""