web-dev-qa-db-ja.com

エスプレッソ-typeTextが機能しない

EditText内にテキストを入力しようとしています。


    public void testSearch() {
          onView(withId(R.id.titleInput)).perform(typeText("Engineer"));
          onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
    }

EditTextに焦点が当てられているようですが、何も起こりません。テキストは入力されません。
これを電話とエミュレーターで試しました-同じ結果です。

11
Eduko

私は問題を理解したようです。それはハードウェア対ソフトウェアキーボードと関係がありました。

エミュレーターの場合:

[設定]-> [言語と入力]-> [デフォルトの入力]を[サンプルソフトキーボード]に切り替えます。

電話の場合:

Playストアからソフトウェアキーボードをインストールし、それに切り替えます。一部の電話のネイティブキーボードが機能しないようです。

今は動作します。

16
Eduko

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")));
}
12
dorr

EditTextにまだフォーカスがない場合は、最初にそれをクリックする必要があります。これで問題が解決した場合、バグはありません。

onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer"));
11
skyleecm

EditTextでsetTextを呼び出すことにより、問題を回避できます。

   final EditText titleInput = (EditText) activity.findViewById(R.id.titleInput);
   getInstrumentation().runOnMainSync(new Runnable() {
        public void run() {
            titleInput.setText("Engineer");
        }
    });
11
skyleecm

同じ問題が次のように解決されました。

editText.perform(scrollTo(), click(), clearText(), typeText(myInput), closeSoftKeyboard())

興味深いことに、私は自分のマシンが一生懸命働いているときにだけ問題を抱えていました。

2
Mike Collins

このようなコードに含めることができます、

onView(withId(R.id.titleInput))。perform(click()、replaceText( "Engineer")、closeSoftKeyboard());

2
Shainu Thomas

Genymotionを使用している場合は、Genymotion構成でデフォルトのキーボードを切り替える必要がある場合があります(これはエミュレーター上のアプリです)。

  1. [アプリ]-> [Genymotion構成]-> [キーボード]-> [仮想キーボード]に移動します(再起動するように求められたら、[はい]をクリックします)

注:これらの変更は、エミュレーターを閉じた後も持続しません。エミュレータを起動するたびにこれを設定する必要があります。

0
Maxwell

私にとっては、テストメソッドに@UiThreadTestという注釈が付けられました。私はそれを取り除き、それは解決しました。

0
Hadi

click()したいビューにlayout_height="wrap_content"を設定することで、この問題を修正しました。多分それはここの誰かを助けることができます。

0
sonique