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文字を入力することができますので、是非お試しください。