Sto automatizzando il test di un flusso nella mia app in cui installo un amministratore del dispositivo. Per attivare un amministratore del dispositivo sulla maggior parte dei dispositivi (supponiamo che non disponga di alcune API aziendali che mi consentono di fare ciò che offre Samsung), il sistema visualizza un popup all'utente che deve quindi fare clic sul pulsante "Attiva".Come iniettare un evento click con Android UiAutomation.injectInputEvent
Sto usando Robotium e Android JUnit per guidare i miei test. In un normale caso di test si può interagire solo con l'app e il processo sotto test e non tutte le attività di sistema che emergono.
I UiAutomation reclami per consentono di interagire con altre applicazioni sfruttando la Accessibility Framework, e quindi permettendo di inject arbitrary input events.
Quindi - ecco quello che sto cercando di fare:
public class AbcTests extends ActivityInstrumentationTestCase2<AbcActivity> {
private Solo mSolo
@Override
public void setUp() {
mSolo = new Solo(getInstrumentation(), getActivity());
}
...
public void testAbc(){
final UiAutomation automation = getInstrumentation().getUiAutomation();
MotionEvent motionDown = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN,
100, 100, 0);
// This line was added in to give a complete solution
motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
automation.injectInputEvent(motionDown, true)
MotionEvent motionUp = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_UP,
100, 100, 0);
// This line was added in to give a complete solution
motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
automation.injectInputEvent(motionUp, true)
motionUp.recycle();
motionDown.recycle();
}
}
Quando questo test viene eseguito il popup di sistema per "Attiva" l'amministratore del dispositivo è attivo, e voglio cliccare solo sullo schermo. Ho inserito hardcoded in 100.100 come posizione per i clic ai fini di questa domanda, ma realisticamente farò clic nell'angolo in basso a destra dello schermo in modo da poter premere il pulsante.
Non si verificano eventi di clic sullo schermo. Qualcuno ha esperienza con questo? Ci sono alternative per fare ciò che voglio fare? Dalla mia comprensione ci sono pochissimi strumenti che fanno questo.
Grazie.
Aggiornamento Aggiunto setSource
per risposta giusta
Penso che si dovrebbe togliere il setSource() chiama che si è modificato. La domanda iniziale dovrebbe dimostrare il problema, in cui la risposta mostra la soluzione. Così com'è, confrontando le due cause di confusione poiché entrambi funzionano. – Project