92 lines
2.4 KiB
Python
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())
|