UPDATE: кажется, что при использовании приложения в какое-то случайное время приложение будет разбиваться, когда я нажимаю кнопку, особенно на элементах в нижней части экрана. Любые идеи о том, почему это может быть?эспрессо долго нажимает на пункт меню и всплывающее меню
Итак, в моем приложении есть список. Если вы долгое время просматриваете элемент списка, появляется всплывающее меню, привязанное к тому элементу, который вы давно вычеркнули, с параметрами для удаления или редактирования элемента меню. Просто используя приложение, все работает нормально. Вы можете долго щелкнуть любой элемент в списке, базовые связанные данные будут удалены, и список будет обновлен без этого элемента, который вы только что удалили.
То, что я пытаюсь сделать: Эспрессо не нравится мой просмотр списка и длинный щелчок. Я просто пытаюсь проверить, что всплывающее меню появляется, но я даже не могу получить эспрессо для долгого щелчка. Я думаю, что проблема имеет какое-то отношение к всплывающему меню. Поэтому для начинающих я просто пытаюсь заставить эспрессо долго болтать, не расстраиваясь. Как только espresso longclicks успешно, я думаю, что могу выяснить, как проверить, отображается ли всплывающее окно.
Что я пробовал до сих пор: Я читал, что отключение анимации должно помочь эспрессо быть менее шелушащимся. Я отключил все анимации, которые я смог, и проблема все еще сохраняется. Я могу даже смотреть на тестовый запуск на моем телефоне и посмотреть, что он longclicking правильный пункт меню, но когда longclick завершена, и всплывающее меню появится, тест не
код: Это эспрессо тест которая не работает. Я использовал одну и ту же строку кода, кроме click()
, и приложение делает то, что должно быть, и эспрессо счастлив. mCourseCount - это просто индекс последнего элемента в списке. Это не проблема. Я и обновляю один и тот же индекс в нескольких других тестах, и все работает нормально.
onData(anything()).inAdapterView(withId(R.id.listview_class))
.atPosition(mCourseCount).perform(longClick());
В случае отказа, существует пара интересных линий в трассировке стека
android.support.test.espresso.PerformException: Error performing 'long
click' on view ' displaying data matching: ANYTHING within adapter vieW
matching: with id: com.cmsc355.classcompass.classcompass:id/listview_class'
и позже
Caused by: java.lang.IllegalStateException: MenuPopupHelper cannot be used
without an anchor at
com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:101)
at android.widget.PopupMenu.show(PopupMenu.java:108)at
com.cmsc355.classcompass.classcompass.CourseMenuFragment$2.
onItemLongClick(CourseMenuFragment.java:91)
Это последний бит трассировки стека сбивает с толку, потому что я Defintely набор (это от курса CourseMenuFragment по линии 91):
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) {
PopupMenu popupEdit = new PopupMenu(getActivity(), listView.getChildAt(position));
popupEdit.getMenuInflater().inflate(R.menu.course_longclick_popup, popupEdit.getMenu());
popupEdit.show();
popupEdit.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.edit_course) {
} else if (item.getItemId() == R.id.delete_course) {
throwCourseDeleteAlert(position);
listView.setAdapter(mCourseNameAdapter);
}
return true;
}
});
return true;
}
});
В строке, где сначала создается всплывающее окно, listView.getChildAt(position)
определяет привязку для всплывающего меню. Может быть, есть проблема с этим? Но, как уже упоминалось, все работает отлично, как ожидалось, когда вы просто взаимодействуете с самим собой.
Любое руководство будет оценено по достоинству. Пожалуйста, дайте мне знать, если больше разъяснений не требуется.
это может помочь: http://stackoverflow.com/questions/24634136/menu-popup-helper-cannot-be-used-without-anchor –