我有以下情況。我們使用小黃瓜語言通過Espresso驅動我們的本地UI自動化。在我們的小黃瓜線,我們已經有了一個叫行:檢查是否顯示數組中的資源ID並點擊它(Android-Espresso)
And I tap on button "Next"
其中,「下一步」是一個可變的字符串,我們通過到我們的膠水代碼(我們使用的是黃瓜框架)。
碰巧,我們的應用程序有許多具有不同資源ID的「下一步」按鈕。我結束了使用類似變量的小黃瓜線:
And I tap on button "Next in screen 1"
And I tap on button "Next in screen 2"
現在我想只在我的代碼中使用小黃瓜變量「下一步」。我得到一個Integer數組,其中包含所有Next按鈕的所有資源ID,但是當我想要檢查屏幕上顯示的是哪個ID時,我得到了一個NoMatchingViewException。
這是我目前的解決方案,現在:
final int[] uiElementIds = getArrayWithIdsFromUIElement("Next");
int testId = 0;
for(int id : uiElementIds) {
try {
onView(withId(id)).check(matches(isDisplayed()));
testId = id;
break;
} catch(NoMatchingViewException ex) {
// do nothing
}
}
final int uiElementId = testId;
onView(withId(uiElementId)).withFailureHandler(new FailureHandler() {
@Override
public void handle(Throwable error, Matcher<View> viewMatcher) {
onView(withId(uiElementId)).perform(scrollTo(), click());
}
}).perform(click());
正如你可以看到我正好趕上拋出NoMatchingViewException,什麼也不做下去直到找到正確的ID,打破了for循環的。
我的問題是:
是否有更好的辦法,我們可以用它來循環通過它看到的是顯示其ID,如果是一下就可以了?
在我心目中,我想出了這個主意,但它沒有集成在咖啡:
for(int id : uiElementIds) {
if(onView(withId(id)).exist()) {
performClick();
}
}