2013-05-28 2 views
1

활동이로드 될 때 waitForActivity가 완료되지만 아직보기에 액세스 할 수없는 경우 Robotium에 문제가 있습니다. 예 :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