我如何等待Activity在Robotium中加载其视图?

时间:2013-05-28 18:37:24

标签: android testing automation robotium

我遇到了Robotium的问题,其中waitForActivity在加载活动时完成,但其上的视图尚不可访问。例如:

solo.clickOnButton("Go");
assertTrue(solo.waitForActivity("ActivityTest", 5000));
Activity a = solo.getCurrentActivity();  // This works - a is "ActivityTest"
ArrayList<View> v = solo.getViews();     // This doesn't work - v is empty

问题似乎是活动还没有完全加载;睡眠延迟解决了这个问题:

solo.clickOnButton("Go");
assertTrue(solo.waitForActivity("ActivityTest", 5000));
Activity a = solo.getCurrentActivity();  // This works - a is "ActivityTest"
solo.sleep(5000);
ArrayList<View> v = solo.getViews();     // This works - v has lots of views

这只是Robotium的生活现实还是我做错了?

编辑:这就是我现在用来代替solo.waitForActivity:

public Boolean waitForActivity(String name) {
    int timeout = 10 * 1000; 
    long start = Calendar.getInstance().getTimeInMillis();
    assertTrue(solo.waitForActivity(name, timeout));
    solo.assertCurrentActivity(name, name);
    ArrayList<View> views = solo.getViews();
    while (views.isEmpty()) {
        solo.sleep(1000);
        views = solo.getViews();
        if (Calendar.getInstance().getTimeInMillis() > start + timeout)
    return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:4)

这很正常。活动已更改,但视图尚未完全加载。 solo.sleep的解决方法很好,如果测试持续多长时间并不重要。

还有一些其他解决方案,您可以使用。这真的取决于你想要实现的目标。如果要在指定视图上执行某些操作,可以轻松使用solo.waitForView。如果你要对视图集合做一些事情,我可以建议你使用solo.waitForCondition,但是你必须对这个条件进行一些实现。