2016-03-31 16 views
5

Ho trovato un ottimo tutorial di prova strumentale su YT Advanced Android Espresso. Ho preso il codice da lì con piccoli aggiustamenti ai miei bisogni.Come controllare il titolo della barra degli strumenti nel test strumentale di Android?

import static android.support.test.InstrumentationRegistry.getInstrumentation; 
import static android.support.test.espresso.Espresso.onView; 
import static android.support.test.espresso.action.ViewActions.click; 
import static android.support.test.espresso.assertion.ViewAssertions.matches; 
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; 
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; 
import static android.support.test.espresso.matcher.ViewMatchers.withChild; 
import static android.support.test.espresso.matcher.ViewMatchers.withId; 
import static android.support.test.espresso.matcher.ViewMatchers.withParent; 
import static android.support.test.espresso.matcher.ViewMatchers.withText; 
import static org.hamcrest.core.AllOf.allOf; 

... 

@Test 
public void checkToolbarTitle() { 
    String toolbarTitile = getInstrumentation().getTargetContext().getString(R.string.my_bus_stops); 
    onView(allOf(isAssignableFrom(TextView.class), withParent(isAssignableFrom(Toolbar.class)))).check(matches(withText(toolbarTitile))); 
} 

Purtroppo non funziona per me. Test fallito con:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: (is assignable from class: class android.widget.TextView and has parent matching: is assignable from class: class android.widget.Toolbar) 

Cosa c'è di sbagliato? Come posso testarlo in altro modo?

risposta

3

SOLUZIONE

Il metodo va bene. Come ha scritto Chiu-Ki Chan nel suo tutorial, è possibile "individuare quella particolare vista". ma è necessario assicurarsi che si importato corretta Toolbar:

import android.support.v7.widget.Toolbar; 

invece di:

import android.widget.Toolbar; 
15

Questo funziona per me:

onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) 
    .check(matches(withText("toolbarTitile"))); 
+2

Questo non ha funzionato per me. Era l'importazione di Grzegorz Bielanski. instanceOf non può essere risolto per me. –

+0

Ti chiedi solo perché fai voto negativo ?! Funziona per la maggior parte dei casi (vedi quantità di voti) e il fatto che non funzioni per te non rende questa risposta errata. – denys

+0

Come faccio a sapere che funziona per "la maggior parte dei casi". La mia esperienza è che ciò che funziona su Android cambia da versione a versione, e una risposta pertinente oggi non sarà sicuramente rilevante domani. –

1

non mi ricordo se ho ho scritto questo da solo, o se l'ho trovato da qualche parte, ma questo è il modo in cui controllo i titoli della barra degli strumenti:

public static Matcher<View> withToolbarTitle(CharSequence title) { 
    return withToolbarTitle(is(title)); 
} 

public static Matcher<View> withToolbarTitle(final Matcher<CharSequence> textMatcher) { 
    return new BoundedMatcher<View, Toolbar>(Toolbar.class) { 
     @Override 
     public boolean matchesSafely(Toolbar toolbar) { 
      return textMatcher.matches(toolbar.getTitle()); 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with toolbar title: "); 
      textMatcher.describeTo(description); 
     } 
    }; 
} 

Questo funziona con tutti i casi. Esempio di affermazione: onView(withId(R.id.toolbar)).check(matches(withToolbarTitle("title")));

Problemi correlati