The AgentBay SDK provides UI automation for cloud phones, including touch gestures, text input, key events, UI element detection, and screenshots.
Overview
The SDK provides the following UI automation features:
-
Touch operations: Tap and swipe gestures for cloud phone interaction.
-
Text input: Enter text and send hardware keypress events.
-
UI element detection: Find and interact with UI elements.
-
Screen operations: Capture screenshots for visual verification.
Create a session
from agentbay import AgentBay
from agentbay.session_params import CreateSessionParams
agent_bay = AgentBay()
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
# The session is created. You can now automate the cloud phone.
Touch operations
Tap gestures
Tap the screen at specific coordinates:
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
# Tap at the specified coordinates.
result = session.mobile.tap(x=500, y=300)
if result.success:
print("Tap successful") # Output: Tap successful
else:
print(f"Tap failed: {result.error_message}")
agent_bay.delete(session)
Swipe gestures
Swipe from one point to another:
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
# Swipe up (from bottom to top).
result = session.mobile.swipe(
start_x=100,
start_y=500,
end_x=100,
end_y=200,
duration_ms=300
)
if result.success:
print("Swipe up successful") # Output: Swipe up successful
# Swipe left (from right to left).
result = session.mobile.swipe(
start_x=500,
start_y=300,
end_x=100,
end_y=300,
duration_ms=300
)
if result.success:
print("Swipe left successful") # Output: Swipe left successful
agent_bay.delete(session)
Parameters:
-
start_x,start_y: Starting coordinates. -
end_x,end_y: Ending coordinates. -
duration_ms: Swipe duration in milliseconds. Default: 300.
Text input
Input text
Enter text into the active input field:
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
result = session.mobile.input_text("Hello AgentBay!")
if result.success:
print("Text input successful") # Output: Text input successful
agent_bay.delete(session)
Send key events
Send Android key events using KeyCode constants:
from agentbay.mobile.mobile import KeyCode
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
# Press the HOME key.
result = session.mobile.send_key(KeyCode.HOME)
if result.success:
print("HOME key pressed") # Output: HOME key pressed
# KeyCode values: HOME=3, BACK=4, VOLUME_UP=24, VOLUME_DOWN=25, POWER=26, MENU=82
print(f"HOME keycode value: {KeyCode.HOME}") # Output: HOME keycode value: 3
agent_bay.delete(session)
Available KeyCode constants:
|
KeyCode |
Value |
Description |
|
|
3 |
Home button |
|
|
4 |
Back button |
|
|
24 |
Volume up button |
|
|
25 |
Volume down button |
|
|
26 |
Power button |
|
|
82 |
Menu button |
Note: All key events are sent directly to the Android system.
UI element detection
Retrieve all UI elements
Retrieve all UI elements in the current screen hierarchy:
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
result = session.mobile.get_all_ui_elements(timeout_ms=2000)
if result.success:
print(f"Found {len(result.elements)} UI elements") # Output: Found 2172 UI elements
for element in result.elements:
# The element structure varies. Check the element data.
print(f"Element: {element}")
# Example output: Element data contains UI hierarchy information
else:
print(f"Failed: {result.error_message}")
agent_bay.delete(session)
Parameter:
-
timeout_ms: Timeout in milliseconds for UI element retrieval. Default: 2000.
Screen operations
Capture a screenshot
Capture the current cloud phone screen:
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
result = session.mobile.screenshot()
if result.success:
screenshot_url = result.data
print(f"Screenshot URL: {screenshot_url}")
# Output: Screenshot URL: https://***.***.aliyuncs.com/***/screenshot_1234567890.png?***
else:
print(f"Screenshot failed: {result.error_message}")
agent_bay.delete(session)
Best practices
Use a cloud phone image
Cloud phone UI automation requires a mobile OS image such as mobile_latest:
# Correct - Use a cloud phone OS image.
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
# Incorrect - Cannot be used for cloud phone operations.
session_params = CreateSessionParams(image_id="windows_latest")
session = agent_bay.create(session_params).session
Handle screenshot URLs
The screenshot method returns an OSS URL, not image data:
result = session.mobile.screenshot()
if result.success:
screenshot_url = result.data
print(f"Screenshot available at: {screenshot_url}")
# Output: Screenshot available at: https://***.***.aliyuncs.com/***/screenshot_1234567890.png?***
# Use the URL to download or display the screenshot.
else:
print(f"Screenshot failed: {result.error_message}")
Common use cases
App navigation
from agentbay import AgentBay
from agentbay.session_params import CreateSessionParams
agent_bay = AgentBay()
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
try:
# Tap the application icon.
tap_result = session.mobile.tap(x=200, y=400)
print(f"App tap result: {tap_result.success}") # Output: App tap result: True
# Wait for the application to load.
import time
time.sleep(2)
# Swipe to navigate.
swipe_result = session.mobile.swipe(
start_x=400,
start_y=600,
end_x=100,
end_y=600,
duration_ms=300
)
print(f"Navigation swipe result: {swipe_result.success}") # Output: Navigation swipe result: True
# Tap the button.
button_result = session.mobile.tap(x=300, y=800)
print(f"Button tap result: {button_result.success}") # Output: Button tap result: True
finally:
agent_bay.delete(session)
Form filling
from agentbay import AgentBay
from agentbay.session_params import CreateSessionParams
agent_bay = AgentBay()
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
try:
# Tap the username field.
username_tap = session.mobile.tap(x=300, y=400)
print(f"Username field focused: {username_tap.success}") # Output: Username field focused: True
# Enter the username.
username_input = session.mobile.input_text("john_doe")
print(f"Username entered: {username_input.success}") # Output: Username entered: True
# Tap the password field.
password_tap = session.mobile.tap(x=300, y=500)
print(f"Password field focused: {password_tap.success}") # Output: Password field focused: True
# Enter the password.
password_input = session.mobile.input_text("secure_password")
print(f"Password entered: {password_input.success}") # Output: Password entered: True
# Tap the logon button.
login_tap = session.mobile.tap(x=300, y=650)
print(f"Login button pressed: {login_tap.success}") # Output: Login button pressed: True
finally:
agent_bay.delete(session)
UI element discovery
from agentbay import AgentBay
from agentbay.session_params import CreateSessionParams
agent_bay = AgentBay()
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
try:
# Get all clickable elements.
result = session.mobile.get_clickable_ui_elements(timeout_ms=3000)
if result.success:
print(f"Found {len(result.elements)} clickable elements") # Output: Found 3 clickable elements
# Analyze the elements to find the target.
for i, element in enumerate(result.elements):
print(f"Element {i+1}: {element}")
# Example output:
# Element 1: UI element with interaction capabilities
# Element 2: UI element with interaction capabilities
# Element 3: UI element with interaction capabilities
# Take a screenshot for verification.
screenshot = session.mobile.screenshot()
if screenshot.success:
screenshot_url = screenshot.data
print(f"Screenshot URL: {screenshot_url}")
# Output: Screenshot URL: https://***.***.aliyuncs.com/***/screenshot_1234567890.png?***
finally:
agent_bay.delete(session)
Content scrolling
from agentbay import AgentBay
from agentbay.session_params import CreateSessionParams
agent_bay = AgentBay()
session_params = CreateSessionParams(image_id="mobile_latest")
session = agent_bay.create(session_params).session
try:
# Scroll down multiple times.
for i in range(3):
scroll_result = session.mobile.swipe(
start_x=300,
start_y=800,
end_x=300,
end_y=200,
duration_ms=400
)
print(f"Scroll down {i+1}: {scroll_result.success}") # Output: Scroll down 1: True, etc.
# Pause briefly between scrolls.
import time
time.sleep(1)
# Scroll up.
up_result = session.mobile.swipe(
start_x=300,
start_y=200,
end_x=300,
end_y=800,
duration_ms=400
)
print(f"Scroll up result: {up_result.success}") # Output: Scroll up result: True
finally:
agent_bay.delete(session)
Troubleshooting
FAQ
-
"Tool not found" error
-
Ensure you are using a cloud phone OS image, such as
image_id="mobile_latest". -
Verify that the session was created successfully.
-
Verify that the API key and endpoint are configured correctly.
-
-
Hardware keypress operations
-
Key events are sent directly to the Android system.
-
Check
result.successto verify the key was sent. -
Error handling example:
result = session.mobile.send_key(KeyCode.HOME) if not result.success: print(f"Key press failed: {result.error_message}")
-
-
UI element detection returns an empty result
-
Increase the
timeout_msvalue. -
Capture a screenshot to check the current UI state.
-
Ensure the target screen has finished loading.
-
-
Screenshot URLs
-
The screenshot returns an OSS URL, not image data.
-
result.datacontains the download URL. -
Use the URL to download the screenshot if needed.
-
-
Swipe gesture does not work as expected
-
Verify the coordinates are within screen boundaries.
-
Adjust
duration_msfor different gesture speeds. -
Ensure the start and end coordinates form a meaningful swipe path.
-