2016-09-29 1 views
0

Si l'un de mes fragments, fragmentation, je dois effectuer un clic. Sinon, effectuez une autre action. Comment puis-je savoir que c'est le fragment sur mon écran?Comment savoir si un fragment est affiché (Test UI)

Tests d'interface utilisateur Android. Ci-dessous mon code pour tester EDIT CODE:

@Rule 
    public ActivityTestRule mActivityRule = new ActivityTestRule<>(MainActivity.class); 

    @After 
    public void setUp(){ 
     Logout(); 
    } 
    @Test 
    public void shouldOfferRide(){ 
     SystemClock.sleep(1500); 
     Login(); 
     onView(withId(R.id.searchButton)).perform(typeText(emailSearch)); 
     onView(withId(R.id.searchButton)).perform(pressImeActionButton()); 
     onView(withId(R.id.community_user_ask_button)).perform(click()); 
     SystemClock.sleep(1500); 
     onView(withId(R.id.button1)).perform(click()); 
     onView(withId(R.id.send_request)).perform(click()); 
     SystemClock.sleep(1500); 
     ((MainActivity)mActivityRule.getActivity()).navItemClick(4); 
     SystemClock.sleep(3500); 
     LoginMyrides(); 
     onView(withId(R.id.my_rides_tab_bar)).perform(click()); 
     SystemClock.sleep(1000); 

     {I have to know is ratingfragment before perform click below} 

     onView(withId(R.id.rating_bar)).perform(click()); 
     onView(withId(R.id.deny_btn)).perform(click()); 
    } 

     public void Login(){ 
     onView(withId(R.id.edt_new_login_email)).perform(typeText(emailLogin)); 
     onView(withText(R.string.next_button)).perform(click()); 
     onView(withId(R.id.edt_new_password)).perform(typeText(senha)); 
     onView(withText(R.string.login_new_pass)).perform(click()); 
    } 

    public void Logout(){ 
     new SessionManager(mActivityRule.getActivity()).logoutUser(); 
    } 
} 
+0

Il existe de nombreuses solutions pour ce cas, mais la meilleure est la méthode instanceOf par laquelle vous pouvez obtenir ce qu'est le fragment courant. utilisez-le comme si (currentFragmet instanceOf rattingfragment) {} – HAXM

+0

http://stackoverflow.com/a/24589081/4961126 – HAXM

Répondre

0

Espresso a été conçu pour les tests qui peuvent suivre une étape recette pas à pas, sans prise de décision. Vous devriez considérer les situations où le fragment sera visible et quand il ne le sera pas. Ensuite, écrivez des tests séparés pour chaque scénario.

0
If you want to know it in activity, then just use: 

Fragment fragment = getFragmentManager().findFragmentByTag(stringTag); 
if (fragment != null) { 
     //here it means the fragment is been shown 
} 

And If you want to know it in fragment then do your stuff in fragment's any of the following life cycle method: 


onAttach(); 
onCreate(); 
onCreateView(); 
onActivityCreated(); 
onStart(); //or 
onResume(); 

Ces sera appelé dès que votre fragment va s'affiche à l'écran. Référence: https://developer.android.com/guide/components/fragments.html#Creating

0

Utilisez la fonction suivante dans votre fragment:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    if (isVisibleToUser) { 
     //fragment is visible on screen...do your stuff here 
    } 
    else { 
     // fragment is no longer visible 
    } 
}