Skip to main content
Version: 1.0.8

Device Control

Everything you can do to the device while a session is streaming.

Connection Status​

A badge above the stream reports the connection state.

StateMeaning
ConnectingThe connection is being established
ConnectedThe device is streaming
DisconnectedThe connection dropped
ErrorThe connection failed

While connected, the badge also carries a three-segment quality bar reading Measuring, Poor, Good, or Excellent. Opening the badge shows the live connection metrics: quality, bitrate in Mbps, packet loss, jitter, and whether control is running peer to peer or over the WebSocket.

Touch and Gestures​

Interact with the stream using your mouse or trackpad.

InputSent to the device
ClickA tap at that point
Click and dragA swipe from the press point to the release point
Click and drag (Android)A multi-point drag along the exact path you traced, when the path has enough samples

iOS Home-Indicator Gestures​

On iOS, a swipe that starts on the very bottom edge of the screen — the home-indicator strip — is treated as a system gesture rather than a swipe.

  • Swipe up from the bottom edge: Home.
  • Swipe from the bottom edge toward the right: App Switcher.

Both are routed through the hardware button path, which resolves the current orientation on the agent side. Start a gesture further from the edge if you want a plain swipe or scroll.

Multi-Touch​

The Multi-touch control composes a multi-finger gesture, then applies it to your next interaction with the stream.

  1. Choose a finger count: 2, 3, or 4.
  2. Choose a gesture: Tap, Swipe, Pinch / Spread, or Rotate.

Selecting a gesture activates the mode immediately, and an overlay shows what to do: click the device for a tap, drag for a swipe, drag left to pinch and right to spread, or drag left or right to rotate. Press Escape to leave the mode.

Pinch and rotate require exactly two fingers. Multi-touch cannot be used while the Inspector is enabled.

Keyboard Input​

With the stream focused, your physical keyboard is sent to the device. Space, Enter, Tab, Backspace, Delete, and the arrow keys are mapped to their device key events. Common editing shortcuts using Ctrl or Cmd — C, X, A, Z, R, V — and the function keys are left to the browser.

Hide Keyboard in the toolbar dismisses the on-screen keyboard on the device.

A text bar below the stream sends a whole string at once, which is faster and more reliable than typing long values character by character.

Quick Paste​

The Quick Paste panel is a floating clipboard for values you re-enter often.

  • Type or paste a value, or pull the current value in with From Clipboard.
  • Send to Device types the draft onto the device.
  • Save keeps the value in the saved list, where each entry can be sent, copied back to your browser clipboard, or removed.
  • Clear all empties the saved list.

The panel can be dragged anywhere over the stream.

Toolbar​

The toolbar sits beside the stream.

Primary Controls​

ControlDescription
HomePresses the home button
BackPresses back — Android only
Recent AppsOpens the app switcher
Take ScreenshotCaptures the current screen
Start / Stop RecordingRecords the screen
RotateSwitches between portrait and landscape, when the device supports it
InspectorToggles element inspection on the stream
Check accessibilityOpens the accessibility audit panel — see Accessibility
Multi-touchOpens the multi-finger gesture picker
Quick PasteOpens the clipboard panel
Install AppInstalls an app on the device
Location SimulationOpens the geolocation panel
More ToolsOpens the secondary tool group
App ManagementOpens the app group
Refresh SessionRe-establishes the connection
End TestEnds the session

More Tools​

ControlDescription
Volume Up / Volume DownPresses the hardware volume keys
Enable / Disable AudioToggles device audio in the stream, where the device supports it
Hide KeyboardDismisses the on-screen keyboard
Shake DeviceSends a shake, where the device supports it

When audio or shake is unavailable, the control is disabled and its tooltip explains why.

App Management​

ControlDescription
View AppsLists the apps installed on the device
Kill All AppsForce-stops running apps
Browse FilesOpens the device file browser

Apps on your company's protection list are excluded from Kill All Apps. The list is maintained on the Settings page under Defaults.

Live Microphone​

The microphone control streams your browser microphone to the device as PCM audio using the Web Audio API.

Select the button once to start streaming; select it again to stop. The status line reports Off, Connecting, Waiting for app mic, Ready, Sending audio, or Unavailable, and level bars show your input level while audio is being sent.

Your browser will ask for microphone permission the first time.

Platform Requirements​

SituationWhat is required
Emulator, app microphoneStart microphone capture inside the target app while the status reads Waiting. The bridge waits up to ten seconds.
No system microphone routeRun an app built with App Toolkit instrumentation
iOS below 18.2System call audio injection is unavailable; use an App Toolkit-instrumented app or upgrade iOS
iOS 18.2 and laterEnable Settings › Accessibility › Audio & Visual › Add Audio in Calls on the device and allow WebDriverAgent

