我正在尝试使用由Robotium支持的Testdroid。
背景:
FragmentStatePagerAdapter
没有为片段分配标记值(与FragmentPagerAdapter
不同),因此waitForFragmentByTag
将无效;结果我使用waitForFragmentById
,我无法按预期工作。
我的片段在xml( fragment.xml )中定义,它定义了UI结构和布局。 我的片段也在代码( Fragment.java )中定义,这是监听器注册的地方等。
我已通过ExtSolo
源代码调试,当Waiter
调用fragmentManager(两者)时,为XML中父元素的@id标记中定义的ID返回空值(R.id.fragment
)以及文件本身定义的ID(R.layout.fragment
)。
这些ID值是否正确使用?如果不是,那是什么?非常感谢任何帮助。
答案 0 :(得分:0)
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);
}
}
}
你可以查看你的片段有什么ID。不幸的是,它们都具有ViewPager或id = 0的id,因此似乎无法通过id区分它们。不知道,它是否会对你有帮助,但我希望如此。
答案 1 :(得分: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);
}