2017-05-07 43 views
0

我有我想用咖啡來請單擊下面的菜單項:咖啡 - 點擊菜單項與應用:showAsAction =「ifRoom」

<item 
    android:id="@+id/action_save" 
    android:icon="@drawable/vector_image_save" 
    android:orderInCategory="4" 
    android:title="@string/menu_action_save" 
    app:showAsAction="ifRoom"/> 

由於ifRoom,在某些設備上的菜單顯示爲圖標在操作欄中,而在較小的設備中則顯示在「更多選項」下。

我可以使用下面的代碼,敲擊操作欄中的保存圖標: onView(withId(R.id.action_save)).perform(click());

而且我可以用下面的代碼挖掘上的保存,如果它是在「更多的選擇」存在: openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); onView(withText(R.string.menu_action_save)).perform(click());

我想要一個在兩種情況下都能正常工作的測試方法。

回答

1
try { 
     onView(withId(R.id.action_save)).perform(click()); 
    } catch (NoMatchingViewException e) { 
     openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); 
     onView(withText(R.string.menu_action_save)).perform(click()); 
    } 

您將首先檢查菜單是否作爲圖標存在。如果是這樣,請點擊它。 如果沒有,打開「更多選項」菜單,然後從彈出菜單中選擇「保存」菜單。

注:我知道我們不應該在測試方法中使用條件,但我真的找不到任何其他解決方案。如果您有任何人找到了更好的解決方案,請在此處發佈。

+0

僅供參考以下答案中有一個優雅的解決方案https://stackoverflow.com/a/40864574/340175 – JulianHarty