On iOS 18.2 and later, audio can be added to compatible Phone, FaceTime, and VoIP calls. This is not a general system microphone, and Safari or WebRTC compatibility is not guaranteed. Regular app flows use App Toolkit instrumentation.

If the device is running a WebDriverAgent build without call audio injection, rebuild, reinstall, and restart WebDriverAgent, then retry.

Location Simulation​

The location panel sets a simulated GPS position on the device.

  • Map — select a point on the map and confirm with Use Location.
  • Manual — enter a latitude and longitude, with an optional name, and select Set Location.

While a location is active, the panel shows Simulating and a Clear control, and a marker appears on the toolbar button. Save This Location adds the current position to the Quick Locations chips, which apply a saved position in one step. Locations you added yourself can be removed from that list.

The simulated location is cleared automatically when the session ends.

Screenshots​

Take Screenshot captures the current screen into the session's Screenshots panel. From there you can preview a screenshot at full size, download it, attach it to a bug report, or delete it. Deleting asks for confirmation first.

The toolbar's recent-screenshot strip keeps the last five captures of the session; the Screenshots panel holds the full set.

note

Screenshot deletion is handled by the external Device Farm service. Treat it as permanent.

App Installation​

Install an app in one of these ways:

  • Install App in the toolbar, then pick an app from the catalog, a raw file from the repository, or a build from Firebase App Distribution.
  • Drag an .apk, .ipa, or .app bundle directly onto the stream.

A macOS .app bundle is zipped in the browser before upload; the progress indicator shows both the zipping and the upload stage.

TargetAccepted app formats
Android.apk, .aab
iOS real device.ipa
iOS simulator.app bundle, or a zipped .app

Firebase App Distribution supplies .ipa builds for real iOS devices. For an iOS simulator, use a simulator .app bundle or a zipped .app from the raw file list or a fresh upload.

Where an app version has an instrumented build available, you can install that build instead to enable App Toolkit hooks.

Device Files​

Browse Files opens a file browser on the device, where you can navigate the file system, create folders, push a file from the repository, pull a file back, and delete files.

App Toolkit​

App Toolkit hooks change how an instrumented app behaves during the session. They are baked into the installed build on Android; on iOS the toolkit is injected when the app launches for the session. Runtime toggles enable a hook while the instrumented app is running.

HookWhat it does
Bypass screen capture restrictionsStrips FLAG_SECURE on Android and disables screen-capture detection on iOS so protected screens can be streamed and recorded
Mock camera inputReplaces the live camera feed with an uploaded image; required for QR code flows
Inject video streamStreams a video URL as the camera input
Mock microphone inputStreams an audio file as the microphone source
App Network CaptureMirrors HTTP traffic from inside the instrumented app

Re-apply active hooks pushes the currently enabled hooks again, which is needed if the app process restarts.

Camera Image Capture​

With Mock camera input enabled, you can supply the image the app's camera returns.

  • Files picks an image already stored in the repository.
  • Upload adds a new one; it is stored in Apps & Files and applied to the current session.

The control accepts JPG and PNG images up to 20 MB, and applies the image by its stored file ID. When an ML Kit barcode value is set instead, that value is returned as a synthetic barcode; the image is used when no barcode value is set, or by Camera2 frame-replace fallbacks.

Sharing a Session​

The Invite control on an active session opens the sharing dialog. Three things are managed there, and they are not the same:

ConceptWhat it is
Shareable linkA reusable link anyone in your company can accept
InvitationA targeted invitation sent to one named coworker
Active viewerSomeone currently connected to the session

Both links and invitations carry an access level:

LevelGrants
View onlyWatch the stream and the logs
Full controlTap, type, and install apps

Choose an access level and select Create & copy link. The link is of the form /devicer/session-invite/{token}.

A link expires at your company's maximum session duration and stops working when the session ends. Revoking a link only blocks new accepts; viewers who already joined must be removed from the Active viewers list.

Opening an invite link accepts it and redirects to the live session. If the link cannot be accepted the page says so and offers a way back to the session list.

Invitations and Viewers​

Invite a specific coworker sends a targeted invitation with its own access level. Removing an invitation from People with access also disconnects that user from the live session. Active viewers lists everyone connected right now, and each can be removed individually.

View-Only Sessions​

Some sessions stream without accepting input. The stream shows the reason:

  • View-only — you were invited without control access.
  • View-only — automation session is running with df:deviceControl=false.

Set df:deviceControl to true in your automation capabilities if you want to take over an automation session by hand. See Appium Config.

Parallel Sessions​

Up to three sessions can be viewed at once. Each keeps its own toolbar, and the focused device drives the shared inspector panel.