6

I sono black-box per provare un'applicazione utilizzando Robotium framework. L'app in prova invia una notifica nella barra di stato ogni volta che installo una nuova applicazione. Vorrei fare clic su quella notifica, ma non ho ancora trovato un modo corretto per farlo.Fare clic programmaticamente su Notifica Android

Quando clicco manualmente su una notifica ottengo questo logcat linee:

I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.FrontActivity bnds=[0,38][240,86] (has extras) u=0} from pid -1 
I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.ResultActivity u=0} from pid 8600 
I/ActivityManager( 148): Displayed com.test.package/.activity.FrontActivity: +1s183ms 
I/ActivityManager( 148): Displayed com.test.package/.activity.ResultActivity: +744ms 

So Robotium non può testare 2 diverse applicazioni allo stesso tempo, così come so che non è possibile ottenere la notifica di un'applicazione esterna.

Ho anche cercato di ottenere l'intento sospeso e accenderlo utilizzando il seguente codice:

Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); 
String intentClassString = "com.test.package.activity.FrontActivity"; 
Class<?> intentClass = null; 

try { 
    intentClass = Class.forName(intentClassString); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 

Intent intent = new Intent(context, intentClass); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE); 

try { 
    pendingIntent.send(); 
} catch (CanceledException e) { 
    e.printStackTrace(); 
} 

L'attività è in realtà ha dimostrato, ma è diverso da quello che posso ottenere invocando manualmente. Penso che qualcosa sia sbagliato nel contesto in cui passo, o nel modo in cui chiamo l'intento in sospeso.

Qualche suggerimento su questo problema? C'è un modo migliore per simulare il clic su una notifica?

risposta

0

Si prega di trovare buone dicussion e alcune opzioni in questa altra domanda StackOverflow:
Can I test status bar notifications using Android's testing framework?

Dal momento che si dispone già di codice di accendere un intento, invece di cercare di ricreare ciò che il notify() chiamata farebbe, prova ad aggiungere un'attività speciale solo per test che in realtà chiama notify() sulla notifica.

1

È possibile attivare lo scorrimento sulla barra delle notifiche e toccare l'evento sulla notifica.

consultare comandi:

adb shell input swipe 100 500 400 100 1000 

adb shell input tap 400 400 

cambiando gli argomenti che è possibile utilizzare questi comandi.

0

La risposta che Ranjith KP ha fornito contiene la soluzione. Tieni presente che hai bisogno del telefono su cui è in esecuzione l'app root, in quanto comandi utilizzati con privilegi sudo.

Questo è il codice che funziona per me. Estende prima la barra di notifica (comando swipe), aspetta 1 secondo e infine tocca la prima notifica sull'elenco. Modifica i parametri dell'asse come desideri.

Process su = null; 
try { 
su = Runtime.getRuntime().exec("su"); 
su.getOutputStream().write("input swipe 270 010 270 900\n".getBytes()); 
Thread.sleep(1000); 
su.getOutputStream().write("input tap 200 200\n".getBytes()); 
su.getOutputStream().write("exit\n".getBytes()); 
su.waitFor(); 
} catch (Exception e) { 
e.printStackTrace(); 
} finally { 
if (su != null) { 
    su.destroy(); 
} 
}