2013-05-28 31 views
1

我遇到了Robotium問題,其中waitForActivity在加載活動時完成,但其中的視圖尚未訪問。例如:如何等待活動在Robotium中加載其視圖?

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; 
} 

回答

4

這是正常的。活動已更改,但視圖尚未完全加載。使用solo.sleep解決方法很好,如果測試持續的時間不重要。

還有一些其他解決方案,您可以使用。這真的取決於你想要達到的目標。如果您要在指定視圖上執行某些操作,則可以輕鬆使用solo.waitForView。如果您要對視圖集合進行操作,我可以建議您使用solo.waitForCondition,但是您必須對該條件進行一些實現。

+0

謝謝,很高興知道。 – DevOfZot