2013-06-05 10 views
6

Obecnie pracuję nad testowaniem Androida za pomocą Robotium, kiedy wykonuję testcase w emulatorze Androida 2.3 otrzymuję komunikat o błędzie "java.lang.SecurityException: WifiService: Ani użytkownik 10038 ani obecny proces ma android.permission.CHANGE_WIFI_STATE. ".wyjątek bezpieczeństwa podczas testowania wifi na robotium

kod Test:

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

W moim pliku manifestu:

<?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> 

A oto mój log file kot

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) 

Dodałem wszystkie uprawnienia manifestować. xml ale bez powodzenia. Czy możesz mi pomóc, jeśli znasz poniższy problem?

Dzięki z góry

+1

Czy znalazłeś rozwiązanie? –

+0

@RenatoLochetti nope czekam na rozwiązanie –

Odpowiedz

8

Pozwolenie musi być ustawiony w aplikacji docelowej. Uprawnienia w aplikacji testowej są całkowicie ignorowane. Oznacza to, że apk aplikacji instrumnetation nigdy nie ma więcej uprawnień niż aplikacja docelowa.

+0

@helloworld: To rozwiązanie sprawdziło się. Umieść pozwolenie na użycie w obu manifestach. –

1

Jest to możliwe, aby dać aplikacji testowej więcej uprawnień niż rzeczywistej aplikacji, ale aby to zrobić, trzeba zrobić coś podstępne z manifestem android.

To, co musisz zrobić, to nadać obu aplikacjom ten sam numer android:sharedUserId w swoim manifeście, co oznacza, że ​​jeśli dodasz dodatkowe pozwolenie, że oboje będą mieli do niego dostęp. Korzystając z tej możliwości, możesz użyć aplikacji testowej z wieloma uprawnieniami do robienia tego, co chcesz. Zastosowałem zarówno to podejście, jak i inne podejście (zrób intencyjną usługę, którą Twoja aplikacja testowa może wywołać w celach, które normalnie nie są możliwe do wykonania). aplikacja, którą testujesz), aby przetestować rodzaj scenariusza, który próbujesz.

Powiązane problemy