Я переопределяю метод execute в эспрессо ViewAction, но он не работает, этот метод даже не вызывается при выполнении кода - PullRequest
0 голосов
/ 13 марта 2019

Я хочу переопределить эспрессо (click ()) для нажатия на определенную позицию. Я сделал это следующим образом:

public void goToCatgory (int position){

    ViewAction categoryClick = new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return null;
        }

        @Override
        public String getDescription() {
            return null;
        }

        @Override
        public void perform(UiController uiController, View view) {
            RecyclerView categoriesRecycler = (RecyclerView) view;
            SimpleBindableAdapter<Category> adapter = (SimpleBindableAdapter<Category>) categoriesRecycler.getAdapter();
            int headersCount = adapter.getHeadersCount();
            actionOnItemAtPosition(position + headersCount ,click());
        }
    };
    categoryList.perform(categoryClick);
}

Когда я его выполняю, я получаю исключение NullPointerException:

java.lang.NullPointerException
at android.support.test.espresso.core.internal.deps.guava.base.Preconditions.checkNotNull(Preconditions.java:882)
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:216)
at android.support.test.espresso.ViewInteraction.access$100(ViewInteraction.java:63)
at android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:153)
at android.support.test.espresso.ViewInteraction$1.call(ViewInteraction.java:150)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6238)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

Когда я запустил его в режиме отладки, я увидел, что переопределенный метод execute () не выполняется. Но я не понимаю, что я делаю не так. Спасибо.

1 Ответ

0 голосов
/ 13 марта 2019

Это потому, что ограничение вашего ViewAction возвращает null. Прежде чем выполнить действие, он проверяет свое ограничение, которое никогда не должно быть нулевым, поэтому попробуйте вернуть сопоставление в ограничении:

@Override
public Matcher<View> getConstraints() {
    return any(View.class);
}

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

Если вы считаете, что у вас есть правильная позиция для нажатия, но она не работает, это потому, что вы не вызвали правильную функцию для выполнения:

actionOnItemAtPosition(position + headersCount ,click()).perform(uiController, view);
...