2013-06-05 10 views
6

Attualmente sto lavorando su test di Android con Robotium, quando eseguo seguente testcase in Android 2.3 emulatore Ricevo un errore di "java.lang.SecurityException: WifiService: né utente né 10038 processo corrente ha android.permission.CHANGE_WIFI_STATE. ".eccezione di protezione durante la prova di wifi sul robotium

Codice di prova:

public void testScheduledPayments() 
    { 
     solo.clickOnButton(0); 
     solo.enterText(0, "demo"); 
     solo.enterText(1,"password"); 
     solo.clickOnButton("Log In"); 
     WifiManager wifiMan = (WifiManager) solo.getCurrentActivity().getSystemService(Context.WIFI_SERVICE); 
     wifiMan.setWifiEnabled(false); 
     solo.clickOnText("Payments"); 
     solo.clickInList(2); 
     solo.waitForText("Loading paymnets"); 
     solo.clickInList(0); 
     solo.clickOnMenuItem("Logout"); 
     solo.clickOnButton("Logout"); 
     solo.finishOpenedActivities(); 
    } 

At My file di manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tesaptra" 
    android:versionCode="1" 
    android:versionName="1.0"> 
     <uses-sdk android:minSdkVersion="10" /> 


    <instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="com.info.native" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <uses-library android:name="android.test.runner" /> 

    </application> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 

</manifest> 

Ed ecco il mio file di log cat

java.lang.SecurityException: WifiService: Neither user 10038 nor current process has android.permission.CHANGE_WIFI_STATE. 
at android.os.Parcel.readException(Parcel.java:1322) 
at android.os.Parcel.readException(Parcel.java:1276) 
at android.net.wifi.IWifiManager$Stub$Proxy.setWifiEnabled(IWifiManager.java:614) 
at android.net.wifi.WifiManager.setWifiEnabled(WifiManager.java:713) 
at com.testaptra.Payments.testScheduledPaymnets(Payments.java:113) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204) 
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194) 
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 

ho aggiunto tutti i permessi a manifestarsi. xml ma senza fortuna. Per favore, aiutatemi se hai familiarità con il problema in basso?

Grazie in anticipo

+1

Hai trovato una soluzione? –

+0

@RenatoLochetti no aspettando la soluzione –

risposta

8

autorizzazione devono essere impostati nell'applicazione di destinazione. Le autorizzazioni nell'applicazione di prova sono completamente ignorate. Significa che l'apk di instrumnetation non ha mai più privilegi dell'applicazione di destinazione.

+0

@helloworld: questa soluzione ha funzionato per me. Inserisci l'autorizzazione all'uso in entrambi i manifesti. –

1

È infatti possibile fornire all'applicazione di test più autorizzazioni di quelle della tua applicazione reale ma per farlo devi fare qualcosa di un po 'subdolo con il tuo manifest Android.

Quello che dovete fare è dare entrambe le vostre app lo stesso android:sharedUserId nel vostro manifest, questo significa che se aggiunge in un permesso supplementare che entrambi avranno accesso ad esso. Usando questo è possibile alla tua app di test con molte autorizzazioni da fare con quello che vuole, ho usato sia questo approccio sia un approccio diverso (fai un servizio di intenti la tua app di test può far scattare gli intent per fare cose normalmente non fattibili dal app con cui stai testando) per testare il tipo di scenario che stai provando.

Problemi correlati