тестирование эспрессо, используемое во фрагменте

Я никогда раньше не пил эспрессо. Теперь я хочу автоматически ввести текст в фрагмент поля editText. Я знаю только, как это сделать с Activity.

@LargeTest
public class EspressoTest {


    @Rule
    public ActivityTestRule<CheckInActivity> mActivityRule =
            new ActivityTestRule<>(CheckInActivity.class);
    @Test
    public void testActivityShouldHaveText() throws InterruptedException {
        onView(withId(R.id.editText)).perform(clearText(), typeText("KI"));
    }
}

У меня есть MainFragment, размещенный MainActivity, и editText помещается внутри макета MainFragment.

Также есть ли способ в эспрессо щелкнуть по тексту, чтобы он мог найти вид по тексту?


person Jenya Kyrmyza    schedule 12.10.2015    source источник


Ответы (3)


Также есть ли способ в эспрессо щелкнуть по тексту, чтобы он мог найти вид по тексту?

Чтобы поймать представление по его тексту, вы можете сделать, как в этом примере:

onView(withString(R.string.editText)).check(matches(isDisplayed()));

Чтобы поймать текст или только его часть, вы можете использовать (я думаю, что это возможно и в Robotium) сопоставители Hamcrest. Здесь вы найдете, вероятно, все совпадения: Краткий справочник по Hamcrest 1.3

Чтобы было понятнее, приведу несколько примеров:

onView(withId(R.id.textView)).check(matches(withText(startsWith("Hello"))));

onView(withId(R.id.action_bar_main)).check(matches(withText(String.valueOf(contains("Hello")))));

onView(withId(R.id.textView)).check(matches(withText(endsWith("Hello"))));

Я думаю, что это было бы также полезно:

Как сделать Я обнаружил представление, созданное программно в эспрессо

person piotrek1543    schedule 08.12.2015

На данный момент я решил использовать robotium, потому что пока не знаю, как это реализовать с помощью эспрессо. В Robotium есть такие методы, как waitForFragment и waitForActivity.

person Jenya Kyrmyza    schedule 13.10.2015

Если вы хотите найти представление по тексту, вы можете использовать onView(withText()).

Тем не менее, вам может понадобиться связать пару сопоставителей, чтобы найти именно то, что вы хотите. allOf() позволяет вам сделать это. Вам также может потребоваться щелкнуть текстовое поле, прежде чем вы сможете ввести текст.

onView(allOf(
    withId(R.id.editText),
    withText(R.string.edit_text)
)).perform(click(),
           clearText(),
           typeText("KI")
   );

Я предпочитаю использовать replaceText() в большинстве тестов, чтобы сэкономить время.

person James Pullar    schedule 09.11.2015