2013-02-22 1 views
2

Я пытаюсь использовать Testdroid, который поддерживается Robotium.Testdroid/Robotium waitForFragment с помощью ViewPager

фон: FragmentStatePagerAdapter не присваивают значения тегов для фрагментов (в отличие от FragmentPagerAdapter), так waitForFragmentByTag не будет работать; в результате я использую waitForFragmentById, и я не могу нормально работать.

Мои фрагменты определены в xml (fragment.xml), который определяет структуру и макет пользовательского интерфейса. Мои фрагменты также определены в коде (Fragment.java), который где слушатели зарегистрированы и т.д.

Я отлажена через ExtSolo исходный код и когда Waiter вызывает fragmentManager (оба) нулевые значения возвращаются для идентификатора, определенного в теге @id родительского элемента в XML (R.id.fragment), а также идентификатора, определенного самим файлом (R.layout.fragment).

Являются ли эти правильные значения ID используемыми? Если нет, то что? Любая помощь очень ценится.

ответ

0

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

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); 
} 
0

Основы робота на 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); 
     } 
    } 
} 

Вы можете проверить, какие идентификаторы у вас есть. К сожалению, у всех их есть id ViewPager или id = 0, поэтому, по-видимому, невозможно отличить их от id. Не знаю, если это вам поможет, но я надеюсь.

Смежные вопросы