2014-11-25 27 views
10

Ilekroć próbuję użyć UiAutomation w każdym teście przez getInstrumentation().getUiAutomation() proces ulega awarii z tego wyjątku:java.lang.SecurityException: Permission Denial: getIntentSender() przy użyciu UiAutomation w teście

java.lang.SecurityException: Permission Denial: getIntentSender() from pid=30334, uid=2000, (need uid=1000) is not allowed to send as package android 
     at android.os.Parcel.readException(Parcel.java:1540) 
     at android.os.Parcel.readException(Parcel.java:1493) 
     at android.app.IUiAutomationConnection$Stub$Proxy.disconnect(IUiAutomationConnection.java:225) 
     at android.app.UiAutomation.disconnect(UiAutomation.java:240) 
     at android.app.Instrumentation.finish(Instrumentation.java:197) 
     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:575) 
     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837) 

jakiś pomysł, dlaczego ? Używam programu Gradle przez Android Studio, wypróbowałem różne wersje, dzwoniąc bezpośrednio przez adb, nawet bez zewnętrznej zależności (i oczywiście z co najmniej SDK 18) ... Zawsze się zawiesza.

Jest to jedyny oficjalny przykład znalazłem: https://www.youtube.com/watch?v=_SlBHUW0ybM

Odpowiedz

19

To nie jest odpowiedź, dlaczego UIAutomator nie łapie błąd, ale raczej możliwe obejście, które znalazłem. Gdy usługi ułatwień dostępu są włączone, nie mogę uzyskać zrzutu UIAutomator, ponieważ otrzymuję błąd, który opisałeś. Gdy wyłączę TalkBack i/lub Switch Access w ustawieniach dostępności, nie będę już otrzymywać błędu odmowy uprawnień i pomyślnie zakończy się zrzut UIAutomator. Nie jestem pewien, czy to ci pomoże, ale za każdym razem mogę odtworzyć Twój problem z usługami dostępności w Lollipop (Nexus 5).

+0

O człowieku, który działa jeśli nie będę ci dziękować! – Takhion

+6

Dla mnie jest LastPass. –

+0

@JakeWharton Miałeś ten problem z LastPass - jak się zorientowałeś, że to był LastPass i co zrobiłeś, żeby to naprawić? Mam wyłączony TalkBack i Switch Access i nadal otrzymuję ten błąd na Androida 6.0, ale nie w wersji 5.1.1. –

0

Zastosowanie InstrumentationRegistry.getTargetContext() zamiast InstrumentationRegistry.getContext()