6

Jestem czarny-box testowanie aplikacji za pomocą Robotium framework. Testowana aplikacja wysyła powiadomienie na pasku stanu za każdym razem, gdy instaluję nową aplikację. Chciałbym kliknąć na to powiadomienie, ale nadal nie znalazłem odpowiedniego sposobu na to.Programowo kliknij powiadomienie na Androidzie

Kiedy ręcznie kliknij na jednym zgłoszeniu otrzymuję ten logcat linie:

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 

wiem Robotium nie można przetestować 2 różnych aplikacji w tym samym czasie, jak również wiem, że nie można uzyskać zgłoszenie zewnętrzna aplikacja.

Próbowałem również uzyskać oczekującą intencję i odpalić go za pomocą następującego kodu:

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

Aktywność rzeczywiście pokazał, ale różni się od tego, co mogę uzyskać poprzez ręczne wywoływanie go. Myślę, że coś jest nie tak w kontekście, w którym mijam, lub w sposób, w jaki nazwałem oczekującą intencję.

Dowolna wskazówka dotycząca tego problemu? Czy istnieje lepszy sposób symulacji kliknięcia powiadomienia?

Odpowiedz

1

Możesz włączyć przesunięcie na pasku powiadomień i dotknij zdarzenia po powiadomieniu.

Patrz komendy:

adb shell input swipe 100 500 400 100 1000 

adb shell input tap 400 400 

zmieniając argumentów można użyć tych poleceń.

0

Odpowiedź, która podała Ranjith KP zawiera rozwiązanie. Pamiętaj, że potrzebujesz telefonu, który ma uruchomioną aplikację, ponieważ są to polecenia używane z uprawnieniami sudo.

To jest kod, który działa dla mnie. Najpierw rozciąga pasek powiadomień (polecenie przesuwania), czeka 1 sekundę i wreszcie dotyka pierwszego powiadomienia na liście. Zmodyfikuj parametry osi, jak chcesz.

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(); 
} 
} 
Powiązane problemy