私は以下の場合があります。私たちはGherkin言語を使用して、エスプレッソで独自のUIを自動化しています。当社ガーキンラインでは、と呼ばれるラインを持っている:配列内のビューからのリソースIDが表示されていることを確認し、それをクリックしてください(Android-Espresso)
「次は」私たちは私たちのグルーコードに渡す変数の文字列を(私たちはキュウリのフレームワークを使用している)であるAnd I tap on button "Next"
。
私たちのアプリには、さまざまなリソースIDを持つ多くの「次へ」ボタンがあります。私はgherkinのような変数を使用して終了しました。
And I tap on button "Next in screen 1"
And I tap on button "Next in screen 2"
私のコードでは、Gherkin変数 "Next"だけを使用します。次のすべてのボタンからすべてのリソースIDを含むInteger配列が取得されますが、どのIDが画面に表示されているかをチェックしたい場合、NoMatchingViewExceptionが発生します。あなたは、私はちょうど投げNoMatchingViewExceptionをキャッチし、それを何もしない、それは右のIDを見つけるまでとforループから抜け出す見ることができるように
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());
:
これが今の私の現在のソリューションです。
私の質問は:
我々はどのIDが表示された場合にそれをクリックされて見て、それをループするために使用することができ、より良いアプローチはありますか?私の心の中で
私はこのアイデアを思い付いたが、それはエスプレッソに統合されていません。
for(int id : uiElementIds) {
if(onView(withId(id)).exist()) {
performClick();
}
}