【问题标题】:How can I wait for an Activity to load its views in Robotium?如何等待 Activity 在 Robotium 中加载其视图?
【发布时间】:2013-05-23 20:08:31
【问题描述】:

我遇到了 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;
}

【问题讨论】:

    标签: android testing automation robotium


    【解决方案1】:

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

    您可以使用其他一些解决方案。这真的取决于你想要达到的目标。如果你要在指定的视图上做某事,你可以很容易地使用solo.waitForView。如果您打算对视图集合做一些事情,我可以建议您使用 solo.waitForCondition,但是您必须对该条件进行一些实现。

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多