В эспрессо я могу определить, содержит ли представление текст * или * другой текст - PullRequest
0 голосов
/ 10 октября 2018

У меня есть вид переработчика, который должен содержать 3 элемента в неизвестном порядке.

Я знаю, как получить переработанный предмет по позиции и как проверить текст

onView(withId(...)).check(matches(atPosition(0, hasDescendant(withText(A)))));

НоЯ не знаю, как я могу сказать withText(A) или withText(B)

Я погуглил, но не вижу ничего похожего на ИЛИ совпадение подколенного сухожилия

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Создайте свой собственный matcher:

class MultiTextMatcher extends BoundedMatcher<View, TextView> {
    static MultiTextMatcher withTexts(String[] texts) {
        return new MultiTextMatcher(texts);
    }

    private final String[] texts;

    private MultiTextMatcher(String[] texts) {
       super(TextView.class);
       this.texts = texts;
    }

    @Override protected boolean matchesSafely(TextView item) {
       for(String text: texts) {
           if(item.getText().toString().equals(text)) {
               return true;
           }  
       }
       return false;
    }

    @Override public void describeTo(Description description) {
        description.appendText("with texts:").appendValue(texts.toString());
    }
}

Затем просто примените свой пользовательский matcher следующим образом:

onView(withId(...)).check(matches(atPosition(0, hasDescendant(withTexts({"A", "B"})))));
0 голосов
/ 10 октября 2018

Вы можете использовать Matchers.anyOf().Например:

onView(anyOf(withText("X"), withText("Y"))).check(matches(isDisplayed()))
...