Как написать контрольный тест эспрессо для контейнера фрагментов с действием элемента click click - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть действие, в котором есть контейнер фрагментов, который загружает фрагмент с видом переработчика.При щелчке по любому из элементов представления переработчика, он откроет новое действие.Я хочу написать тест-эспрессо для этого сценария.

Моя активность:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/background">

<FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:orientation="vertical"
    android:layout_weight="1">

</FrameLayout>

Мой фрагмент xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_items"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

MyTestCase:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Before
    public void init() {
        mActivityTestRule.getActivity()
                .getSupportFragmentManager().beginTransaction();
    }

    @Test
    public void recyclerview_clickTest() {
       /* onView(withId(R.id.fragmentContainer)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
        onView(withText("Alpha")).perform(click());
        onView(allOf(instanceOf(TextView.class), withParent(withResourceName("action_bar"))))
                .check(matches(withText("Alpha")));*/

        onData(allOf(is(new BoundedMatcher<Object, MyModel>(MyModel.class) {
            @Override
            public void describeTo(Description description) {
            }
            @Override
            protected boolean matchesSafely(MyModel abc) {
                return onView(allOf(instanceOf(TextView.class), withParent(withResourceName("action_bar"))))
                        .check(matchesSafely(withResourceName(abc)));
            }
        })));
    }
}

TIA.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Попробуйте следующее

onView(allOf(isDisplayed(), withId(R.id.your_recycler_view))).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));

Если вышеупомянутое по-прежнему не работает, и вы уверены, что на экране отображается окно рециркуляции, запустите UIAutomator и попытайтесь выделить его над видом рециркулятора, проверьте, чтоэто подчеркивает ваш взгляд переработчика, скорее всего, ваш взгляд переработчика может иметь что-то поверх него, что делает его недоступным для клика (или даже может не отображаться).

Еще одна вещь, которую нужно проверить, это наличиеПри отсутствии перехода и анимации тест может искать ваше представление переработчика, пока оно еще не отображается.Возможно, вы захотите проверить https://developer.android.com/training/testing/espresso/idling-resource

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

Thread.sleep(timeMs, timeout)
.
0 голосов
/ 18 декабря 2018

Вы можете использовать ViewMatchers для этого действия, например:

onView (withId (R.id.your_recycler_view)). Execute (RecyclerViewActions.actionOnItemAtPosition (0, click ()));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...