6

Ich bin Black-Box-Test eine Anwendung mit dem Robotium framework. Die zu testende App sendet bei jeder Installation einer neuen Anwendung eine Benachrichtigung in der Statusleiste. Ich möchte auf diese Benachrichtigung klicken, aber ich habe immer noch keinen richtigen Weg gefunden, es zu tun.Programmgesteuert auf Android-Benachrichtigung klicken

Wenn ich manuell auf eine Meldung klicken erhalte ich diese logcat Linien:

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 

Ich weiß Robotium nicht zwei verschiedene Anwendungen gleichzeitig testen können, wie auch ich weiß, Sie nicht die Benachrichtigung bekommen kann eine externe Anwendung.

ich auch versucht, die anstehenden Absicht zu bekommen und es mit dem folgenden Code anwerfen:

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(); 
} 

Die Aktivität wird gezeigt, tatsächlich, aber es ist anders, was ich erhalten, indem man ihn manuell aufrufen es. Ich denke, etwas stimmt nicht in dem Kontext, in dem ich vorbeigehe, oder in der Art, wie ich die ausstehende Absicht nenne.

Irgendwelche Hinweise zu diesem Problem? Gibt es eine bessere Möglichkeit, den Klick auf eine Benachrichtigung zu simulieren?

Antwort

0

Bitte gut dicussion und ein paar Optionen in dieser anderen Stackoverflow Frage finden:
Can I test status bar notifications using Android's testing framework?

Da Sie bereits Code haben eine Absicht zu feuern, anstatt neu erstellen zu versuchen, was die notify() Aufruf tun würde, Versuchen Sie, eine spezielle Aktivität nur zum Testen hinzuzufügen, die notify() in der Benachrichtigung aufruft.

1

Sie können den Swipe in der Benachrichtigungsleiste auslösen und auf das Ereignis bei Benachrichtigung tippen.

Siehe Befehle:

adb shell input swipe 100 500 400 100 1000 

adb shell input tap 400 400 

durch die Argumente Ändern Sie diese Befehle verwenden können.

0

Die Antwort, Ranjith KP gab Ihnen die Lösung enthält. Beachten Sie, dass Sie das Telefon, auf dem die App ausgeführt wird, benötigen, da diese Befehle mit sudo-Berechtigungen verwendet werden.

Dies ist der Code, der für mich arbeitet. Es erweitert zunächst die Benachrichtigungsleiste (Swipe-Befehl), wartet 1 Sekunde und tippt schließlich auf die erste Benachrichtigung in der Liste. Ändern Sie die Achsenparameter wie gewünscht.

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(); 
} 
} 
Verwandte Themen