我正在尝试在Robotium中运行一些自动化测试,方法是迭代列表并单击每个列表元素以启动另一个活动。我的测试方法中有以下代码:
代码:
solo.assertCurrentActivity("Wrong activity", MainActivity.class);
//Clicks on the action bar tab
solo.clickOnText("Charts");
ArrayList<ListView> list = solo.getCurrentListViews();
for(int i = 0; i < list.size(); i++) {
//Clicks on the list item assert that the new activity is started
solo.clickInList(chartPosition);
solo.assertCurrentActivity("Json Class", JsonActivity.class);
//Go back to the list
solo.goBack();
}
上面的代码没有点击任何列表项,JUnit测试结果显示所有测试都通过,这非常令人困惑。
有没有人如何成功遍历Robotium中的列表?
我已经看到了另一个与此相似的问题,但答案建议看看jMock而不是帮助。
答案 0 :(得分:1)
我看到了几个问题:
试试这个:
for(int i = 0; i < list.size(); i++) {
assertTrue("There are no listviews in this activity.", list.size() > 0);
chartPosition = 0; // just to be safe, point at the first item in the list.
for(int i = 0; i < list.size(); i++) {
solo.clickInList(chartPosition, i); // Note that "i" identifies the ListView
solo.waitForActivity("name.of.the.expected.activity");
}
...
}
免责声明 - 此建议完全基于代码检查和Robotium Solo Javadoc:http://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/1.4.0/robotium-solo-1.4.0-javadoc.jar!/com/jayway/android/robotium/solo/Solo.html#clickInList(int)
答案 1 :(得分:1)
我以前使用这些辅助函数的状态略有不同,以处理listviews所需的大部分内容:
public View getViewAtIndex(final ListView listElement, final int indexInList, Instrumentation instrumentation) {
ListView parent = listElement;
if (parent != null) {
if (indexInList <= parent.getAdapter().getCount()) {
scrollListTo(parent, indexInList, instrumentation);
int indexToUse = indexInList - parent.getFirstVisiblePosition();
return parent.getChildAt(indexToUse);
}
}
return null;
}
public <T extends AbsListView> void scrollListTo(final T listView,
final int index, Instrumentation instrumentation) {
instrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
listView.setSelection(index);
}
});
instrumentation.waitForIdleSync();
}
将这些功能存储在某个地方(如果你愿意,它们可以是静态的...我宁愿不这样做,但很方便)
ListView list = solo.getCurrentListViews().get(0);
for(int i=0; i < list.getAdapter().getCount(); i++){
solo.clickOnView(getViewAtIndex(list, i, getInstrumentation()))
solo.assertCurrentActivity("Json Class", JsonActivity.class);
solo.goBack();
}
您当前的解决方案实际上是尝试迭代屏幕上的所有列表视图而不是列表视图中的元素。