Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Maestro `eraseText` fails on real Android devices: `test` and `replay` cannot opt in to the test IME

Open
#2,997 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
74/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
android, typescript
Domain
cli, mobile, testing

Research direction

Start with packages/maestro/src/daemon-port/daemon-runtime-port.ts and src/daemon/session-lifecycle/internal/session-open-execution.ts, then trace the test and replay command entry points. Check how open --test-ime activates the helper and how shouldActivateAndroidTestIme handles real devices. Done means test and replay offer an opt-in, eraseText passes on real devices, and the device keyboard is restored while the default remains off.

Written by the indexing model from the issue text.

Description

ready-for-agent

Summary

On a real Android device, a Maestro flow with eraseText fails under agent-device test --maestro:

Replay failed at step 27 (eraseText): Android text input requires provider-native text injection or the bundled test IME helper for non-ASCII/control characters; the adb-shell fallback supports ASCII text only. On emulators the test IME activates automatically; on real devices pass `open --test-ime` to enable it

The same flow passes on an emulator. ASCII inputText works on the device.

Cause

eraseText types backspace characters:

https://github.com/callstack/agent-device/blob/16e07572ab28227563fd76ab062cb375c4b7e1db/packages/maestro/src/daemon-port/daemon-runtime-port.ts#L262-L265

Backspace is a control character, so it needs the test IME. On real devices the test IME is opt-in through open --test-ime:

https://github.com/callstack/agent-device/blob/16e07572ab28227563fd76ab062cb375c4b7e1db/src/daemon/session-lifecycle/internal/session-open-execution.ts#L128-L134

test and replay have no such flag, so a flow run on a real device never gets the test IME.

What I tried

  • open --test-ime --session <name>, then test --session <name>: fails at launchApp with android device <serial> is owned by session "<name>"
  • same with replay --maestro --session <name>: same error
  • {"testIme": true} in a config file passed through AGENT_DEVICE_CONFIG: test still fails with the error above
  • adb shell ime set to the helper before test: still fails with the error above

Check with the test IME on

Local patch: shouldActivateAndroidTestIme returns true for real devices. With it, a flow with eraseText passes on the device, and the device keyboard is restored after the run.

Request

An opt-in for flow runs. The real-device default stays off, as decided in #1198. For example:

  • --test-ime on test and replay
  • or testIme from agent-device.json for flow runs

Environment

  • agent-device 0.21.14. Same gating in 0.21.15 and on main at 16e0757
  • Pixel 8, Android 17, USB
  • macOS host
Dominant language
TypeScript
Stars
4.8k
Forks
315
Avg merge
11h 27m
Merged PRs (30d)
556

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from callstack/agent-device

All issues in callstack/agent-device

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.