sumioの技術メモ

Androidについての記事が多くなると思います。

UiautomatorでASCII文字だけを確実に入力する

はじめに

前回の記事で、uiautomatorで日本語を入力できるようにするためにIMEを作った、という記事を書きました。

このIMEを入れれば、uiautomatorで日本語などの非ASCII文字を入力できるのはもちろん、英数字のようなASCII文字も確実に入力することができるのですが、中には「英数字だけ入力できればいいよ」という方もいるかも知れません。

実は、英数字(ASCII文字)だけ確実に入力できれば良いのであれば、Androidソースコードの中に、それを実現するためのIMEがこっそり同梱されています。
https://android.googlesource.com/platform/frameworks/testing/+/master/uiautomator/utils/
にある「DummyIME」というのがそれです。

このDummyIMEは、ソフトウェアキーボードを表示せず、ひたすらキー入力をEditTextにスルーするように実装されているので、UiObject.setText(String)で設定した通りの英数字を、確実に入力することができます。

この記事では、DummyIMEを使う方法について説明します。

DummyIMEのインストール

  • git cloneします。
git clone https://android.googlesource.com/platform/frameworks/testing
  • uiautomator/utils/DummyIMEへ移動します。
cd testing/uiautomator/utils/DummyIME
  • build.xmlを生成します。-t android-18の部分は、実行したい端末と同じOSバージョンのものにしておくと良いでしょう。
android update project -p . -t android-18
  • テスト対象の端末を接続し、antを使ってビルド・インストールします。
ant clean debug install

Uiautomatorの実行

さきほどの手順で、DummyIMEをインストールしておけば、uiautomatorコマンドの隠しオプションで、DummyIMEを有効化した上でテストを実行してくれます。
具体的には、下記のように-e disable_ime trueオプションを追加して実行してください。

adb shell uiautomator runtest <JARファイル名> -e disable_ime true -c <実行クラス名> 

このオプションはとても強力で、自動的にDummyIMEをデフォルトのIMEに設定してから、テストを実行してくれるのですが、テスト終了後に元のIMEに戻すことはしてくれません。
ソースコードを見ると、そもそも元のIMEに戻す手段が無いような雰囲気です。

まとめ

Androidソースコードにこっそり格納されているDummyIMEについて紹介しました。
英数字を入力したいだけであれば、DummyIMEを使うのもひとつの方法です。

ただ、前回の記事で紹介したUiautomator Unicode Input Helperを使えば、英数字に限らず、任意のUnicode文字を入力することができますので、是非お試しください。