UI AutomatorからSpinnerを選択した後に表示されるドロップダウンメニュー内の項目を選択する場合についてです。
======>
Spinner選択による
ドロップダウン表示

このときのドロップダウンメニューはListViewにて表現されています。

なので、こちらに記載したときと同じように、このListViewに対して選択したいアイテムを表示させた後に、選択する必要があります。

サンプルコード: Spinnerに設定されているリソースID名称は"jp.eq_inc.testapplication:id/sprContent"とします。
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
UiObject spinnerObject = device.findObject(new UiSelector().resourceId("jp.eq_inc.testapplication:id/sprContent");
spinnerObject.click();  // Spinnerをクリックして、ドロップダウンメニューを表示させる

UiSelector uiSelector = new UiSelector().className("android.widget.ListView");
UiObject dropdownListObject = device.findObject(uiSelector);
UiScrollable dropdownListScrollable = new UiScrollable(uiSelector);  // ListViewへのUiObjectをUiScrollableへ変換
dropdownListScrollable.scrollTextIntoView("text 40");  // "text 40"が見えるところへスクロールする

UiObject selectItemObject = device.findObject(new UiSelector().text("text 40"));
selectItemObject.click();

余談ですが、上記のコードではドロップダウンメニューを表現しているListViewをクラス名称から探していましたが、Activity側にもListViewが存在した場合、正常に動作しないかと疑われたため、以下のような構成でも試してみました。結論して正常に取得できたので、UiDevice.findObjectは上位レイヤから一致するものを探しているようです。
======>
Spinner選択による
ドロップダウン表示
全体がListViewで、
その1要素として
Spinnerが存在している

コメントの投稿