Testdroid/Robotium waitForFragment с использованием ViewPager
Я пытаюсь использовать Testdroid, который поддерживается Robotium.
Фон:FragmentStatePagerAdapter
не присваивает значения тегов для фрагментов (в отличие FragmentPagerAdapter
) так waitForFragmentByTag
не сработает; в результате я использую waitForFragmentById
, что я не могу получить работу, как ожидалось.
Мои фрагменты определены в XML (фрагмент.xml), который определяет структуру пользовательского интерфейса и макет. Мои фрагменты также определены в коде (Fragment.java), где слушатели зарегистрированы и т. Д.
Я отладил через ExtSolo
исходный код и когда Waiter
вызывает FragManager (оба), нулевые значения возвращаются для идентификатора, определенного в теге @id родительского элемента в XML (R.id.fragment
) а также идентификатор, определенный самим файлом (R.layout.fragment
).
Это правильные значения идентификаторов для использования? Если нет, то что? Любая помощь с благодарностью.
2 ответа
Я закончил тем, что использовал грязную работу, которая вызовет сбой тестов, если структура изменится:
private void assertAtHomeFragment() {
assertTrue(solo.waitForView(ListView.class, 1, 2000));
assertTrue(solo.waitForView(ImageButton.class, 3, 2000));
assertTrue(solo.waitForView(Button.class, 1, 2000));
solo.sleep(1000);
}
private void assertAtLibraryFragment() {
assertTrue(solo.waitForView(ListView.class, 1, 2000));
assertTrue(solo.waitForView(ImageButton.class, 0, 2000));
solo.sleep(1000);
}
Robotium основан на FragmentManager и методе findFragmentById/findFragemntByTag. С примером приложения Support4Demos я проверил фрагменты в State Pager, что похоже на ваш контекст. Используя этот код:
List<Fragment> fragList = new ArrayList<Fragment>();
@Override
public void onAttachFragment (Fragment fragment) {
if (!fragList.contains(fragment)) {
fragList.add(fragment);
Log.d("TEST", "Fragment id ("+ fragment.getId() +")");
if (fragment.getId() != View.NO_ID && fragment.getId() != 0) {
String id = fragment.getResources().getResourceEntryName(
fragment.getId());
Log.d("TEST", "Fragment id " + id);
}
}
}
Вы можете проверить, какой идентификатор у ваших фрагментов. К сожалению, все они имеют идентификатор ViewPager или id = 0, поэтому кажется, что их невозможно отличить по id. Не знаю, поможет ли это вам, но я надеюсь на это.