2

Espresso を使用して、複数の AutoCompleteTextView でアプリをテストしています。ある特定のテストでは、オートコンプリート ポップアップが表示されますが、それを無視して次のTextView. これどうやってするの?私のアイデアは、「戻る」プレスをシミュレートするか、ポップアップでタップをシミュレートすることです。

アップデート:

オートコンプリートポップアップをクリックするために次のことを試みています:

onView(withId(R.id.brand_text))
        .perform(scrollTo(), typeText(card.getBrand()));
onData(allOf(is(instanceOf(String.class)), is(card.getBrand())))
        .inRoot(isPlatformPopup())
        .perform(click());
onView(withId(R.id.brand_text))
        .check(matches(withText(card.getBrand())));

問題は、場合によっては、入力されたテキストにオートコンプリートの一致がないため、ポップアップが表示されないことです。ビューが一致するかどうかに応じて、条件付きでクリックを実行するにはどうすればよいですか?

4

1 に答える 1

0

UiDevice私の解決策は、UI Automator からテストにオブジェクトを追加することでした。

 UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

そしてUiDevice.pressEnter()次へ進むよう呼びかけるTextView

device.pressEnter();

発生した問題は、これがそのままでは期待どおりに機能しないことです。また、Enter キー イベントを処理するView.OnKeyListenerために、それぞれに を追加しました。AutoCompleteTextView今のところ、各ビューにリスナーを追加し、どのビュー リクエストが Enter キー イベントにフォーカスしているかを明示的に示します。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // ...

    brandText.setOnKeyListener(new View.OnKeyListener() { 
        @Override 
        public boolean onKey(View v, int keyCode, KeyEvent event) { 
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) { 
                yearText.requestFocus(); 
                return true; 
            } 

            return false; 
        } 
    });

    //...
}

これは理想的ではありません。最終的には、これを一般化する予定です。おそらく、AutoCompleteTextView期待どおりに Enter キーを処理するカスタム コンポーネントを継承します。「次の」ビューにフォーカスを送ります。

于 2016-02-10T18:12:33.333 に答える