我有一个包含多个片段的应用程序,这些片段由一个Activity管理。我的问题是我想测试应用程序并测试每个片段的UI。我可以测试第一个Fragment并得到所有这些视图,但是当我点击一个Button或其他东西时(用另一个片段替换Fragment)我无法获得任何新片段的视图,但是我的MainActivity说current Fragment是新的片段。
@UiThreadTest
public void testNewFragmentScrollView() {
assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_STARTSCREEN));
ivNewFragment.performClick(); // replace fragment
sleep();
assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_NEW));
//get something from new fragment, ID is copied from xml file and not false
ScrollView scrollView = (ScrollView) mActivity.findViewById(R.id.sv_fragment_new_scrollable);
assertTrue(scrollView != null); //#false???
mActivity.finish();
}
我是否必须在我的Testclass中更新某些内容,或者为什么我没有从新片段中获取任何视图?
答案 0 :(得分:2)
好的,我通过拆分代码解决了我的问题。当我在setUp中更改片段并等待几毫秒时,我可以在每个测试方法中从新片段中获取所有视图
@Override
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
mActivity = getActivity();
buNewFragment =(Button) mActivity.findViewById(R.id.bu_actionbar_newfragment);
mActivity.runOnUiThread(new Runnable() {
public void run() {
buNewFragment .performClick();
}
});
sleep(500);//simple Thread.sleep() method
}
@UiThreadTest
public void testNewFragmentScrollView() {
assertTrue(mActivity.getFragmentType().equals(FragmentTypes.FRAGMENT_NEW));
ScrollView scrollView = (ScrollView) mActivity.findViewById(R.id.sv_fragment_new_scrollable);
assertTrue(scrollView != null); //#t
}