2015-10-28 23 views
6

Non credo che questa sia una domanda sbagliata. Sto scrivendo un semplice test Espresso e parte di esso consiste nel fare clic su un pulsante "Ok" in uno snack bar.Come fare clic sul pulsante della barra degli snack nei test Espresso?

Espresso.onView(allOf(withId(android.support.design.R.id.snackbar_text), withText(R.string.permission_snackbar))) 
      .check(matches(isDisplayed())); 
Espresso.onView(withText("Ok")).perform(click()); 

Questo tiri

android.support.test.espresso.PerformException: Errore l'esecuzione 'solo click' sulla vista 'con il testo: è "OK"'. Causa: java.lang.RuntimeException: l'azione non verrà eseguita perché la vista di destinazione non corrisponde a uno o più dei seguenti vincoli: almeno il 90 percento dell'area di visualizzazione viene visualizzata all'utente. Visualizzazione di destinazione: "AppCompatButton {id = 2131558552, nome-resident = snackbar_action, visibility = VISIBILE, larghezza = 264, altezza = 144, has-focus = false, has-focusable = true, has-window-focus = true , is-clickable = true, is-enabled = true, is-focused = false, is-focusable = true, is-layout-requested = false, is-selected = false, root-is-layout-requested = falso, ha-input-connection = falso, x = 684.0, y = 53,0, text = Ok, input-type = 0, ime-target = falsi, has-links = false}"

Tutte le idee ?

+0

"Non credo che questa sia una domanda perversa." Certo che no, nessuno lo fa mai. Se spiegherai perché questo non è un problema, fornisci * motivi specifici * perché * domande specifiche esistenti * non hanno risposto alla tua domanda; in caso contrario, non farlo nemmeno menzionare. –

+0

Ho praticamente lo stesso problema, come hai risolto? –

risposta

1

Si può semplicemente essere trovato usando l'id snackbar_action:

onView(allOf(withId(android.support.design.R.id.snackbar_action))) 
    .perform(click()); 
+0

se osservi bene l'OP, vedrai che il matcher ha funzionato. La mia risposta discute le condizioni della gara che causano questo problema. – OYRM

6

Il RuntimeException visto qui java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: at least 90 percent of the view's area is displayed to the user.. Il problema, infatti, deriva da un errore dello View da visualizzare completamente.

Il problema è causato da una condizione di competizione. Stai tentando di aprire la vista e durante l'apertura stai tentando di fare clic su di essa. Se i tempi non sono corretti, meno del 90% di View sarà disponibile per la struttura Espresso a click(). Si può essere in grado di risolvere il problema da animazioni invalidanti, come raccomandato nel The Espresso Setup Instructions

  • Naviga a voi Developer Options
  • Impostare la seguente scala di animazione
    • Finestra = 0,0X
    • Transizione scala di animazione del telefono = 0.0x
    • Scala durata animatore = 0.0x

Il mio test indica che è possibile farla franca impostando lo Transition Animation Scale su 0.0x. Come puoi immaginare, questa è una soluzione perfettamente coerente alle condizioni di gara che stai vivendo.