Подтвердить что ты не робот

PerformException: Ошибка выполнения "одного клика"

У меня возникла ошибка, когда я запускаю тест espresso для Android:

com.google.android.apps.common.testing.ui.espresso.PerformException: ошибка, выполняемая "одним щелчком мыши" в представлении "с id: is < 2131034173 > ".

Мой код прост:

onView(withId(R.id.btn)).perform(click());

Но с этим кодом нет ошибки:

onView(withId(R.id.btn)).check(matches(isDisplayed()));

Я не могу найти причину, по которой это происходит.

4b9b3361

Ответ 1

Трюк состоит в том, чтобы прочитать полную ошибку стека ошибки. В середине есть некоторая важная часть информации, подобная этой:

Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view area is displayed to the user.
Target view: "ImageView{id=2131492903, res-name=button_hamburger, desc=opens the side drawer, visibility=VISIBLE, width=64, height=64, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=6.0, y=6.0}"

что объясняет ошибку подробно.

Ответ 2

Попробуйте убедиться, что мягкая клавиатура не отображается. Его можно легко закрыть с помощью closeSoftKeyboard ViewAction.

Кроме того, убедитесь, что системные анимации отключены. В разделе "Настройки" → "Параметры разработки" отключите следующее:

  • Шкала оконной анимации
  • Шкала анимации перехода
  • Шкала продолжительности анимации

Кроме того, это может быть вызвано диалоговыми окнами ANR из других приложений.

Там была проблема с сообщением здесь.

Ответ 3

У меня была такая же проблема, потому что мягкая клавиатура перекрывала элемент. Я использовал scrollTo(), а затем нажмите(), чтобы решить проблему.

onView(withId(R.id.btn))
     .perform(scrollTo())
     .perform(click());

Если выше не работает, попробуйте сначала добавить следующее:

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());

Ответ 4

У меня была эта проблема, даже используя

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());

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

onView(withId(R.id.myEditText)).perform(TypeTextAction());

Это было похоже на то, как если бы система укладывала новую клавиатуру поверх другой, так что моя проблема была решена ВСЕГДА использовать closeSoftKeyboard() КАЖДЫЙ РАЗ, когда я использовал TypeTextAction.

onView(withId(R.id.myEditText)).perform(typeTextAction(), closeSoftKeyboard());

Так что, если мне нужно отредактировать форму, это будет выглядеть так:

onView(withId(R.id.myEditText1)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText2)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText3)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText4)).perform(typeTextAction(), closeSoftKeyboard());

Ответ 5

Если вид не отображается во время тестирования... используйте perform(scrollTo())... Он будет прокручиваться, и действие щелчка будет выполнено.

Пример: -

 onView(withId(R.id.btn)).perform(scrollTo()).perform(click());

Ответ 6

У меня такая же проблема, но причина такова:

Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3713 iterations over 60 SECONDS. The following Idle Conditions failed .

Я не знаю, где проблема, поскольку она нажимает на кнопку, которая переходит к следующему действию, но похоже, что она все еще исследует кнопку после

Ответ 7

У меня была та же проблема, и я решил ее, изменив положение элемента.

На той позиции, где я пытался нажать, нет элемента. Пытается нажать на позицию 3, но элемент находится на 2-й позиции (полностью забыл, что индекс начинается с 0). Итак, я изменил позицию элемента, и теперь он работает отлично

Ответ 8

Есть несколько причин, по которым это может произойти. в моем случае это произошло потому, что после нажатия кнопки был progress bar который продолжал вращаться вечно, поэтому убедитесь, что при наличии сетевого вызова или некоторого процесса ожидания вы останавливаете индикатор выполнения после получения обратного вызова. Кроме того, выполнение щелчка ожидает выполнения какого-либо действия, поэтому убедитесь, что вы не просто щелкаете, но и выполняете действие при выполнении щелчка.

Ответ 9

Одна возможность в вашем TestCase заключается в том, что если вы выполняете операции с базой данных с использованием LiveData, вам следует избегать использования ниже правила.

@Rule public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

После удаления этих строк TestCase работают отлично.

Ответ 10

error был вызван блоком потоков UI. Проверьте target Activity code, особенно функцию setUp или init.

Я встречал тот же самый error, в потоке пользовательского интерфейса, который всегда вызывается, есть неправильный listener. Когда я удаляю listener, error может быть исправлен.