2016-09-15 5 views
0

그래서, 나는 전체 응용 프로그램을 통과하는 테스트가 있습니다. 이제 모든 것을 그림으로 찍고 싶습니다. 2 개의 액티비티와 다수의 프래그먼트가 있기 때문에 모든 액티비티의 첫 부분 만 가져 오기 때문에 작동하지 않습니다.숟가락 및 에스프레소 테스트

어떻게 모든 조각을 찍을 수 있습니까? 이 방법은 스크린 샷을 만들기위한 컨텍스트를 필요로 할 때

지금
@RunWith(AndroidJUnit4.class) 
@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class HearthBeatUITest { 

    private final int MILISECONDS_TIMEOUT = 300; 
    @Rule 
    public IntentsTestRule<IntroActivity> mActivityRule = new IntentsTestRule<>(IntroActivity.class); 
    private Activity currentActivity; 
} 

이, 당신이 호출됩니다 :

private Activity getActivityInstance() { 
     getInstrumentation().runOnMainSync(new Runnable() { 
      public void run() { 
       Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED); 
       if (resumedActivities.iterator().hasNext()) { 
        currentActivity = (Activity) resumedActivities.iterator().next(); 
       } 
      } 
     }); 

     return currentActivity; 
    } 

그것은 당신이 얻을 것이다를

첫째
@RunWith(AndroidJUnit4.class) 
@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class HearthBeatUITest { 

    private final int MILISECONDS_TIMEOUT = 700; 

    @Rule 
    public ActivityTestRule<IntroActivity> mActivityRule = new ActivityTestRule<>(IntroActivity.class); 
    @Rule 
    public ActivityTestRule<LoginActivity> mLoginActivityRule = new ActivityTestRule<>(LoginActivity.class); 

    @Test 
    /** 
    * Testing all the screens on the application if they are actually there 
    */ 
    public void startTest() { 
     Session.clear(); 
     Spoon.screenshot(mActivityRule.getActivity(), "initial_state"); 
     threadSleep(MILISECONDS_TIMEOUT); 
     onView(withId(R.id.button_register)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mLoginActivityRule.getActivity(), "register_intro"); 
     onView(withId(R.id.register_with_email)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mLoginActivityRule.getActivity(), "register_detailed"); 
     onView(withId(R.id.image_left_button)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mLoginActivityRule.getActivity(), "register_intro"); 
     onView(withId(R.id.image_left_button)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mActivityRule.getActivity(), "initial_state"); 
     onView(withId(R.id.button_signin)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mLoginActivityRule.getActivity(), "login_intro"); 
     onView(withId(R.id.sign_in_emal)).check(matches(isDisplayed())).perform(click()); 
     threadSleep(MILISECONDS_TIMEOUT); 
     Spoon.screenshot(mLoginActivityRule.getActivity(), "login_detailed"); 
    } 

} 
+0

조각에 애니메이션이 있습니까? 애니메이션을 제거하고 dev 설정에서 애니메이션을 끄십시오. – WenChao

답변

0

, 당신은 단지 하나의 규칙이 필요합니다 현재 진행중인 활동으로 스크린 샷을 찍을 수 있습니다. 그냥 fyi, 당신은 대화 상자의 스크린 샷을 취할 수 없습니다.

관련 문제