Files
hive/tools/direct_browser_test.py
T
2026-04-03 07:31:10 -07:00

92 lines
2.4 KiB
Python

#!/usr/bin/env python
"""
Direct browser control test - uses the bridge directly.
Run: uv run python direct_browser_test.py
"""
import asyncio
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent / "src"))
from gcu.browser.bridge import BeelineBridge
async def main():
print("=" * 60)
print("DIRECT BROWSER TEST")
print("=" * 60)
bridge = BeelineBridge()
await bridge.start()
# Wait for connection
print("\nWaiting for extension connection...")
for i in range(10):
await asyncio.sleep(1)
if bridge.is_connected:
print("✓ Extension connected!")
break
print(f" Waiting... ({i+1}/10)")
else:
print("✗ Extension not connected")
await bridge.stop()
return
# Create a context (tab group)
print("\n--- Creating browser context ---")
ctx = await bridge.create_context("test-session")
tab_id = ctx.get("tabId")
group_id = ctx.get("groupId")
print(f"✓ Context created: tabId={tab_id}, groupId={group_id}")
# Navigate
print("\n--- Navigating to example.com ---")
result = await bridge.navigate(tab_id, "https://example.com", wait_until="load")
print(f"✓ Navigated: {result}")
await asyncio.sleep(1)
# Get snapshot
print("\n--- Getting page snapshot ---")
snapshot = await bridge.snapshot(tab_id)
tree = snapshot.get("tree", "")
print(f"✓ Snapshot ({len(tree)} chars):")
print(tree[:500] + "..." if len(tree) > 500 else tree)
# Click the link
print("\n--- Clicking link ---")
result = await bridge.click(tab_id, "a", timeout_ms=5000)
print(f"Click result: {result}")
if result.get("ok"):
print("✓ Click succeeded!")
await asyncio.sleep(2)
# Go back
await bridge.go_back(tab_id)
await asyncio.sleep(1)
# Test type
print("\n--- Testing type on Google ---")
await bridge.navigate(tab_id, "https://www.google.com", wait_until="load")
await asyncio.sleep(2)
result = await bridge.type_text(tab_id, "textarea[name='q']", "hello world")
print(f"Type result: {result}")
if result.get("ok"):
print("✓ Type succeeded!")
# Cleanup
print("\n--- Cleaning up ---")
await bridge.destroy_context(group_id)
print("✓ Context destroyed")
await bridge.stop()
print("✓ Bridge stopped")
if __name__ == "__main__":
asyncio.run(main())