一致する項目が複数見つかった場合でも、関数に従って Espresso が見つけた最初の要素と一致する Espresso 関数を記述しようとしています。
例: 商品価格を含むセルを含むリスト ビューがあります。通貨をカナダ ドルに切り替えて、商品価格が CAD で表示されていることを確認できるようにしたいと考えています。
私はこの機能を使用しています:
onView(anyOf(withId(R.id.product_price), withText(endsWith("CAD"))))
.check(matches(
isDisplayed()));
これにより、AmbiguousViewMatcherException がスローされます。
この場合、CAD を表示するセルの数や数に関係なく、CAD が表示されていることを確認したいだけです。パラメータを満たすオブジェクトに遭遇するとすぐに、エスプレッソがこのテストに合格するようにする方法はありますか?
ベストアンサー1
次のコードを使用すると、最初の項目のみに一致するカスタム マッチャーを作成できるはずです。
private <T> Matcher<T> first(final Matcher<T> matcher) {
return new BaseMatcher<T>() {
boolean isFirst = true;
@Override
public boolean matches(final Object item) {
if (isFirst && matcher.matches(item)) {
isFirst = false;
return true;
}
return false;
}
@Override
public void describeTo(final Description description) {
description.appendText("should return first matching item");
}
};
}