v2.2.0
Text entry is now verified, not assumed
An external analysis of 34 real sessions named text input the least reliable
surface in this server. Reproducing it confirmed the reported failure and turned
up three more, all with the same shape: not a crash, but a confident-looking
result that was wrong.
ios_input_textreturned success into a screen with nothing focused."CASEB"landed as"CSEBA"— characters reordered, still reported as success.get_screen_stateshowed a field's placeholder while it held other text, so
the recommended way to verify a write read a stale value and made every correct
write look like a failure.replace: truewiped a field when the type that followed it failed.
New: input_text
One cross-platform tool that targets a field, focuses it, writes, and verifies.
- Pass
testID(orcomponent/textMatch) and it focuses the field itself —
no separate tap. A tap reporting success does not guarantee React focus. - Every write is read back and compared exactly, retried once, then failed
hard withsentvslanded. Exactness matters: the corruption is a reorder,
which length, prefix and non-empty checks all pass. - A target matching several inputs refuses and returns a labelled candidate
list to pick from withindex, instead of silently writing into the first.
Forms routinely share one placeholder across every field. - Where a field cannot be read back, that is said out loud rather than reported
as success.
Non-ASCII now works
Cyrillic, CJK and Spanish accents (ñ, á, ü) have no US keycode, and
adb shell input text throws a NullPointerException on them. Writes now take the
path a field can honour — onChangeText when the value prop mirrors the text,
real keystrokes when a handler exists and the text is typeable, and
setNativeProps plus a direct handler call otherwise.
get_screen_state
- Input lines report the field's value, with the placeholder kept separate so
it can never pose as content. - Reports the keyboard's height and remaining content area, and groups the
elements it covers underBlocked by keyboard— bottom tab bars being the
classic hidden tap hazard.
ios_input_text and android_input_text remain as native-only fallbacks.