EditText内にテキストを入力しようとしています。
public void testSearch() {
onView(withId(R.id.titleInput)).perform(typeText("Engineer"));
onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}
EditTextに焦点が当てられているようですが、何も起こりません。テキストは入力されません。
これを電話とエミュレーターで試しました-同じ結果です。
私は問題を理解したようです。それはハードウェア対ソフトウェアキーボードと関係がありました。
エミュレーターの場合:
[設定]-> [言語と入力]-> [デフォルトの入力]を[サンプルソフトキーボード]に切り替えます。
電話の場合:
Playストアからソフトウェアキーボードをインストールし、それに切り替えます。一部の電話のネイティブキーボードが機能しないようです。
今は動作します。
Espresso 2を使用しても同じ問題が発生しました。回避策として、typeTextの代わりにreplaceTextを使用しています。
public void testSearch() {
onView(withId(R.id.titleInput)).perform(click(), replaceText("Engineer"));
onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}
EditTextにまだフォーカスがない場合は、最初にそれをクリックする必要があります。これで問題が解決した場合、バグはありません。
onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer"));
EditTextでsetTextを呼び出すことにより、問題を回避できます。
final EditText titleInput = (EditText) activity.findViewById(R.id.titleInput);
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
titleInput.setText("Engineer");
}
});
同じ問題が次のように解決されました。
editText.perform(scrollTo(), click(), clearText(), typeText(myInput), closeSoftKeyboard())
興味深いことに、私は自分のマシンが一生懸命働いているときにだけ問題を抱えていました。
このようなコードに含めることができます、
onView(withId(R.id.titleInput))。perform(click()、replaceText( "Engineer")、closeSoftKeyboard());
Genymotionを使用している場合は、Genymotion構成でデフォルトのキーボードを切り替える必要がある場合があります(これはエミュレーター上のアプリです)。
注:これらの変更は、エミュレーターを閉じた後も持続しません。エミュレータを起動するたびにこれを設定する必要があります。
私にとっては、テストメソッドに@UiThreadTest
という注釈が付けられました。私はそれを取り除き、それは解決しました。
click()
したいビューにlayout_height="wrap_content"
を設定することで、この問題を修正しました。多分それはここの誰かを助けることができます。