为什么getCurrentListViews()。size()等于2而不是3?

时间:2012-12-02 18:08:59

标签: android testing robotium

我正在编写一个带有选项卡式界面的android应用程序。我使用带有FragmentActivity个标签的ActionBar.Tab,每个标签都显示ListFragment

在我的测试用例中,我使用Robotium 3.6来执行UI交互,这是测试fragment's的某些方面所必需的。每个fragment都有一个单独的测试方法,用于测试ListView的{​​{1}}在集合索引(0)处具有相同的内容,作为数据的fragment来自。

问题是虽然前两个ArrayList<String>通过了各自的测试,但最终的fragments没有,而失败的痕迹是:

fragment

以下是正在测试的活动的相关代码:

junit.framework.AssertionFailedError: AbsListView with index 2 is not available!
at com.jayway.android.robotium.solo.Waiter.waitForAndGetView(Waiter.java:362)
at com.jayway.android.robotium.solo.Clicker.clickInList(Clicker.java:405)
at com.jayway.android.robotium.solo.Solo.clickInList(Solo.java:1004)
at com.******.*******.test.ActivityNavigatorTest.testFragmentSongsList(ActivityNavigatorTest.java:62)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)

每个@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigator); PREFERENCES = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); adapterPager = new AdapterPager(getSupportFragmentManager()); viewPager = (ViewPager) findViewById(R.id.pager); viewPager.setAdapter(adapterPager); viewPager.setOnPageChangeListener(new SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); getActionBar().setSelectedNavigationItem(position); } }); final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.addTab(actionBar.newTab().setText(R.string.title_fragment_artists).setTag("artists").setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.title_fragment_albums).setTag("albums").setTabListener(this)); actionBar.addTab(actionBar.newTab().setText(R.string.title_fragment_songs).setTag("songs").setTabListener(this)); } 的代码只是定义ListFragment,用虚拟内容填充它并用ArrayList<String>显示所述内容。以下是测试用例的代码:

ArrayAdapter<String>

1 个答案:

答案 0 :(得分:0)

我有一个理论,但我不确定它是否正确。我相信你的应用程序每个fragemnt在视图分页器中一次显示一个吗?

我相信前两个测试用例可能比任何事情都更有效。我相信一次只能显示一个列表视图,并且由于某种原因,机器人保留了额外的列表视图(可能是之前看到的列表视图),这意味着计数总是两个。您可以通过查看hierarchyviewer工具并查看应用程序中显示的列表视图来验证这一点。

我的替代方案是在不同的列表视图上设置好的ID(或标签/内容描述)并使用这些而不是机器人的getCurrentListViews()方法,这种方法容易出现这类问题。